Commit 3b89b198 authored by Grégory Wisniewski's avatar Grégory Wisniewski

Storage ask itself the last IDs when entering in service state.

This fix a race condition when switching from recovery to verification
steps where NotifyLastOID packet could be handled by verification handler
instead of initialisation (storage side).

git-svn-id: https://svn.erp5.org/repos/neo/trunk@1983 71dcc9de-d417-0410-9af5-da40c76e7ee4
parent 48c9104a
...@@ -146,7 +146,6 @@ class AdministrationHandler(MasterHandler): ...@@ -146,7 +146,6 @@ class AdministrationHandler(MasterHandler):
app.broadcastNodesInformation(node_list) app.broadcastNodesInformation(node_list)
# start nodes # start nodes
for node in self.app.nm.getIdentifiedList(pool_set=uuid_set): for node in self.app.nm.getIdentifiedList(pool_set=uuid_set):
node.notify(Packets.NotifyLastOID(app.loid))
node.notify(Packets.StartOperation()) node.notify(Packets.StartOperation())
# broadcast the new partition table # broadcast the new partition table
app.broadcastPartitionChanges(cell_list) app.broadcastPartitionChanges(cell_list)
......
...@@ -30,7 +30,6 @@ class StorageServiceHandler(BaseServiceHandler): ...@@ -30,7 +30,6 @@ class StorageServiceHandler(BaseServiceHandler):
def connectionCompleted(self, conn): def connectionCompleted(self, conn):
node = self.app.nm.getByUUID(conn.getUUID()) node = self.app.nm.getByUUID(conn.getUUID())
if node.isRunning(): if node.isRunning():
conn.notify(Packets.NotifyLastOID(self.app.loid))
conn.notify(Packets.StartOperation()) conn.notify(Packets.StartOperation())
def nodeLost(self, conn, node): def nodeLost(self, conn, node):
......
...@@ -222,10 +222,13 @@ class Application(object): ...@@ -222,10 +222,13 @@ class Application(object):
# ask node list and partition table # ask node list and partition table
self.has_node_information = False self.has_node_information = False
self.has_partition_table = False self.has_partition_table = False
self.has_last_ids = False
self.pt.clear() self.pt.clear()
self.master_conn.ask(Packets.AskLastIDs())
self.master_conn.ask(Packets.AskNodeInformation()) self.master_conn.ask(Packets.AskNodeInformation())
self.master_conn.ask(Packets.AskPartitionTable(())) self.master_conn.ask(Packets.AskPartitionTable(()))
while not self.has_node_information or not self.has_partition_table: while not self.has_node_information or not self.has_partition_table \
or not self.has_last_ids:
self.em.poll(1) self.em.poll(1)
self.ready = True self.ready = True
......
...@@ -58,6 +58,11 @@ class InitializationHandler(BaseMasterHandler): ...@@ -58,6 +58,11 @@ class InitializationHandler(BaseMasterHandler):
app.dm.setPartitionTable(ptid, cell_list) app.dm.setPartitionTable(ptid, cell_list)
self.app.has_partition_table = True self.app.has_partition_table = True
def answerLastIDs(self, conn, loid, ltid, lptid):
self.app.tm.setLastOID(loid)
self.app.dm.setLastOID(loid)
self.app.has_last_ids = True
def notifyPartitionChanges(self, conn, ptid, cell_list): def notifyPartitionChanges(self, conn, ptid, cell_list):
# XXX: This is safe to ignore those notifications because all of the # XXX: This is safe to ignore those notifications because all of the
# following applies: # following applies:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment