From 965276083296e54fafb4c87d18450885a970a812 Mon Sep 17 00:00:00 2001 From: Ranjeet R Date: Mon, 24 Oct 2016 18:38:35 -0700 Subject: [PATCH] Fixes: schema crash with RT delete When a RT is deleted, we call a RT delete on the object again. Providing a new helper function so that the RT can be deleted without calling the delete method. Closes-Bug 1635048 Change-Id: Ie438341f51c350989bcafcc58fb07650480e191c --- src/config/schema-transformer/config_db.py | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/config/schema-transformer/config_db.py b/src/config/schema-transformer/config_db.py index d5d4bd7303d..68d73fc76b0 100644 --- a/src/config/schema-transformer/config_db.py +++ b/src/config/schema-transformer/config_db.py @@ -198,7 +198,7 @@ def update_autonomous_system(cls, new_asn): logical_router.add_route_target(new_rtgt_obj.obj) cls._vnc_lib.logical_router_update(logical_router) - RouteTargetST.delete(old_rtgt_obj.get_fq_name()[0]) + RouteTargetST.delete_vnc_obj(old_rtgt_obj.get_fq_name()[0]) cls._autonomous_system = int(new_asn) # end update_autonomous_system @@ -765,7 +765,7 @@ def set_route_target_list(self, obj): for rt in rt_del - (rt_add | rt_add_export | rt_add_import): try: - RouteTargetST.delete(rt) + RouteTargetST.delete_vnc_obj(rt) except RefsExistError: # if other routing instances are referring to this target, # it will be deleted when those instances are deleted @@ -1318,10 +1318,11 @@ def __init__(self, rt_key, obj=None): def update(self, obj=None): pass - - def delete_obj(self): - self._vnc_lib.route_target_delete(fq_name=[self.name]) - # end delete_obj + @classmethod + def delete_vnc_obj(cls, key): + cls._vnc_lib.route_target_delete(fq_name=[key]) + del cls._dict[key] + # end delete_vnc_obj # end RoutTargetST # a struct to store attributes related to Network Policy needed by schema @@ -2052,7 +2053,7 @@ def locate_route_target(self): if 0 < old_rtgt < common.BGP_RTGT_MIN_ID: rt_key = "target:%s:%d" % ( GlobalSystemConfigST.get_autonomous_system(), old_rtgt) - RouteTargetST.delete(rt_key) + RouteTargetST.delete_vnc_obj(rt_key) # end locate_route_target def get_fq_name(self): @@ -2302,7 +2303,7 @@ def delete_obj(self): for rtgt in rtgt_list or []: try: - RouteTargetST.delete(rtgt['to'][0]) + RouteTargetST.delete_vnc_obj(rtgt['to'][0]) except RefsExistError: # if other routing instances are referring to this target, # it will be deleted when those instances are deleted @@ -3710,7 +3711,7 @@ def __init__(self, name, obj=None): self._vnc_lib.logical_router_update(self.obj) if old_rt_key: - RouteTargetST.delete(old_rt_key) + RouteTargetST.delete_vnc_obj(old_rt_key) self.route_target = rt_key self.update(self.obj) @@ -3731,7 +3732,7 @@ def delete_obj(self): self.update_virtual_networks() rtgt_num = int(self.route_target.split(':')[-1]) self._cassandra.free_route_target_by_number(rtgt_num) - RouteTargetST.delete(self.route_target) + RouteTargetST.delete_vnc_obj(self.route_target) # end delete_obj def update_virtual_networks(self): @@ -3782,7 +3783,7 @@ def update_autonomous_system(self, asn): ri_obj = vn_obj.get_primary_routing_instance() ri_obj.update_route_target_list(rt_del=[old_rt], rt_add=[rt_key]) - RouteTargetST.delete(old_rt) + RouteTargetST.delete_vnc_obj(old_rt) self.route_target = rt_key # end update_autonomous_system