From 28fd040228e398ae1a3593263fbf46239c8d35a6 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 9 Apr 2009 12:47:07 +0000 Subject: [PATCH] fix for smooth federation between 4.2 and 4.3 --- PLC/Methods/RefreshPeer.py | 17 ++++++++++++++++- PLC/Nodes.py | 10 +++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/PLC/Methods/RefreshPeer.py b/PLC/Methods/RefreshPeer.py index 4568d99..49ef25f 100644 --- a/PLC/Methods/RefreshPeer.py +++ b/PLC/Methods/RefreshPeer.py @@ -74,6 +74,18 @@ class RefreshPeer(Method): message('RefreshPeer starting up (commit_mode=%r)'%commit_mode) message('Issuing GetPeerData') peer_tables = peer.GetPeerData() + # for smooth federation with 4.2 - ignore fields that are useless anyway, and rewrite boot_state + boot_state_rewrite={'dbg':'safeboot','diag':'safeboot','disable':'disabled', + 'inst':'reinstall','rins':'reinstall','new':'reinstall','rcnf':'reinstall'} + for node in peer_tables['Nodes']: + for key in ['nodenetwork_ids','dummybox_id']: + if key in node: + del node[key] + if node['boot_state'] in boot_state_rewrite: node['boot_state']=boot_state_rewrite[node['boot_state']] + for slice in peer_tables['Slices']: + for key in ['slice_attribute_ids']: + if key in slice: + del slice[key] timers['transport'] = time.time() - start - peer_tables['db_time'] timers['peer_db'] = peer_tables['db_time'] message_verbose('GetPeerData returned -> db=%d transport=%d'%(timers['peer_db'],timers['transport'])) @@ -330,7 +342,10 @@ class RefreshPeer(Method): if peer_tables['Nodes']: columns = peer_tables['Nodes'][0].keys() else: - columns = None + # smooth federation with a 4.2 peer - ignore these fields that are useless anyway + columns = Node.fields + if 'interface_ids' in columns: columns.remove('interface_ids') + if 'dummybox_id' in columns: columns.remove('dummybox_id') # Keyed on foreign node_id old_peer_nodes = Nodes(self.api, {'peer_id': peer_id}, columns).dict('peer_node_id') diff --git a/PLC/Nodes.py b/PLC/Nodes.py index 679254a..8e06fad 100644 --- a/PLC/Nodes.py +++ b/PLC/Nodes.py @@ -247,11 +247,15 @@ class Node(Row): """ assert 'node_id' in self - assert 'interface_ids' in self # we need to clean up InterfaceTags, so handling interfaces as part of join_tables does not work - for interface in Interfaces(self.api,self['interface_ids']): - interface.delete() + # federated nodes don't have interfaces though so for smooth transition from 4.2 to 4.3 + if 'peer_id' in self and self['peer_id']: + pass + else: + assert 'interface_ids' in self + for interface in Interfaces(self.api,self['interface_ids']): + interface.delete() # Clean up miscellaneous join tables for table in self.join_tables: -- 2.43.0