[Neo-report] r2049 vincent - in /trunk/neo: node.py tests/testNodes.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Apr 30 15:43:20 CEST 2010


Author: vincent
Date: Fri Apr 30 15:43:19 2010
New Revision: 2049

Log:
Rewrite NodeManager.update main code.

- Don't trash a node to recreate it right after (it was the case when a
  node was known by address only).
- Check node type consistency between:
  - parameters and node found
  - node known by type and node known by UUID
- Log actions before doing them, consistently
- Log found node in addition to loop variables
- Don't call remove when an unknown node is notified as down, and add a
  log for this case

Modified:
    trunk/neo/node.py
    trunk/neo/tests/testNodes.py

Modified: trunk/neo/node.py
==============================================================================
--- trunk/neo/node.py [iso-8859-1] (original)
+++ trunk/neo/node.py [iso-8859-1] Fri Apr 30 15:43:19 2010
@@ -439,24 +439,29 @@
             node = node_by_uuid or node_by_addr
 
             log_args = (node_type, dump(uuid), addr, state)
-            if state == NodeStates.DOWN:
-                # drop down nodes
-                logging.debug('drop node %s %s %s %s' % log_args)
-                self.remove(node)
-            elif node_by_uuid is not None:
-                if node.getAddress() != addr:
-                    # address changed, update it
+            if node is None:
+                if state == NodeStates.DOWN:
+                    logging.debug('NOT creating node %s %s %s %s', *log_args)
+                else:
+                    logging.debug('creating node %s %s %s %s', *log_args)
+                    self._createNode(klass, address=addr, uuid=uuid, state=state)
+            else:
+                assert isinstance(node, klass), 'node %r is not ' \
+                    'of expected type: %r' % (node, klass)
+                assert None in (node_by_uuid, node_by_addr) or \
+                    node_by_uuid is node_by_addr, \
+                    'Discrepancy between node_by_uuid (%r) and ' \
+                    'node_by_addr (%r)' % (node_by_uuid, node_by_addr)
+                if state == NodeStates.DOWN:
+                    logging.debug('droping node %r, found with %s %s %s %s',
+                        node, *log_args)
+                    self.remove(node)
+                else:
+                    logging.debug('updating node %r to %s %s %s %s',
+                        node, *log_args)
+                    node.setUUID(uuid)
                     node.setAddress(addr)
-                logging.debug('update node %s %s %s %s' % log_args)
-                node.setState(state)
-            else:
-                if node_by_addr is not None:
-                    # exists only by address,
-                    self.remove(node)
-                # don't exists, add it
-                node = klass(self, address=addr, uuid=uuid)
-                node.setState(state)
-                logging.debug('create node %s %s %s %s' % log_args)
+                    node.setState(state)
         self.log()
 
     def log(self):

Modified: trunk/neo/tests/testNodes.py
==============================================================================
--- trunk/neo/tests/testNodes.py [iso-8859-1] (original)
+++ trunk/neo/tests/testNodes.py [iso-8859-1] Fri Apr 30 15:43:19 2010
@@ -257,6 +257,7 @@
         # build changes
         old_address = self.master.getAddress()
         new_address = ('127.0.0.1', 2001)
+        old_uuid = self.storage.getUUID()
         new_uuid = self.getNewUUID()
         node_list = (
             (NodeTypes.CLIENT, None, self.client.getUUID(), NodeStates.DOWN),
@@ -276,11 +277,11 @@
         self.master.setAddress(new_address)
         self.checkByServer(self.master)
         # a new storage replaced the old one
-        self.assertNotEqual(manager.getStorageList(), [self.storage])
-        self.assertTrue(len(manager.getStorageList()), 1)
-        new_storage = manager.getStorageList()[0]
+        storage_list = manager.getStorageList()
+        self.assertTrue(len(storage_list), 1)
+        new_storage = storage_list[0]
+        self.assertNotEqual(new_storage.getUUID(), old_uuid)
         self.assertEqual(new_storage.getState(), NodeStates.RUNNING)
-        self.assertNotEqual(new_storage, self.storage)
         # admin is still here but in UNKNOWN state
         self.checkNodes([self.master, self.admin, new_storage])
         self.assertEqual(self.admin.getState(), NodeStates.UNKNOWN)





More information about the Neo-report mailing list