From 1a1cc3d44b1bcebb06b403838b670238ec584ca3 Mon Sep 17 00:00:00 2001 From: sridhargaddam Date: Fri, 19 Jun 2015 16:17:01 +0000 Subject: [PATCH] Fix race condition by using lock on enable_radvd For an HA Router, radvd is spawned only in the Master Node. KeepalivedStateChangeHandler after receiving the state notification on the unix domain socket, would either enable/disable the radvd process depending on the state of the HA Router. In parallel, if there is a request to add an interface to the router, router.process() would try to enable radvd in parallel. So there is a possible race condition as two threads try to enable radvd in parallel. This patch uses appropriate locking mechanism to prevent this race condition. Closes-Bug: #1466663 Change-Id: I40df78cc57fcde5512336d9dfef88b3b06a69bcb (cherry picked from commit 27503dad33bb045ac840f13a3e5fc0a5b603abb1) --- neutron/agent/l3/ha_router.py | 1 + 1 file changed, 1 insertion(+) diff --git a/neutron/agent/l3/ha_router.py b/neutron/agent/l3/ha_router.py index a44f92ea156..fd15e19b37e 100644 --- a/neutron/agent/l3/ha_router.py +++ b/neutron/agent/l3/ha_router.py @@ -364,6 +364,7 @@ class HaRouter(router.RouterInfo): if self.ha_port: self.enable_keepalived() + @common_utils.synchronized('enable_radvd') def enable_radvd(self, internal_ports=None): if (self.keepalived_manager.get_process().active and self.ha_state == 'master'):