mirror of
https://github.com/xcat2/confluent.git
synced 2024-11-25 11:01:09 +00:00
Avoid searching switches for foreign nodes
Consult collective.manager to decide to skip consideration of a node, if that node shouldn't be managed anyway. This should avoid "cross-island" behavior for such environments.
This commit is contained in:
parent
df47c6d0fd
commit
20f02b5ef7
@ -259,6 +259,9 @@ def get_myname():
|
||||
mycachedname[1] = time.time()
|
||||
return myname
|
||||
|
||||
def in_collective():
|
||||
return bool(list(cfm.list_collective()))
|
||||
|
||||
def handle_connection(connection, cert, request, local=False):
|
||||
global currentleader
|
||||
global retrythread
|
||||
@ -815,6 +818,9 @@ def start_collective():
|
||||
global follower
|
||||
global retrythread
|
||||
global initting
|
||||
if initting:
|
||||
# do not nest startup if startup backs up loops of starting collective
|
||||
return
|
||||
initting = True
|
||||
retrythread = None
|
||||
try:
|
||||
|
@ -49,10 +49,11 @@ import eventlet.green.select as select
|
||||
|
||||
import eventlet.green.socket as socket
|
||||
|
||||
|
||||
import confluent.collective.manager as collective
|
||||
import confluent.exceptions as exc
|
||||
import confluent.log as log
|
||||
import confluent.messages as msg
|
||||
import confluent.noderange as noderange
|
||||
import confluent.util as util
|
||||
from eventlet.greenpool import GreenPool
|
||||
import eventlet.green.subprocess as subprocess
|
||||
@ -502,10 +503,21 @@ def _full_updatemacmap(configmanager):
|
||||
'Network topology not available to tenants')
|
||||
# here's a list of switches... need to add nodes that are switches
|
||||
nodelocations = configmanager.get_node_attributes(
|
||||
configmanager.list_nodes(), ('type', 'net*.switch', 'net*.switchport'))
|
||||
configmanager.list_nodes(), ('type', 'collective.managercandidates', 'net*.switch', 'net*.switchport'))
|
||||
switches = set([])
|
||||
incollective = collective.in_collective()
|
||||
if incollective:
|
||||
mycollectivename = collective.get_myname()
|
||||
for node in nodelocations:
|
||||
cfg = nodelocations[node]
|
||||
if incollective:
|
||||
candmgrs = cfg.get('collective.managercandidates', {}).get('value', None)
|
||||
if candmgrs:
|
||||
candmgrs = noderange.NodeRange(candmgrs, configmanager).nodes
|
||||
if mycollectivename not in candmgrs:
|
||||
# do not think about trying to find nodes that we aren't possibly
|
||||
# supposed to be a manager for in a collective
|
||||
continue
|
||||
if cfg.get('type', {}).get('value', None) == 'switch':
|
||||
switches.add(node)
|
||||
for attr in cfg:
|
||||
|
Loading…
Reference in New Issue
Block a user