Concurrency issue in RibUpdateMonitor::MergeUpdate
Affects | Status | Importance | Assigned to | Milestone | ||
---|---|---|---|---|---|---|
Juniper Openstack | Status tracked in Trunk | |||||
R1.1 |
Fix Committed
|
High
|
Nischal Sheth | |||
R2.0 |
Fix Committed
|
High
|
Nischal Sheth | |||
R2.1 |
Fix Committed
|
High
|
Nischal Sheth | |||
R2.20 |
Fix Committed
|
High
|
Nischal Sheth | |||
Trunk |
Fix Committed
|
High
|
Nischal Sheth |
Bug Description
Noticed that peer Join to a table occasionally does not download all
routes in the table to the peer. Updates for some routes get stuck in
the bulk update queue.
Root cause is a concurrency issue in RibUpdateMonito
If there's no DBState for the route, EnqueueUpdateUn
without locking monitor mutex. If another Task (bgp::SendTask) is in
GetNextUpdate, it's possible that EnqueueUpdateUn
even though the last UpdateEntry on the queue is being dequeued by the
bgp::SendTask Task. This is so because UpdateQueue:
UpdateQueue:
As a consequence, BgpExport::Join will not kick the SchedulingGroup
to start a tail dequeue for the bulk queue.
Review in progress for https:/ /review. opencontrail. org/9872
Submitter: Nischal Sheth (<email address hidden>)