[
https://issues.apache.org/jira/browse/CLOUDSTACK-9114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15050445#comment-15050445
]
ASF GitHub Bot commented on CLOUDSTACK-9114:
--------------------------------------------
Github user ustcweizhou commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1198#discussion_r47204914
--- Diff:
engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
---
@@ -2558,6 +2575,62 @@ public boolean restartNetwork(Long networkId,
Account callerAccount, User caller
}
}
+ /* If there are redundant routers in the isolated network, we follow
the steps to make the network working better
+ * (1) destroy backup router if exists
+ * (2) create new backup router
+ * (3) destroy master router (then the backup will become master)
+ * (4) create a new router as backup router.
+ */
+ private boolean restartGuestNetworkWithRedundantRouters(NetworkVO
network, List<DomainRouterVO> routers, ReservationContext context) throws
ResourceUnavailableException, ConcurrentOperationException,
InsufficientCapacityException {
+ Account caller = CallContext.current().getCallingAccount();
+ long callerUserId = CallContext.current().getCallingUserId();
+
+ // check the master and backup redundant state
+ DomainRouterVO masterRouter = null;
+ DomainRouterVO backupRouter = null;
+ if (routers != null && routers.size() == 1) {
+ masterRouter = routers.get(0);
+ } if (routers != null && routers.size() == 2) {
+ DomainRouterVO router1 = routers.get(0);
+ DomainRouterVO router2 = routers.get(1);
+ if (router1.getRedundantState() == RedundantState.MASTER ||
router2.getRedundantState() == RedundantState.BACKUP) {
+ masterRouter = router1;
+ backupRouter = router2;
+ } else if (router1.getRedundantState() ==
RedundantState.BACKUP || router2.getRedundantState() == RedundantState.MASTER) {
+ masterRouter = router2;
+ backupRouter = router1;
+ } else { // both routers are in UNKNOWN state
+ masterRouter = router1;
+ backupRouter = router2;
+ }
+ }
+
+ NetworkOfferingVO offering =
_networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId());
+ DeployDestination dest = new
DeployDestination(_dcDao.findById(network.getDataCenterId()), null, null, null);
+ List<Provider> providersToImplement =
getNetworkProviders(network.getId());
+
+ // destroy backup router
+ if (backupRouter != null) {
+ _routerService.destroyRouter(backupRouter.getId(), caller,
callerUserId);
+ }
+ // create new backup router
+ implementNetworkElements(dest, context, network, offering,
providersToImplement);
+
+ // destroy master router
+ if (masterRouter != null) {
+ try {
+ Thread.sleep(10000); // wait 10s for the
keepalived/conntrackd on backup router
--- End diff --
@wilderrodrigues
I made this change for 4.2.1 at first. I met some issues during the
restartnetwork because of the keepalived/conntrackd, hence I added the sleep.
10 seconds is enough to wait the services to be running.
I did not check the difference between keepalived on Debian 7.0.0 and
Debian 7.9.0, so I thought the issue still exist.
I am busy on other issues and have no time on writing the test, automated
test and improvement are welcome.
> restartnetwork with cleanup should not update/restart both routers at once
> --------------------------------------------------------------------------
>
> Key: CLOUDSTACK-9114
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9114
> Project: CloudStack
> Issue Type: Improvement
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Reporter: Wei Zhou
> Assignee: Wei Zhou
>
> for now, restartnetwork with cleanup will stop both RVRs at first, then start
> two new RVRs.
> to reduce the downtime of network, we'd better restart the RVRs one by one.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)