View Issue Details

IDProjectCategoryView StatusLast Update
0003612GNUnettransport servicepublic2018-06-07 00:25
ReporterChristian GrothoffAssigned ToChristian Grothoff 
Status closedResolutionfixed 
Platformi7OSDebian GNU/LinuxOS Versionsqueeze
Product VersionSVN HEAD 
Target Version0.11.0pre66Fixed in Version0.11.0pre66 
Summary0003612: connection failures causes transport to drop validated addresses from ATS's list
Descriptiongnunet-service-transport_neighbours.c calls GNUNET_ATS_address_destroyed() in many cases to indicate that it somehow failed to use a suggested address.

While the goal is to get an "alternative" suggestion, the result is that an address that may have been added by 'validation' might be not known to ATS anymore. In fact, it seems that this can even happen in principle if the *session* is still up (see GNUNET_TRANSPORT_PS_SYN_SENT case in gnunet-service-transport_neighours.c:1697, for example).

As a result, ATS may have *no* addresses (to select), even if plugins/validation know some that might work.

We need to have a cleaner structure:

1) ATS should always know all *validated* addresses
   (at least of peers that we'd like to talk to)
2) ATS (scheduler API at least) should always know
   about all active sessions (ATS service doesn't
   really seem to care)
3) Telling ATS that we currently do not *use* an
   address or failed to *switch* to a suggested
   address is another story. We have the "in-use"
   API calls, maybe we need another for "failed to
   switch". But this should be separated from
   address destroyed.

TagsNo tags attached.


Christian Grothoff

2015-01-22 21:53

manager   ~0008803

ATS API is now cleaner, still needs 1 or 2 functions to tell ATS that an address suggested by ATS could not be used (right now, there is no good way to tell ATS about this transient failure immediately; ATS can only notice that the 'in_use' flag doesn't go up despite its suggestion).

We still need to fix the ATS IPC API (should send slot numbers instead of always serializing the full binary address => significant simplification).

Also, we still need the ATS API to retransmit the full state after reconnecting to ATS service (if connection died).

Christian Grothoff

2015-01-22 22:50

manager   ~0008804

ATS IPC API is now clean.

Christian Grothoff

2015-01-22 23:23

manager   ~0008805

libgnunetats now re-initializes state on reconnect as of SVN 34967. So the 'visible' bugs are now hopefully gone.

Christian Grothoff

2015-01-22 23:36

manager   ~0008806

gnunet-service-ats_addresses.c still has some oddities, especially when it comes to adding addresses (odd logic to allow case where address is added twice, which should now simply not be allowed anymore).

Also, we box all of the state of the addresses into a singleton struct, instead of just using statics. Should be fixed.

Christian Grothoff

2015-01-23 00:23

manager   ~0008807

singleton struct issue was fixed, GAS_addresses_add should still be looked into.

Christian Grothoff

2015-01-26 23:33

manager   ~0008812

Except for some ATS tests where the testcase makes some (now invalid) assumption about the API that Matthias is looking into, tests are now passing again without generating errors/assertions/cores. Time to see if the big refactoring/cleanup fixed the visible issue.

Christian Grothoff

2015-02-01 15:29

manager   ~0008833

Current line of thought:
1) validation creates new session to check validity; this session is
   intentionally not reported to ATS (or even gnunet-service-transport_ats.c),
   as the address is still being validated; the plugin does not call the
   new-session notification (as per get_session convention)
2) upon PONG, the address continues to exist, but we still do not notify ATS
   (bug here!?)
3) the OTHER peer uses our session to communicate, but we never see a 'new'
   session as for the plugin it is one that the transport service already
   knows about => ATS never learns about the session.

Christian Grothoff

2015-02-10 12:40

manager   ~0008855

I'm not seeing this anymore.

Issue History

Date Modified Username Field Change
2015-01-18 18:24 Christian Grothoff New Issue
2015-01-18 18:24 Christian Grothoff Status new => assigned
2015-01-18 18:24 Christian Grothoff Assigned To => Matthias Wachs
2015-01-18 18:24 Christian Grothoff Assigned To Matthias Wachs => Christian Grothoff
2015-01-18 18:24 Christian Grothoff Priority normal => immediate
2015-01-22 21:53 Christian Grothoff Note Added: 0008803
2015-01-22 22:50 Christian Grothoff Note Added: 0008804
2015-01-22 23:23 Christian Grothoff Note Added: 0008805
2015-01-22 23:36 Christian Grothoff Note Added: 0008806
2015-01-23 00:23 Christian Grothoff Note Added: 0008807
2015-01-26 23:32 Christian Grothoff Target Version => 0.11.0pre66
2015-01-26 23:33 Christian Grothoff Note Added: 0008812
2015-02-01 15:29 Christian Grothoff Note Added: 0008833
2015-02-10 12:40 Christian Grothoff Note Added: 0008855
2015-02-10 12:40 Christian Grothoff Status assigned => resolved
2015-02-10 12:40 Christian Grothoff Fixed in Version => 0.11.0pre66
2015-02-10 12:40 Christian Grothoff Resolution open => fixed
2018-06-07 00:25 Christian Grothoff Status resolved => closed