private void updateToFailedState(Network network){ //fail the network update. even if one router fails we fail the network update. List<DomainRouterVO> routerList = _routerDao.listByNetworkAndRole(network.getId(), VirtualRouter.Role.VIRTUAL_ROUTER); for (DomainRouterVO router : routerList) { router.setUpdateState(VirtualRouter.UpdateState.UPDATE_FAILED); _routerDao.persist(router); } }
routers.get(0).setUpdateState(VirtualRouter.UpdateState.UPDATE_IN_PROGRESS); _routerDao.persist(routers.get(0));
@Override public void configureResource(Network network) { NetworkDetailVO networkDetail=_networkDetailsDao.findDetail(network.getId(), Network.updatingInSequence); if(networkDetail==null || !"true".equalsIgnoreCase(networkDetail.getValue())) throw new CloudRuntimeException("failed to configure the resource, network update is not in progress."); List<DomainRouterVO>routers = _routerDao.listByNetworkAndRole(network.getId(), VirtualRouter.Role.VIRTUAL_ROUTER); for(DomainRouterVO router : routers){ router.setUpdateState(VirtualRouter.UpdateState.UPDATE_NEEDED); _routerDao.persist(router); } }
protected void deployAllVirtualRouters() throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { final int routersToDeploy = getNumberOfRoutersToDeploy(); for (int i = 0; i < routersToDeploy; i++) { // Don't start the router as we are holding the network lock that // needs to be released at the end of router allocation final DomainRouterVO router = nwHelper.deployRouter(this, false); //check if the network update is in progress. //if update is in progress add the update_pending flag to DomainRouterVO. NetworkDetailVO detail = networkDetailsDao.findDetail(guestNetwork.getId(),Network.updatingInSequence); if("true".equalsIgnoreCase(detail!=null ? detail.getValue() : null)) { router.setUpdateState(VirtualRouter.UpdateState.UPDATE_IN_PROGRESS); routerDao.persist(router); } if (router != null) { routerDao.addRouterToGuestNetwork(router, guestNetwork); //Fix according to changes by Sheng Yang in commit ID cb4513379996b262ae378daf00c6388c6b7313cf routers.add(router); } } }
@Override public boolean completeAggregatedExecution(final Network network, final DeployDestination dest) throws ResourceUnavailableException { final List<DomainRouterVO> routers = getRouters(network, dest); if (routers == null || routers.size() == 0) { throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId()); } NetworkDetailVO networkDetail=_networkDetailsDao.findDetail(network.getId(), Network.updatingInSequence); boolean updateInSequence= "true".equalsIgnoreCase((networkDetail!=null ? networkDetail.getValue() : null)); if(updateInSequence){ DomainRouterVO router=routers.get(0); router.setUpdateState(VirtualRouter.UpdateState.UPDATE_COMPLETE); _routerDao.persist(router); } boolean result=false; try{ result=_routerMgr.completeAggregatedExecution(network, routers); } finally { if(!result && updateInSequence) { //fail the network update. even if one router fails we fail the network update. updateToFailedState(network); } } return result; }
router.setUpdateState(null); _routerDao.update(router.getId(),router);