@@ -429,7 +429,7 @@ def recover_broker_slice(self, *, slice_obj: ABCSlice):
429429 return False
430430
431431 self .logger .info (f"Closing old delegations and adding new delegations to the slice: { slice_obj } !" )
432- delegation_names = []
432+ delegation_guids = {}
433433
434434 try :
435435 delegations = self .plugin .get_database ().get_delegations (slice_id = str (slice_obj .get_slice_id ()))
@@ -438,25 +438,27 @@ def recover_broker_slice(self, *, slice_obj: ABCSlice):
438438 raise ActorException (f"Could not fetch delegations records for slice { slice_obj } from database" )
439439
440440 for d in delegations :
441- self .logger .info (f"Closing delegation: { d } !" )
442- d .set_graph (graph = None )
443- d .transition (prefix = "closed as part of recovers" , state = DelegationState .Closed )
444- delegation_names .append (d .get_delegation_name ())
445- self .plugin .get_database ().update_delegation (delegation = d )
441+ # Skip closed delegation
442+ if d .is_closed ():
443+ self .logger .info (f"Skipping closed delegation: { d } !" )
444+ continue
445+ # Grab Delegation Name and Delegation Id
446+ delegation_guids [d .get_delegation_name ()] = d .get_delegation_id ()
446447
447- adms = self .policy .aggregate_resource_model .generate_adms ()
448-
449- # Create new delegations and add to the broker slice;
450- # they will be re-registered with the policy in the recovery
451- for name in delegation_names :
452- new_delegation_graph = adms .get (name )
453- dlg_obj = DelegationFactory .create (did = new_delegation_graph .get_graph_id (),
454- slice_id = slice_obj .get_slice_id (),
455- delegation_name = name )
456- dlg_obj .set_slice_object (slice_object = slice_obj )
457- dlg_obj .set_graph (graph = new_delegation_graph )
458- dlg_obj .transition (prefix = "Reload Model" , state = DelegationState .Delegated )
459- self .plugin .get_database ().add_delegation (delegation = dlg_obj )
448+ # Generate ADMs and use existing delegation Id
449+ adms = self .policy .aggregate_resource_model .generate_adms (delegation_guids = delegation_guids )
450+
451+ # Update the delegations with the new graph
452+ for d in delegations :
453+ # Skip closed delegation
454+ if d .is_closed ():
455+ continue
456+
457+ new_delegation_graph = adms .get (d .get_delegation_name ())
458+ if new_delegation_graph .get_graph_id () == d .get_delegation_id ():
459+ self .logger .info (f"Updating graph for delegation: { d } " )
460+ d .set_graph (graph = new_delegation_graph )
461+ self .plugin .get_database ().update_delegation (delegation = d )
460462
461463 def recover_inventory_slice (self , * , slice_obj : ABCSlice ) -> bool :
462464 """
0 commit comments