View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0003612||GNUnet||transport service||public||2015-01-18 18:24||2018-06-07 00:25|
|Reporter||Christian Grothoff||Assigned To||Christian Grothoff|
|Platform||i7||OS||Debian GNU/Linux||OS Version||squeeze|
|Product Version||SVN HEAD|
|Target Version||0.11.0pre66||Fixed in Version||0.11.0pre66|
|Summary||0003612: connection failures causes transport to drop validated addresses from ATS's list|
|Description||gnunet-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
|Tags||No tags attached.|
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).
||ATS IPC API is now clean.|
||libgnunetats now re-initializes state on reconnect as of SVN 34967. So the 'visible' bugs are now hopefully gone.|
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.
||singleton struct issue was fixed, GAS_addresses_add should still be looked into.|
||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.|
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
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.
||I'm not seeing this anymore.|
|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|