View Issue Details

IDProjectCategoryView StatusLast Update
0002742GNUnettransport servicepublic2013-02-05 20:42
ReporterMatthias Wachs Assigned ToMatthias Wachs Due Date
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status closedResolutionfixed 
Product VersionGit master 
Target Version0.9.5aFixed in Version0.9.5a 
Summary0002742: Available sockets should be splitted among components
DescriptionWhen running testbed we can run out of sockets due to:

many addresses to validate
latency probes
ats address changes

the number of sockets should be splitted among the plugins and we should have separate validation pool
TagsNo tags attached.

Activities

Matthias Wachs

2013-02-04 13:33

reporter   ~0006834

This is not possible to implement

We can say: 1 session == 1 socket (not for inbound not for HTTP)

Components involved:

transport_validation
transport_neighbours
plugins
ats

Reasons:

The sessions do not "belong" to a transport_validation or transport_neighbours.
They call get_session and the plugin creates a new session or returns an existing session with this address.

So we do not know when to increment or decrement the number of sockets currently used.

If validation needs to send a ping it calls get_session but is never notified when a session ends, so validation could not decrement the socket_used counter.
Neighbours on the other hand can use a session created by validation, so here we would have double counting.

Wrap Up:
The desired behaviour cannot be implemented without a major change in the code.
Ugly and unflexibel, but quick hack:

Distribute FDs over plugins and have plugins count the number of FDs ... but then we have a fix distribution of FDs to plugins

Better:

Have a transport_session component managing the sessions... including counting, timeout and ATS notifications: a lot of work!

Matthias Wachs

2013-02-04 16:44

reporter   ~0006835

Last edited: 2013-02-05 08:14

Implementation:

Validation gets an amount of sockets and calculates a validation frequency
Transport plugins now obey NEIGHBOUR_LIMIT

Plugins checked:
TCP, HTTP(S)-client, HTTP(S)-server

Not required for:
UDP, UNIX, WLAN

Issue History

Date ModifiedUsernameFieldChange
2013-01-23 15:11Matthias WachsNew Issue
2013-01-23 15:11Matthias WachsStatusnew => assigned
2013-01-23 15:11Matthias WachsAssigned To => Matthias Wachs
2013-02-04 13:33Matthias WachsNote Added: 0006834
2013-02-04 16:44Matthias WachsNote Added: 0006835
2013-02-05 08:13Matthias WachsNote Edited: 0006835
2013-02-05 08:14Matthias WachsNote Edited: 0006835
2013-02-05 08:14Matthias WachsStatusassigned => resolved
2013-02-05 08:14Matthias WachsResolutionopen => fixed
2013-02-05 11:44Christian GrothoffProduct Version => Git master
2013-02-05 11:44Christian GrothoffFixed in Version => 0.10.0
2013-02-05 11:44Christian GrothoffTarget Version => 0.10.0
2013-02-05 20:39Christian GrothoffFixed in Version0.10.0 => 0.9.5a
2013-02-05 20:39Christian GrothoffTarget Version0.10.0 => 0.9.5a
2013-02-05 20:42Christian GrothoffStatusresolved => closed