commit 04b0b74070db26fdf03eff62ce186b5bfd5fe567
Author: Prakash M Bailkeri <email address hidden>
Date: Wed Aug 12 12:46:59 2015 +0530
Routepath Replicator should unregister from BgpTable only after all replicated routes are deleted
When the routing instance is deleted, route path replicator walks the route
table as part of Leave of rtgroup in import and export Route targets.
During the walk, it deletes all the replicated path/routes.
On walk complete, it unregisters from the DBTable. In the static route scenario,
the static route is added on the internal routing instance that has
"static-route-entries" property attached to it.
Such generated static route is replicated to destination VRF based on
"route-target-list" config in "static-route-entries.
Note: such internal routing instance doesn't have these route targets in its export_rt.
If this internal routing instance is deleted, route path replicator starts the
table walk as part of Leave of RtGroup in import and export. In case static
route module has not processed the config delete of static route entries,
it would not have deleted the static route added to inet route table.
On walk complete, it would unregister from the routing table.
Hence the replicated routes of Static route will never be deleted as
RouteReplicator module is no longer TableListener and doesn't process delete of
StaticRoute which happens when static route module process the delete request.
Proposed fix:
1. Implement LifeTimeActor in TableState to manage the unregister of listener
and delete of tableState object. TableState object takes the delete reference
to the BgpTable and attempt to delete is only made if BgpTable is deleted.
TableState can be deleted if GroupList is empty & Replicated route count is zero
and table doesn't have pending tableWalks
2. Implement GetDBStateCount() api in DBTableBase class to fetch DBState
count for a given listener
Added unit test code to Static route test and route replication test to
simulate the error condition and validate the fix
Change-Id: I9eb2b94aef9e112e29dea73fde5d38808e3b18b0
Closes-bug: #1482277
(cherry picked from commit c7a87367e1eea173c1b73ac599e92a6705197845)
Reviewed: https:/ /review. opencontrail. org/12994 github. org/Juniper/ contrail- controller/ commit/ 04b0b74070db26f df03eff62ce186b 5bfd5fe567
Committed: http://
Submitter: Zuul
Branch: master
commit 04b0b74070db26f df03eff62ce186b 5bfd5fe567
Author: Prakash M Bailkeri <email address hidden>
Date: Wed Aug 12 12:46:59 2015 +0530
Routepath Replicator should unregister from BgpTable only after all replicated routes are deleted
When the routing instance is deleted, route path replicator walks the route route-entries" property attached to it. route-entries.
table as part of Leave of rtgroup in import and export Route targets.
During the walk, it deletes all the replicated path/routes.
On walk complete, it unregisters from the DBTable. In the static route scenario,
the static route is added on the internal routing instance that has
"static-
Such generated static route is replicated to destination VRF based on
"route-target-list" config in "static-
Note: such internal routing instance doesn't have these route targets in its export_rt.
If this internal routing instance is deleted, route path replicator starts the
table walk as part of Leave of RtGroup in import and export. In case static
route module has not processed the config delete of static route entries,
it would not have deleted the static route added to inet route table.
On walk complete, it would unregister from the routing table.
Hence the replicated routes of Static route will never be deleted as
RouteReplicator module is no longer TableListener and doesn't process delete of
StaticRoute which happens when static route module process the delete request.
Proposed fix:
1. Implement LifeTimeActor in TableState to manage the unregister of listener
and delete of tableState object. TableState object takes the delete reference
to the BgpTable and attempt to delete is only made if BgpTable is deleted.
TableState can be deleted if GroupList is empty & Replicated route count is zero
and table doesn't have pending tableWalks
2. Implement GetDBStateCount() api in DBTableBase class to fetch DBState
count for a given listener
Added unit test code to Static route test and route replication test to
simulate the error condition and validate the fix
Change-Id: I9eb2b94aef9e11 2e29dea73fde5d3 8808e3b18b0 3c1b73ac599e92a 6705197845)
Closes-bug: #1482277
(cherry picked from commit c7a87367e1eea17