Skip to content

Commit 3578c71

Browse files
author
Sheng Yang
committed
CLOUDSTACK-6047: Make aggregation command timeout configurable
In case some environments has different performance or we found some commands would took too long to execute, one global configuration item is introduced to specify "time out in seconds per one command in aggregation commands". By default it's 3 seconds. If admin feel it's too long, it can be adjust to as low as 1 seconds, which runs still well in my machine.
1 parent c7d8aae commit 3578c71

8 files changed

Lines changed: 87 additions & 71 deletions

File tree

core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ protected class VRScripts {
134134
private int _sleep;
135135
private int _retry;
136136
private int _port;
137+
private int _eachTimeout;
137138

138139
private String _cfgVersion = "1.0";
139140

@@ -972,6 +973,9 @@ public boolean configure(final String name, final Map<String, Object> params) th
972973
value = (String)params.get("ssh.port");
973974
_port = NumbersUtil.parseInt(value, 3922);
974975

976+
value = (String)params.get("router.aggregation.command.each.timeout");
977+
_eachTimeout = NumbersUtil.parseInt(value, 3);
978+
975979
if (_vrDeployer == null) {
976980
throw new ConfigurationException("Unable to find the resource for VirtualRouterDeployer!");
977981
}
@@ -1153,8 +1157,8 @@ private Answer execute(AggregationControlCommand cmd) {
11531157
return new Answer(cmd, false, result.getDetails());
11541158
}
11551159

1156-
// 3 second for each answer should be enough, and 120s is the minimal timeout
1157-
int timeout = answerCounts * 3;
1160+
// 120s is the minimal timeout
1161+
int timeout = answerCounts * _eachTimeout;
11581162
if (timeout < 120) {
11591163
timeout = 120;
11601164
}

plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/discoverer/HypervServerDiscoverer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.cloud.agent.api.SetupCommand;
4444
import com.cloud.agent.api.StartupCommand;
4545
import com.cloud.agent.api.StartupRoutingCommand;
46+
import com.cloud.configuration.Config;
4647
import com.cloud.alert.AlertManager;
4748
import com.cloud.dc.ClusterVO;
4849
import com.cloud.dc.DataCenterVO;
@@ -276,6 +277,8 @@ public final Map<? extends ServerResource, Map<String, String>> find(final long
276277

277278
params.putAll(details);
278279

280+
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
281+
279282
HypervDirectConnectResource resource = new HypervDirectConnectResource();
280283
resource.configure(agentIp, params);
281284

plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,6 @@
1616
// under the License.
1717
package com.cloud.hypervisor.vmware;
1818

19-
import java.net.URI;
20-
import java.net.URLDecoder;
21-
import java.util.HashMap;
22-
import java.util.List;
23-
import java.util.Map;
24-
import java.util.UUID;
25-
26-
import javax.ejb.Local;
27-
import javax.inject.Inject;
28-
import javax.naming.ConfigurationException;
29-
30-
import org.apache.cloudstack.api.ApiConstants;
31-
import org.apache.log4j.Logger;
32-
3319
import com.cloud.agent.api.StartupCommand;
3420
import com.cloud.agent.api.StartupRoutingCommand;
3521
import com.cloud.alert.AlertManager;
@@ -76,6 +62,18 @@
7662
import com.cloud.utils.UriUtils;
7763
import com.vmware.vim25.ClusterDasConfigInfo;
7864
import com.vmware.vim25.ManagedObjectReference;
65+
import org.apache.cloudstack.api.ApiConstants;
66+
import org.apache.log4j.Logger;
67+
68+
import javax.ejb.Local;
69+
import javax.inject.Inject;
70+
import javax.naming.ConfigurationException;
71+
import java.net.URI;
72+
import java.net.URLDecoder;
73+
import java.util.HashMap;
74+
import java.util.List;
75+
import java.util.Map;
76+
import java.util.UUID;
7977

8078
@Local(value = Discoverer.class)
8179
public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer, ResourceStateAdapter {
@@ -384,6 +382,8 @@ public VmwareServerDiscoverer() {
384382
params.put("guestTrafficInfo", guestTrafficLabelObj);
385383
params.put("publicTrafficInfo", publicTrafficLabelObj);
386384

385+
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
386+
387387
VmwareResource resource = new VmwareResource();
388388
try {
389389
resource.configure("VMware", params);

plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,6 @@
1616
// under the License.
1717
package com.cloud.hypervisor.xen.discoverer;
1818

19-
import java.net.InetAddress;
20-
import java.net.URI;
21-
import java.net.UnknownHostException;
22-
import java.util.HashMap;
23-
import java.util.LinkedList;
24-
import java.util.List;
25-
import java.util.Map;
26-
import java.util.Queue;
27-
import java.util.Set;
28-
29-
import javax.ejb.Local;
30-
import javax.inject.Inject;
31-
import javax.naming.ConfigurationException;
32-
import javax.persistence.EntityExistsException;
33-
34-
import org.apache.log4j.Logger;
35-
import org.apache.xmlrpc.XmlRpcException;
36-
3719
import com.cloud.agent.AgentManager;
3820
import com.cloud.agent.Listener;
3921
import com.cloud.agent.api.AgentControlAnswer;
@@ -75,7 +57,6 @@
7557
import com.cloud.hypervisor.xen.resource.XenServer620SP1Resource;
7658
import com.cloud.hypervisor.xen.resource.XenServerConnectionPool;
7759
import com.cloud.hypervisor.xen.resource.Xenserver625Resource;
78-
import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
7960
import com.cloud.resource.Discoverer;
8061
import com.cloud.resource.DiscovererBase;
8162
import com.cloud.resource.ResourceStateAdapter;
@@ -93,13 +74,30 @@
9374
import com.cloud.utils.exception.HypervisorVersionChangedException;
9475
import com.xensource.xenapi.Connection;
9576
import com.xensource.xenapi.Host;
77+
import com.xensource.xenapi.HostPatch;
9678
import com.xensource.xenapi.Pool;
97-
import com.xensource.xenapi.Session;
9879
import com.xensource.xenapi.PoolPatch;
99-
import com.xensource.xenapi.HostPatch;
80+
import com.xensource.xenapi.Session;
10081
import com.xensource.xenapi.Types.SessionAuthenticationFailed;
101-
import com.xensource.xenapi.Types.XenAPIException;
10282
import com.xensource.xenapi.Types.UuidInvalid;
83+
import com.xensource.xenapi.Types.XenAPIException;
84+
import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
85+
import org.apache.log4j.Logger;
86+
import org.apache.xmlrpc.XmlRpcException;
87+
88+
import javax.ejb.Local;
89+
import javax.inject.Inject;
90+
import javax.naming.ConfigurationException;
91+
import javax.persistence.EntityExistsException;
92+
import java.net.InetAddress;
93+
import java.net.URI;
94+
import java.net.UnknownHostException;
95+
import java.util.HashMap;
96+
import java.util.LinkedList;
97+
import java.util.List;
98+
import java.util.Map;
99+
import java.util.Queue;
100+
import java.util.Set;
103101

104102

105103
@Local(value = Discoverer.class)
@@ -344,6 +342,7 @@ protected boolean poolHasHotFix(Connection conn, String hostIp, String hotFixUui
344342
boolean securityGroupEnabled = zone.isSecurityGroupEnabled();
345343
params.put("securitygroupenabled", Boolean.toString(securityGroupEnabled));
346344

345+
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
347346
params.put("wait", Integer.toString(_wait));
348347
details.put("wait", Integer.toString(_wait));
349348
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));

server/src/com/cloud/configuration/Config.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,6 @@
1616
// under the License.
1717
package com.cloud.configuration;
1818

19-
import java.util.ArrayList;
20-
import java.util.HashMap;
21-
import java.util.List;
22-
import java.util.StringTokenizer;
23-
24-
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
25-
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
26-
import org.apache.cloudstack.framework.config.ConfigKey;
27-
2819
import com.cloud.agent.AgentManager;
2920
import com.cloud.consoleproxy.ConsoleProxyManager;
3021
import com.cloud.ha.HighAvailabilityManager;
@@ -38,6 +29,14 @@
3829
import com.cloud.template.TemplateManager;
3930
import com.cloud.vm.UserVmManager;
4031
import com.cloud.vm.snapshot.VMSnapshotManager;
32+
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
33+
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
34+
import org.apache.cloudstack.framework.config.ConfigKey;
35+
36+
import java.util.ArrayList;
37+
import java.util.HashMap;
38+
import java.util.List;
39+
import java.util.StringTokenizer;
4140

4241
public enum Config {
4342

@@ -1924,6 +1923,15 @@ public enum Config {
19241923
"seconds between VRRP broadcast. It would 3 times broadcast fail to trigger fail-over mechanism of redundant router",
19251924
null),
19261925

1926+
RouterAggregationCommandEachTimeout(
1927+
"Advanced",
1928+
NetworkOrchestrationService.class,
1929+
Integer.class,
1930+
"router.aggregation.command.each.timeout",
1931+
"3",
1932+
"timeout in seconds for each Virtual Router command being aggregated. The final aggregation command timeout would be determined by this timeout * commands counts ",
1933+
null),
1934+
19271935
ManagementServerVendor("Advanced", ManagementServer.class, String.class, "mgt.server.vendor", "ACS", "the vendor of management server", null);
19281936

19291937
private final String _category;

server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,6 @@
1616
// under the License.
1717
package com.cloud.hypervisor.kvm.discoverer;
1818

19-
import java.net.InetAddress;
20-
import java.net.URI;
21-
import java.util.HashMap;
22-
import java.util.List;
23-
import java.util.Map;
24-
import java.util.UUID;
25-
26-
import javax.inject.Inject;
27-
import javax.naming.ConfigurationException;
28-
29-
import org.apache.log4j.Logger;
30-
3119
import com.cloud.agent.AgentManager;
3220
import com.cloud.agent.Listener;
3321
import com.cloud.agent.api.AgentControlAnswer;
@@ -55,6 +43,16 @@
5543
import com.cloud.resource.ServerResource;
5644
import com.cloud.resource.UnableDeleteHostException;
5745
import com.cloud.utils.ssh.SSHCmdHelper;
46+
import org.apache.log4j.Logger;
47+
48+
import javax.inject.Inject;
49+
import javax.naming.ConfigurationException;
50+
import java.net.InetAddress;
51+
import java.net.URI;
52+
import java.util.HashMap;
53+
import java.util.List;
54+
import java.util.Map;
55+
import java.util.UUID;
5856

5957
public abstract class LibvirtServerDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter {
6058
private static final Logger s_logger = Logger.getLogger(LibvirtServerDiscoverer.class);
@@ -211,6 +209,8 @@ public boolean processTimeout(long agentId, long seq) {
211209
KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
212210
Map<String, Object> params = new HashMap<String, Object>();
213211

212+
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
213+
214214
params.put("zone", Long.toString(dcId));
215215
params.put("pod", Long.toString(podId));
216216
params.put("cluster", Long.toString(clusterId));

server/src/com/cloud/resource/DiscovererBase.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,6 @@
1616
// under the License.
1717
package com.cloud.resource;
1818

19-
import java.lang.reflect.Constructor;
20-
import java.lang.reflect.InvocationTargetException;
21-
import java.net.URL;
22-
import java.util.HashMap;
23-
import java.util.Map;
24-
25-
import javax.inject.Inject;
26-
import javax.naming.ConfigurationException;
27-
28-
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
29-
import org.apache.log4j.Logger;
30-
3119
import com.cloud.configuration.Config;
3220
import com.cloud.dc.ClusterVO;
3321
import com.cloud.dc.dao.ClusterDao;
@@ -37,6 +25,16 @@
3725
import com.cloud.network.NetworkModel;
3826
import com.cloud.utils.component.AdapterBase;
3927
import com.cloud.utils.net.UrlUtil;
28+
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
29+
import org.apache.log4j.Logger;
30+
31+
import javax.inject.Inject;
32+
import javax.naming.ConfigurationException;
33+
import java.lang.reflect.Constructor;
34+
import java.lang.reflect.InvocationTargetException;
35+
import java.net.URL;
36+
import java.util.HashMap;
37+
import java.util.Map;
4038

4139
public abstract class DiscovererBase extends AdapterBase implements Discoverer {
4240
protected Map<String, String> _params;
@@ -139,6 +137,8 @@ protected HashMap<String, Object> buildConfigParams(HostVO host) {
139137
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
140138
params.put(Config.XenMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenMaxNics.toString()));
141139
params.put(Config.XenHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenHeartBeatInterval.toString()));
140+
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
141+
142142
return params;
143143

144144
}

setup/db/db/schema-430to440.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,3 +1651,5 @@ CREATE TABLE `cloud`.`op_vpc_distributed_router_sequence_no` (
16511651
PRIMARY KEY (`id`),
16521652
UNIQUE `u_op_vpc_distributed_router_sequence_no_vpc_id`(`vpc_id`)
16531653
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1654+
1655+
INSERT INTO `cloud`.`configuration`(category, instance, component, name, value, description, default_value) VALUES ('Advanced', 'DEFAULT', 'NetworkOrchestrationService', 'router.aggregation.command.each.timeout', '3', 'timeout in seconds for each Virtual Router command being aggregated. The final aggregation command timeout would be determined by this timeout * commands counts ', '3') ON DUPLICATE KEY UPDATE category='Advanced';

0 commit comments

Comments
 (0)