CLOUDSTACK-1827: Fix redundant router update mechanism

There is a bug that if the smaller number ID RvR stop running, that pair of
RvR's status won't be updated. This patch fixed it.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e3f67d12
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e3f67d12
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e3f67d12

Branch: refs/heads/affinity_groups
Commit: e3f67d126d66c31e027c96b5524667884084053b
Parents: 86a153c
Author: Sheng Yang <sheng.y...@citrix.com>
Authored: Thu Mar 28 15:02:45 2013 -0700
Committer: Sheng Yang <sheng.y...@citrix.com>
Committed: Thu Mar 28 15:54:07 2013 -0700

----------------------------------------------------------------------
 .../router/VirtualNetworkApplianceManagerImpl.java |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e3f67d12/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 45b11f7..78168b0 100755
--- 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1277,13 +1277,22 @@ public class VirtualNetworkApplianceManagerImpl extends 
ManagerBase implements V
                      * We update the router pair which the lower id router 
owned by this mgmt server, in order
                      * to prevent duplicate update of router status from 
cluster mgmt servers
                      */
-                    DomainRouterVO router = routers.get(0);
-                    if (routers.get(1).getId() < router.getId()) {
-                        router = routers.get(1);
+                    DomainRouterVO router0 = routers.get(0);
+                    DomainRouterVO router1 = routers.get(1);
+                    DomainRouterVO router = router0;
+                    if ((router0.getId() < router1.getId()) && 
router0.getHostId() != null) {
+                       router = router0;
+                    } else {
+                       router = router1;
+                    }
+                    if (router.getHostId() == null) {
+                       s_logger.debug("Skip router pair (" + 
router0.getInstanceName() + "," + router1.getInstanceName() + ") due to can't 
find host");
+                       continue;
                     }
                     HostVO host = _hostDao.findById(router.getHostId());
                     if (host == null || host.getManagementServerId() == null ||
                             host.getManagementServerId() != 
ManagementServerNode.getManagementServerId()) {
+                       s_logger.debug("Skip router pair (" + 
router0.getInstanceName() + "," + router1.getInstanceName() + ") due to not 
belong to this mgmt server");
                         continue;
                     }
                 updateRoutersRedundantState(routers);

Reply via email to