[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