From 7eb06f27228b1705d89a16fa8cd128ffe37cb633 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 26 Feb 2021 12:39:13 -0500 Subject: [PATCH 1/3] 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. --- confluent_server/confluent/discovery/protocols/slp.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/confluent_server/confluent/discovery/protocols/slp.py b/confluent_server/confluent/discovery/protocols/slp.py index f640702d..30e9de4f 100644 --- a/confluent_server/confluent/discovery/protocols/slp.py +++ b/confluent_server/confluent/discovery/protocols/slp.py @@ -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 @@ -583,6 +584,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: @@ -597,7 +600,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', {}) From b3857f8d332293ca9a74d957495a233d1f8e9db9 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Sat, 27 Feb 2021 20:53:33 -0500 Subject: [PATCH 2/3] Fix chained discovery of DWC SMMv2 SMMv2 for DWC has more ports. Make the code not care about which port is which for checking for matching smm fingerprints. --- confluent_server/confluent/discovery/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/confluent_server/confluent/discovery/core.py b/confluent_server/confluent/discovery/core.py index ff1350cd..461ce8bb 100644 --- a/confluent_server/confluent/discovery/core.py +++ b/confluent_server/confluent/discovery/core.py @@ -814,10 +814,10 @@ def get_smm_neighbor_fingerprints(smmaddr, cv): neighs = wc.grab_json_response('/scripts/neighdata.json') if not neighs: return - for idx in (4, 5): - if 'sha256' not in neighs[idx]: + for neigh in neighs: + if 'sha256' not in neigh: continue - yield 'sha256$' + b64tohex(neighs[idx]['sha256']) + yield 'sha256$' + b64tohex(neigh['sha256']) def get_nodename(cfg, handler, info): From 95466392f9db566aaa64d08fdab3debc4d7cdd84 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 1 Mar 2021 10:31:28 -0500 Subject: [PATCH 3/3] Fix typo in confluentdbutil The restore function would fail to chown directories due to typo --- confluent_server/bin/confluentdbutil | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/confluent_server/bin/confluentdbutil b/confluent_server/bin/confluentdbutil index 884a1b8f..be35e5aa 100755 --- a/confluent_server/bin/confluentdbutil +++ b/confluent_server/bin/confluentdbutil @@ -74,7 +74,7 @@ if args[0] == 'restore': for targdir in os.walk('/etc/confluent'): os.chown(targdir[0], owner, group) for f in targdir[2]: - os.chown(os.patht.join(targdir[0], f), owner, group) + os.chown(os.path.join(targdir[0], f), owner, group) except Exception as e: print(str(e)) sys.exit(1)