From 5ae96f876780064a7226e2197176c78124a355fd Mon Sep 17 00:00:00 2001 From: Sachin Bansal Date: Fri, 19 Jun 2015 17:26:55 -0700 Subject: [PATCH] Clean up all routing instances when a service chain is deleted If a service chain is not created completely (perhaps due to vm or vmi not having been received yet by schema transformer), and it is deleted, schema transformer does not clean the routing instances created earlier. With this change, we track if a service chain is created partially and clean it up at the time of deletion. In mainline, we will add checks to not even create routing instances if all data to create the chain is not available to schema transformer. Change-Id: I7078dc69fde8149d3962dafe746dc51b63277b46 Closes-Bug: 1461058 --- src/config/schema-transformer/to_bgp.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/config/schema-transformer/to_bgp.py b/src/config/schema-transformer/to_bgp.py index 048b3fb55ef..cb1155562f6 100644 --- a/src/config/schema-transformer/to_bgp.py +++ b/src/config/schema-transformer/to_bgp.py @@ -1606,6 +1606,7 @@ def __init__(self, name, left_vn, right_vn, direction, sp_list, dp_list, self.protocol = protocol self.created = False + self.partially_created = False self.present_stale = False self.created_stale = False @@ -1686,6 +1687,7 @@ def create(self): # already created return + self.partially_created = True vn1_obj = VirtualNetworkST.locate(self.left_vn) vn2_obj = VirtualNetworkST.locate(self.right_vn) #sc_ip_address = vn1_obj.allocate_service_chain_ip(sc_name) @@ -1790,6 +1792,7 @@ def create(self): vn.add_route(prefix, nexthop) self.created = True + self.partially_created = False self._service_chain_uuid_cf.insert(self.name, {'value': jsonpickle.encode(self)}) @@ -1884,10 +1887,11 @@ def process_in_network_service(self, vm_obj, service, vn1_obj, vn2_obj, # end process_in_network_service def destroy(self): - if not self.created: + if not self.created and not self.partially_created: return self.created = False + self.partially_created = False self._service_chain_uuid_cf.insert(self.name, {'value': jsonpickle.encode(self)}) @@ -1909,6 +1913,8 @@ def destroy(self): # end destroy def delete(self): + if self.created or self.partially_created: + self.destroy() del self._dict[self.name] try: self._service_chain_uuid_cf.remove(self.name)