From bb6c2d48f5490b289153239613a7fe4e04213d9d Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Sat, 13 Aug 2011 00:21:35 -0700 Subject: [PATCH] bug 11122: Fix router startup The new created router got hostId = 0. status 11122: resolved fixed Conflicts: server/src/com/cloud/network/element/VirtualRouterElement.java --- .../cloud/network/element/VirtualRouterElement.java | 3 +++ .../router/VirtualNetworkApplianceManagerImpl.java | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 8d4e443ba9c..652cc75ff53 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -121,6 +121,9 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); List routers = _routerMgr.deployVirtualRouter(network, dest, _accountMgr.getAccount(network.getAccountId()), uservm.getParameters(), offering.getRedundantRouter()); + if ((routers == null) || (routers.size() == 0)) { + throw new ResourceUnavailableException("Can't find at least one running router!", this.getClass(), 0); + } List rets = _routerMgr.addVirtualMachineIntoNetwork(network, nic, uservm, dest, context, routers); return (rets != null) && (!rets.isEmpty()); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 471c882a96b..93170cb9562 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1048,8 +1048,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } for (DomainRouterVO router : routers) { - HostVO host = _hostDao.findById(router.getHostId()); - if (host != null && host.getStatus() == Status.Up) { + boolean skip = false; + if (router.getHostId() != null) { + HostVO host = _hostDao.findById(router.getHostId()); + if (host == null || host.getStatus() != Status.Up) { + skip = true; + } + } + if (!skip) { State state = router.getState(); if (state != State.Running) { router = startVirtualRouter(router, _accountService.getSystemUser(), _accountService.getSystemAccount(), params);