Arista L3 Agent is not thread safe
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
networking-arista |
New
|
Undecided
|
Unassigned |
Bug Description
The Arista L3 agent is not thread safe, due to its use of instance variables on the AristaL3Driver singleton object that are modified on a per-request basis.
The modification is performed in the _select_dicts method, based on the IP version of the router being configured. There is no synchronisation either in this class or externally, so far as I can see. Therefore if two requests are made to the router API concurrently, then there will be a race condition which could result in strange errors.
This bug could be fixed either by removing the request-specific variables from the AristaL3Driver instance, or adding synchronisation around all calls to the object. There is already a lock used in the AristaServicePlugin class for synchronisation, but I can't see what it is achieving. The synchronization solution would also resolve bug 1473998, at the expense of performance.