Skip to content

Commit af942e2

Browse files
authored
vpc: optimize createMonitorServiceCommand() execution (apache#8385)
* Optimize createMonitorServiceCommand() execution. Avoid an expensive getRouterHealthChecksConfig() execution multiple times during VPC restart. Fixes apache#8055 * Move getRouterHealthChecksConfig() outside of loop
1 parent 8d4b4dc commit af942e2

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,7 +1619,7 @@ protected void runInContext() {
16191619
}
16201620

16211621
private SetMonitorServiceCommand createMonitorServiceCommand(DomainRouterVO router, List<MonitorServiceTO> services,
1622-
boolean reconfigure, boolean deleteFromProcessedCache) {
1622+
boolean reconfigure, boolean deleteFromProcessedCache, Map<String, String> routerHealthCheckConfig) {
16231623
final SetMonitorServiceCommand command = new SetMonitorServiceCommand(services);
16241624
command.setAccessDetail(NetworkElementCommand.ROUTER_IP, _routerControlHelper.getRouterControlIp(router.getId()));
16251625
command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
@@ -1637,7 +1637,7 @@ private SetMonitorServiceCommand createMonitorServiceCommand(DomainRouterVO rout
16371637
}
16381638

16391639
command.setAccessDetail(SetMonitorServiceCommand.ROUTER_HEALTH_CHECKS_EXCLUDED, excludedTests);
1640-
command.setHealthChecksConfig(getRouterHealthChecksConfig(router));
1640+
command.setHealthChecksConfig(routerHealthCheckConfig);
16411641
command.setReconfigureAfterUpdate(reconfigure);
16421642
command.setDeleteFromProcessedCache(deleteFromProcessedCache); // As part of updating
16431643
return command;
@@ -1662,7 +1662,7 @@ private boolean updateRouterHealthChecksConfig(DomainRouterVO router) {
16621662
s_logger.info("Updating data for router health checks for router " + router.getUuid());
16631663
Answer origAnswer = null;
16641664
try {
1665-
SetMonitorServiceCommand command = createMonitorServiceCommand(router, null, true, true);
1665+
SetMonitorServiceCommand command = createMonitorServiceCommand(router, null, true, true, getRouterHealthChecksConfig(router));
16661666
origAnswer = _agentMgr.easySend(router.getHostId(), command);
16671667
} catch (final Exception e) {
16681668
s_logger.error("Error while sending update data for health check to router: " + router.getInstanceName(), e);
@@ -1777,7 +1777,7 @@ private void updateWithLbRules(final DomainRouterJoinVO routerJoinVO, final Stri
17771777
}
17781778
}
17791779

1780-
private Map<String, String> getRouterHealthChecksConfig(final DomainRouterVO router) {
1780+
protected Map<String, String> getRouterHealthChecksConfig(final DomainRouterVO router) {
17811781
Map<String, String> data = new HashMap<>();
17821782
List<DomainRouterJoinVO> routerJoinVOs = domainRouterJoinDao.searchByIds(router.getId());
17831783
StringBuilder vmsData = new StringBuilder();
@@ -2342,6 +2342,7 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
23422342
final Provider provider = getVrProvider(router);
23432343

23442344
final List<Long> routerGuestNtwkIds = _routerDao.getRouterNetworks(router.getId());
2345+
Map <String, String> routerHealthChecksConfig = getRouterHealthChecksConfig(router);
23452346
for (final Long guestNetworkId : routerGuestNtwkIds) {
23462347
final AggregationControlCommand startCmd = new AggregationControlCommand(Action.Start, router.getInstanceName(), controlNic.getIPv4Address(), _routerControlHelper.getRouterIpInNetwork(
23472348
guestNetworkId, router.getId()));
@@ -2350,7 +2351,7 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
23502351
if (reprogramGuestNtwks) {
23512352
finalizeIpAssocForNetwork(cmds, router, provider, guestNetworkId, null);
23522353
finalizeNetworkRulesForNetwork(cmds, router, provider, guestNetworkId);
2353-
finalizeMonitorService(cmds, profile, router, provider, guestNetworkId, true);
2354+
finalizeMonitorService(cmds, profile, router, provider, guestNetworkId, true, routerHealthChecksConfig);
23542355
}
23552356

23562357
finalizeUserDataAndDhcpOnStart(cmds, router, provider, guestNetworkId);
@@ -2364,7 +2365,7 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
23642365
}
23652366

23662367
protected void finalizeMonitorService(final Commands cmds, final VirtualMachineProfile profile, final DomainRouterVO router, final Provider provider,
2367-
final long networkId, boolean onStart) {
2368+
final long networkId, boolean onStart, Map<String, String> routerHealthCheckConfig) {
23682369
final NetworkOffering offering = _networkOfferingDao.findById(_networkDao.findById(networkId).getNetworkOfferingId());
23692370
if (offering.isRedundantRouter()) {
23702371
// service monitoring is currently not added in RVR
@@ -2414,7 +2415,7 @@ protected void finalizeMonitorService(final Commands cmds, final VirtualMachineP
24142415
}
24152416

24162417
// As part of aggregate command we don't need to reconfigure if onStart and persist in processed cache. Subsequent updates are not needed.
2417-
SetMonitorServiceCommand command = createMonitorServiceCommand(router, servicesTO, !onStart, false);
2418+
SetMonitorServiceCommand command = createMonitorServiceCommand(router, servicesTO, !onStart, false, routerHealthCheckConfig);
24182419
command.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, _routerControlHelper.getRouterIpInNetwork(networkId, router.getId()));
24192420
if (!isMonitoringServicesEnabled) {
24202421
command.setAccessDetail(SetMonitorServiceCommand.ROUTER_MONITORING_ENABLED, isMonitoringServicesEnabled.toString());

server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -499,8 +499,9 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
499499
throw new CloudRuntimeException("Cannot find related provider of virtual router provider: " + vrProvider.getType().toString());
500500
}
501501

502+
Map<String, String> routerHealthCheckConfig = getRouterHealthChecksConfig(domainRouterVO);
502503
if (reprogramGuestNtwks && publicNics.size() > 0) {
503-
finalizeMonitorService(cmds, profile, domainRouterVO, provider, publicNics.get(0).second().getId(), true);
504+
finalizeMonitorService(cmds, profile, domainRouterVO, provider, publicNics.get(0).second().getId(), true, routerHealthCheckConfig);
504505
}
505506

506507
for (final Pair<Nic, Network> nicNtwk : guestNics) {
@@ -512,7 +513,7 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
512513
if (reprogramGuestNtwks) {
513514
finalizeIpAssocForNetwork(cmds, domainRouterVO, provider, guestNetworkId, vlanMacAddress);
514515
finalizeNetworkRulesForNetwork(cmds, domainRouterVO, provider, guestNetworkId);
515-
finalizeMonitorService(cmds, profile, domainRouterVO, provider, guestNetworkId, true);
516+
finalizeMonitorService(cmds, profile, domainRouterVO, provider, guestNetworkId, true, routerHealthCheckConfig);
516517
}
517518

518519
finalizeUserDataAndDhcpOnStart(cmds, domainRouterVO, provider, guestNetworkId);
@@ -571,7 +572,7 @@ protected boolean sendNetworkRulesToRouter(final long routerId, final long netwo
571572
finalizeNetworkRulesForNetwork(cmds, router, provider, networkId);
572573
}
573574

574-
finalizeMonitorService(cmds, getVirtualMachineProfile(router), router, provider, networkId, false);
575+
finalizeMonitorService(cmds, getVirtualMachineProfile(router), router, provider, networkId, false, getRouterHealthChecksConfig(router));
575576

576577
return _nwHelper.sendCommandsToRouter(router, cmds);
577578
}

0 commit comments

Comments
 (0)