[Neo-report] r1826 gregory - in /trunk/neo: ./ admin/ client/ master/ master/handlers/ sto...
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Feb 22 19:08:59 CET 2010
Author: gregory
Date: Mon Feb 22 19:08:59 2010
New Revision: 1826
Log:
Revert r1812 & r1814 (node manager as a singleton).
Singeltons can not be used in NEO because client side process may deals with
multiple NEO cluster. Add a callback on connection when linked with a node to
update node's connection property at connection closure.
Modified:
trunk/neo/admin/app.py
trunk/neo/client/app.py
trunk/neo/connection.py
trunk/neo/master/app.py
trunk/neo/master/handlers/storage.py
trunk/neo/master/recovery.py
trunk/neo/master/verification.py
trunk/neo/node.py
trunk/neo/storage/app.py
trunk/neo/tests/testNodes.py
Modified: trunk/neo/admin/app.py
==============================================================================
--- trunk/neo/admin/app.py [iso-8859-1] (original)
+++ trunk/neo/admin/app.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -52,13 +52,12 @@
def __init__(self, config):
- NodeManager.init()
# always use default connector for now
self.connector_handler = getConnectorHandler()
# Internal attributes.
self.em = EventManager()
- self.nm = NodeManager
+ self.nm = NodeManager()
self.name = config.getCluster()
self.server = config.getBind()
Modified: trunk/neo/client/app.py
==============================================================================
--- trunk/neo/client/app.py [iso-8859-1] (original)
+++ trunk/neo/client/app.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -100,8 +100,6 @@
"""The client node application."""
def __init__(self, master_nodes, name, connector=None, **kw):
-
- NodeManager.init()
# Start polling thread
self.em = EventManager()
self.poll_thread = ThreadedPoll(self.em)
@@ -110,7 +108,7 @@
self.name = name
self.connector_handler = getConnectorHandler(connector)
self.dispatcher = Dispatcher()
- self.nm = NodeManager
+ self.nm = NodeManager()
self.cp = ConnectionPool(self)
self.pt = None
self.master_conn = None
Modified: trunk/neo/connection.py
==============================================================================
--- trunk/neo/connection.py [iso-8859-1] (original)
+++ trunk/neo/connection.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -202,6 +202,7 @@
self._queue = []
self._expected = deque()
self._next_handler = None
+ self._on_close = None
BaseConnection.__init__(self, event_manager, handler,
connector = connector, addr = addr,
connector_handler = connector_handler)
@@ -219,6 +220,10 @@
else:
self.handler = handler
+ def setOnClose(self, callback):
+ assert self._on_close is None
+ self._on_close = callback
+
def isAborted(self):
return self.aborted
@@ -245,10 +250,9 @@
BaseConnection.close(self)
for event in self.event_dict.itervalues():
self.em.removeIdleEvent(event)
- from neo.node import NodeManager
- node = NodeManager.getByUUID(self.getUUID())
- if node is not None:
- node.setConnection(None)
+ if self._on_close is not None:
+ self._on_close()
+ self._on_close = None
self.event_dict.clear()
self.write_buf = ""
self.read_buf = ""
Modified: trunk/neo/master/app.py
==============================================================================
--- trunk/neo/master/app.py [iso-8859-1] (original)
+++ trunk/neo/master/app.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -42,13 +42,12 @@
def __init__(self, config):
- NodeManager.init()
# always use default connector for now
self.connector_handler = getConnectorHandler()
# Internal attributes.
self.em = EventManager()
- self.nm = NodeManager
+ self.nm = NodeManager()
self.tm = TransactionManager()
self.name = config.getCluster()
Modified: trunk/neo/master/handlers/storage.py
==============================================================================
--- trunk/neo/master/handlers/storage.py [iso-8859-1] (original)
+++ trunk/neo/master/handlers/storage.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -36,7 +36,6 @@
def nodeLost(self, conn, node):
logging.info('storage node lost')
assert not node.isRunning(), node.getState()
- node.setConnection(None)
if not self.app.pt.operational():
raise OperationFailure, 'cannot continue operation'
Modified: trunk/neo/master/recovery.py
==============================================================================
--- trunk/neo/master/recovery.py [iso-8859-1] (original)
+++ trunk/neo/master/recovery.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -106,7 +106,6 @@
assert node is not None
if node.getState() == new_state:
return
- node.setConnection(None)
node.setState(new_state)
def connectionCompleted(self, conn):
Modified: trunk/neo/master/verification.py
==============================================================================
--- trunk/neo/master/verification.py [iso-8859-1] (original)
+++ trunk/neo/master/verification.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -249,7 +249,6 @@
pass
def nodeLost(self, conn, node):
- node.setConnection(None)
if not self.app.pt.operational():
raise VerificationFailure, 'cannot continue verification'
Modified: trunk/neo/node.py
==============================================================================
--- trunk/neo/node.py [iso-8859-1] (original)
+++ trunk/neo/node.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -77,9 +77,15 @@
def getUUID(self):
return self._uuid
+ def onConnectionClosed(self):
+ assert self._connection is not None
+ self._connection = None
+
def setConnection(self, connection):
- assert self._connection is None or connection is None
+ assert connection is not None
+ assert self._connection is None
self._connection = connection
+ connection.setOnClose(self.onConnectionClosed)
def getConnection(self):
assert self._connection is not None
@@ -429,5 +435,3 @@
logging.debug(' * %32s | %8s | %22s | %s' % (
uuid, node.getType(), address, node.getState()))
-# pseudo singleton
-NodeManager = NodeManager()
Modified: trunk/neo/storage/app.py
==============================================================================
--- trunk/neo/storage/app.py [iso-8859-1] (original)
+++ trunk/neo/storage/app.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -38,8 +38,6 @@
"""The storage node application."""
def __init__(self, config):
-
- NodeManager.init()
# always use default connector for now
self.connector_handler = getConnectorHandler()
@@ -48,7 +46,7 @@
# Internal attributes.
self.em = EventManager()
- self.nm = NodeManager
+ self.nm = NodeManager()
self.tm = TransactionManager(self)
self.dm = buildDatabaseManager(config.getAdapter(), config.getDatabase())
Modified: trunk/neo/tests/testNodes.py
==============================================================================
--- trunk/neo/tests/testNodes.py [iso-8859-1] (original)
+++ trunk/neo/tests/testNodes.py [iso-8859-1] Mon Feb 22 19:08:59 2010
@@ -125,7 +125,7 @@
class NodeManagerTests(NeoTestBase):
def setUp(self):
- self.manager = nm = NodeManager.__class__()
+ self.manager = nm = NodeManager()
self.storage = StorageNode(nm, ('127.0.0.1', 1000), self.getNewUUID())
self.master = MasterNode(nm, ('127.0.0.1', 2000), self.getNewUUID())
self.client = ClientNode(nm, None, self.getNewUUID())
More information about the Neo-report
mailing list