Implementing redundant router arguments to add redundant_state Implementing the arguments on the python side
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/13bd3409 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/13bd3409 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/13bd3409 Branch: refs/heads/feature/systemvm-persistent-config Commit: 13bd34095ca6eceff66c9059c96079a32e671c9a Parents: 6149019 Author: wilderrodrigues <wrodrig...@schubergphilis.com> Authored: Mon Jan 26 17:33:50 2015 +0100 Committer: wilderrodrigues <wrodrig...@schubergphilis.com> Committed: Mon Feb 16 16:08:37 2015 +0100 ---------------------------------------------------------------------- .../VirtualNetworkApplianceManagerImpl.java | 40 +++++++++++++------- .../VpcVirtualNetworkApplianceManagerImpl.java | 16 ++------ .../debian/config/opt/cloud/bin/cs/CsDatabag.py | 5 +++ .../config/opt/cloud/bin/cs/CsRedundant.py | 3 +- 4 files changed, 38 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/13bd3409/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 a3f56c6..f0730f5 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1060,8 +1060,8 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> { /* * In order to make fail-over works well at any time, we have to ensure: - * 1. Backup router's priority = Master's priority - DELTA + 1 2. Backup - * router's priority hasn't been bumped up. + * 1. Backup router's priority = Master's priority - DELTA + 1 + * 2. Backup router's priority hasn't been bumped up. */ private void checkSanity(final List<DomainRouterVO> routers) { final Set<Long> checkedNetwork = new HashSet<Long>(); @@ -1137,15 +1137,8 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> { protected void runInContext() { while (true) { try { - final Long networkId = _vrUpdateQueue.take(); // This is a - // blocking - // call so - // this thread - // won't run - // all the - // time if no - // work item - // in queue. + final Long networkId = _vrUpdateQueue.take(); + // This is a blocking call so this thread won't run all the time if no work item in queue. final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(networkId, Role.VIRTUAL_ROUTER); if (routers.size() != 2) { @@ -1159,7 +1152,7 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> { final DomainRouterVO router0 = routers.get(0); final DomainRouterVO router1 = routers.get(1); DomainRouterVO router = router0; - if (router0.getId() < router1.getId() && router0.getHostId() != null) { + if (router0.getId() < router1.getId()) { router = router0; } else { router = router1; @@ -1596,7 +1589,28 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> { final boolean isRedundant = router.getIsRedundantRouter(); if (isRedundant) { buf.append(" redundant_router=1"); - final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(nic.getNetworkId(), Role.VIRTUAL_ROUTER); + + final Long vpcId = router.getVpcId(); + final List<DomainRouterVO> routers; + if (vpcId != null) { + routers = _routerDao.listByVpcId(vpcId); + } else { + routers = _routerDao.listByNetworkAndRole(nic.getNetworkId(), Role.VIRTUAL_ROUTER); + } + + String redundantState = RedundantState.BACKUP.toString(); + if (routers.size() == 0) { + redundantState = RedundantState.MASTER.toString(); + } else { + final DomainRouterVO router0 = routers.get(0); + + if (router.getId() == router0.getId()) { + redundantState = RedundantState.MASTER.toString(); + } + } + + buf.append(" redundant_state=").append(redundantState); + try { final int priority = getUpdatedPriority(network, routers, router); router.setPriority(priority); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/13bd3409/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index f06b1ba..77cc0de 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -236,7 +236,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile, final DeployDestination dest, final ReservationContext context) { final DomainRouterVO domainRouterVO = _routerDao.findById(profile.getId()); - if (domainRouterVO.getVpcId() != null) { + final Long vpcId = domainRouterVO.getVpcId(); + + if (vpcId != null) { if (domainRouterVO.getState() == State.Starting || domainRouterVO.getState() == State.Running) { String defaultDns1 = null; String defaultDns2 = null; @@ -257,7 +259,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian // add vpc cidr/dns/networkdomain to the boot load args final StringBuilder buf = profile.getBootArgsBuilder(); - final Vpc vpc = _entityMgr.findById(Vpc.class, domainRouterVO.getVpcId()); + final Vpc vpc = _entityMgr.findById(Vpc.class, vpcId); buf.append(" vpccidr=" + vpc.getCidr() + " domain=" + vpc.getNetworkDomain()); buf.append(" dns1=").append(defaultDns1); @@ -689,16 +691,6 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } @Override - public boolean start() { - return true; - } - - @Override - public boolean stop() { - return true; - } - - @Override public boolean startRemoteAccessVpn(final RemoteAccessVpn vpn, final VirtualRouter router) throws ResourceUnavailableException { if (router.getState() != State.Running) { s_logger.warn("Unable to apply remote access VPN configuration, virtual router is not in the right state " + router.getState()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/13bd3409/systemvm/patches/debian/config/opt/cloud/bin/cs/CsDatabag.py ---------------------------------------------------------------------- diff --git a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsDatabag.py b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsDatabag.py index fbafad2..d1d899b 100644 --- a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsDatabag.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsDatabag.py @@ -125,3 +125,8 @@ class CsCmdLine(CsDataBag): if "redundant_master" in self.idata(): return self.idata()['redundant_master'] == "true" return False + + def get_state(self): + if "redundant_state" in self.idata(): + return self.idata()['redundant_state'] + return "MASTER" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/13bd3409/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py ---------------------------------------------------------------------- diff --git a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py index d9d36e2..267cc1c 100644 --- a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py @@ -101,6 +101,7 @@ class CsRedundant(object): file.search(" router_id ", " router_id %s" % self.cl.get_name()) file.search(" priority ", " priority %s" % self.cl.get_priority()) file.search(" weight ", " weight %s" % 2) + file.search(" state ", " state %s" % self.cl.get_state()) file.greplace("[RROUTER_BIN_PATH]", self.CS_ROUTER_DIR) file.section("virtual_ipaddress {", "}", self._collect_ips()) file.commit() @@ -121,7 +122,7 @@ class CsRedundant(object): if connt.is_changed(): CsHelper.service("conntrackd", "restart") - if file.is_changed(): + if file.is_changed() and self.cl.get_state() == 'MASTER': CsHelper.service("keepalived", "restart") # FIXME