Failure in bgp_config_test when many instances are run in parallel
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Juniper Openstack |
Fix Released
|
Medium
|
Nischal Sheth |
Bug Description
When a few instances of the bgp_config_test are run in parallel, some of
them fail during TearDown with the following backtrace.
(gdb) bt
#0 0x00000000011ab789 in testing:
at third_party/
#1 0x00000000011a290d in testing:
#2 0x0000000000ca4d29 in BgpConfigTest:
#3 0x00000000011bea9d in testing:
#4 0x00000000011b9df0 in testing:
#5 0x00000000011a7201 in testing::Test::Run (this=0x3014e20) at third_party/
#6 0x00000000011a7914 in testing:
#7 0x00000000011a7ebb in testing:
#8 0x00000000011acb9a in testing:
#9 0x00000000011bfb63 in testing:
(bool (testing:
#10 0x00000000011bab4e in testing:
(bool (testing:
#11 0x00000000011ab94a in testing:
#12 0x0000000000ca2e64 in main (argc=1, argv=0x7fff6a25
The routing instance manager still has instances:
(gdb) f 2
#2 0x0000000000ca4d29 in BgpConfigTest:
60 TASK_UTIL_
(gdb)
Specifically the default instance:
(gdb) p server_.inst_mgr_
$45 = (boost:
(gdb) p (RoutingInstanceMgr *) 0x30165a0
$46 = (RoutingInstanceMgr *) 0x30165a0
(gdb) p $46->instances_
$47 = {
bits_ = {
<BitSet> = {
static npos = 184467440737095
blocks_ = std::vector of length 1, capacity 1 = {1}
}, <No data fields>},
values_ = std::vector of length 1, capacity 2 = {0x302c170},
map_ = std::map with 1 elements = {
["default-
}
}
The default instance still has 3 tables:
(gdb) p (RoutingInstance *) 0x302c170
$48 = (RoutingInstance *) 0x302c170
(gdb) p $48->vrf_table_
$49 = std::map with 3 elements = {
["bgp.ermvpn.0"] = 0x302d790,
["bgp.evpn.0"] = 0x302eaf0,
["bgp.l3vpn.0"] = 0x302c3a0
}
Since these are all VPN tables the issue is likely in the RoutePathReplic
(gdb) p server_
[snip]
inetvpn_
ermvpn_
evpn_replicator_ = (boost:
[snip]
(gdb) p (RoutePathRepli
$51 = (RoutePathRepli
(gdb) p *$51
$52 = (RoutePathRepli
_vptr.
mutex_ = {
static is_rw_mutex = false,
static is_recursive_mutex = false,
static is_fair_mutex = false,
impl = {
__data = {
__lock = 0,
__count = 0,
__owner = 0,
__nusers = 0,
__kind = 0,
__spins = 0,
__list = {
__prev = 0x0,
__next = 0x0
}
},
__size = '\000' <repeats 39 times>,
__align = 0
}
},
table_state_ = std::map with 1 elements = {
[0x302c3a0] = 0x7f7c1c005600
},
bulk_sync_ = std::map with 0 elements,
unreg_table_list_ = std::set with 0 elements,
server_ = 0x3014e48,
family_ = Address::INETVPN,
walk_trigger_ = (boost:
unreg_trigger_ = (boost:
trace_buf_ = (boost:
}
We still have TableState for bgp.l3vpn.0 in the inet replicator:
(gdb) p (BgpTable *) 0x302c3a0
$55 = (InetVpnTable *) 0x302c3a0
(gdb) p $55->name_
$56 = "bgp.l3vpn.0"
(gdb)
description: | updated |
Changed in juniperopenstack: | |
status: | Fix Committed → Fix Released |
information type: | Proprietary → Public |
Fixed by https:/ /github. com/Juniper/ contrail- controller/ commit/ e8feb23a37791e6 b3dd50a85c2553a b0ad3defd4