[Neo-report] r2677 jm - /trunk/neo/master/handlers/identification.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Mar 21 14:57:05 CET 2011
Author: jm
Date: Mon Mar 21 14:57:05 2011
New Revision: 2677
Log:
master: review conditions to check uuid/address conflicts when identifying nodes
Modified:
trunk/neo/master/handlers/identification.py
Modified: trunk/neo/master/handlers/identification.py
==============================================================================
--- trunk/neo/master/handlers/identification.py [iso-8859-1] (original)
+++ trunk/neo/master/handlers/identification.py [iso-8859-1] Mon Mar 21 14:57:05 2011
@@ -31,21 +31,20 @@ class IdentificationHandler(MasterHandle
self.checkClusterName(name)
app = self.app
- node_by_uuid = app.nm.getByUUID(uuid)
# handle conflicts and broken nodes
- node = node_by_uuid or app.nm.getByAddress(address)
+ node = app.nm.getByUUID(uuid)
if node:
- if node_by_uuid and node.getAddress() == address:
- # the node is still alive
- if node.isBroken():
- raise BrokenNodeDisallowedError
- elif node.isRunning():
- # still running, reject this new node
- raise ProtocolError('invalid server address')
- if node.isConnected():
- # more than one connection from this node
+ if node.isBroken():
+ raise BrokenNodeDisallowedError
+ else:
+ node = app.nm.getByAddress(address)
+ if node:
+ if node.isRunning():
+ # cloned/evil/buggy node connecting to us
raise ProtocolError('already connected')
+ else:
+ assert not node.isConnected()
node.setAddress(address)
node.setRunning()
More information about the Neo-report
mailing list