2
0
mirror of https://github.com/xcat2/confluent.git synced 2024-11-28 20:39:40 +00:00

Improve concurrency of SLP

During a scan, unicast TCP
interrogation of candidates
was done serially. Do this
concurrently so that poorly
behaving targets do not prolong
a scan.
This commit is contained in:
Jarrod Johnson 2021-02-26 12:39:13 -05:00
parent 481a70c304
commit 0fbe39690e

View File

@ -19,6 +19,7 @@ import confluent.util as util
import confluent.log as log
import os
import random
import eventlet.greenpool
import eventlet.green.select as select
import eventlet.green.socket as socket
import struct
@ -590,6 +591,8 @@ def scan(srvtypes=_slp_services, addresses=None, localonly=False):
# reduced chance of many responses overwhelming receive buffer.
_grab_rsps((net, net4), rsps, 1, xidmap)
# now to analyze and flesh out the responses
handleids = set([])
gp = eventlet.greenpool.GreenPool(128)
for id in rsps:
for srvurl in rsps[id].get('urls', ()):
if len(srvurl) > 4:
@ -604,7 +607,10 @@ def scan(srvtypes=_slp_services, addresses=None, localonly=False):
break
else:
continue
_add_attributes(rsps[id])
gp.spawn_n(_add_attributes, rsps[id])
handleids.add(id)
gp.waitall()
for id in handleids:
if 'service:lighttpd' in rsps[id]['services']:
currinf = rsps[id]
curratt = currinf.get('attributes', {})