mirror of https://github.com/apache/cloudstack.git
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. Conflicts: setup/db/db/schema-430to440.sql
This commit is contained in:
parent
098ad53c23
commit
4620c27ebf
|
|
@ -134,6 +134,7 @@ public class VirtualRoutingResource {
|
|||
private int _sleep;
|
||||
private int _retry;
|
||||
private int _port;
|
||||
private int _eachTimeout;
|
||||
|
||||
private String _cfgVersion = "1.0";
|
||||
|
||||
|
|
@ -972,6 +973,9 @@ public class VirtualRoutingResource {
|
|||
value = (String)params.get("ssh.port");
|
||||
_port = NumbersUtil.parseInt(value, 3922);
|
||||
|
||||
value = (String)params.get("router.aggregation.command.each.timeout");
|
||||
_eachTimeout = NumbersUtil.parseInt(value, 3);
|
||||
|
||||
if (_vrDeployer == null) {
|
||||
throw new ConfigurationException("Unable to find the resource for VirtualRouterDeployer!");
|
||||
}
|
||||
|
|
@ -1153,8 +1157,8 @@ public class VirtualRoutingResource {
|
|||
return new Answer(cmd, false, result.getDetails());
|
||||
}
|
||||
|
||||
// 3 second for each answer should be enough, and 120s is the minimal timeout
|
||||
int timeout = answerCounts * 3;
|
||||
// 120s is the minimal timeout
|
||||
int timeout = answerCounts * _eachTimeout;
|
||||
if (timeout < 120) {
|
||||
timeout = 120;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import com.cloud.agent.api.SetupAnswer;
|
|||
import com.cloud.agent.api.SetupCommand;
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
import com.cloud.agent.api.StartupRoutingCommand;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.alert.AlertManager;
|
||||
import com.cloud.dc.ClusterVO;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
|
|
@ -276,6 +277,8 @@ public class HypervServerDiscoverer extends DiscovererBase implements Discoverer
|
|||
|
||||
params.putAll(details);
|
||||
|
||||
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
|
||||
|
||||
HypervDirectConnectResource resource = new HypervDirectConnectResource();
|
||||
resource.configure(agentIp, params);
|
||||
|
||||
|
|
|
|||
|
|
@ -16,20 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.hypervisor.vmware;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
import com.cloud.agent.api.StartupRoutingCommand;
|
||||
import com.cloud.alert.AlertManager;
|
||||
|
|
@ -76,6 +62,18 @@ import com.cloud.utils.Pair;
|
|||
import com.cloud.utils.UriUtils;
|
||||
import com.vmware.vim25.ClusterDasConfigInfo;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.net.URI;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@Local(value = Discoverer.class)
|
||||
public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer, ResourceStateAdapter {
|
||||
|
|
@ -384,6 +382,8 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer
|
|||
params.put("guestTrafficInfo", guestTrafficLabelObj);
|
||||
params.put("publicTrafficInfo", publicTrafficLabelObj);
|
||||
|
||||
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
|
||||
|
||||
VmwareResource resource = new VmwareResource();
|
||||
try {
|
||||
resource.configure("VMware", params);
|
||||
|
|
|
|||
|
|
@ -16,24 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.hypervisor.xen.discoverer;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import javax.persistence.EntityExistsException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.xmlrpc.XmlRpcException;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.Listener;
|
||||
import com.cloud.agent.api.AgentControlAnswer;
|
||||
|
|
@ -75,7 +57,6 @@ import com.cloud.hypervisor.xen.resource.XenServer620Resource;
|
|||
import com.cloud.hypervisor.xen.resource.XenServer620SP1Resource;
|
||||
import com.cloud.hypervisor.xen.resource.XenServerConnectionPool;
|
||||
import com.cloud.hypervisor.xen.resource.Xenserver625Resource;
|
||||
import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
|
||||
import com.cloud.resource.Discoverer;
|
||||
import com.cloud.resource.DiscovererBase;
|
||||
import com.cloud.resource.ResourceStateAdapter;
|
||||
|
|
@ -93,13 +74,30 @@ import com.cloud.utils.exception.CloudRuntimeException;
|
|||
import com.cloud.utils.exception.HypervisorVersionChangedException;
|
||||
import com.xensource.xenapi.Connection;
|
||||
import com.xensource.xenapi.Host;
|
||||
import com.xensource.xenapi.Pool;
|
||||
import com.xensource.xenapi.Session;
|
||||
import com.xensource.xenapi.PoolPatch;
|
||||
import com.xensource.xenapi.HostPatch;
|
||||
import com.xensource.xenapi.Pool;
|
||||
import com.xensource.xenapi.PoolPatch;
|
||||
import com.xensource.xenapi.Session;
|
||||
import com.xensource.xenapi.Types.SessionAuthenticationFailed;
|
||||
import com.xensource.xenapi.Types.XenAPIException;
|
||||
import com.xensource.xenapi.Types.UuidInvalid;
|
||||
import com.xensource.xenapi.Types.XenAPIException;
|
||||
import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.xmlrpc.XmlRpcException;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import javax.persistence.EntityExistsException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
@Local(value = Discoverer.class)
|
||||
|
|
@ -345,6 +343,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||
boolean securityGroupEnabled = zone.isSecurityGroupEnabled();
|
||||
params.put("securitygroupenabled", Boolean.toString(securityGroupEnabled));
|
||||
|
||||
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
|
||||
params.put("wait", Integer.toString(_wait));
|
||||
details.put("wait", Integer.toString(_wait));
|
||||
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
|
||||
|
|
|
|||
|
|
@ -16,15 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.configuration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.consoleproxy.ConsoleProxyManager;
|
||||
import com.cloud.ha.HighAvailabilityManager;
|
||||
|
|
@ -38,6 +29,14 @@ import com.cloud.storage.snapshot.SnapshotManager;
|
|||
import com.cloud.template.TemplateManager;
|
||||
import com.cloud.vm.UserVmManager;
|
||||
import com.cloud.vm.snapshot.VMSnapshotManager;
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
public enum Config {
|
||||
|
||||
|
|
@ -1907,6 +1906,15 @@ public enum Config {
|
|||
"seconds between VRRP broadcast. It would 3 times broadcast fail to trigger fail-over mechanism of redundant router",
|
||||
null),
|
||||
|
||||
RouterAggregationCommandEachTimeout(
|
||||
"Advanced",
|
||||
NetworkOrchestrationService.class,
|
||||
Integer.class,
|
||||
"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 ",
|
||||
null),
|
||||
|
||||
ManagementServerVendor("Advanced", ManagementServer.class, String.class, "mgt.server.vendor", "ACS", "the vendor of management server", null);
|
||||
|
||||
private final String _category;
|
||||
|
|
|
|||
|
|
@ -16,18 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.hypervisor.kvm.discoverer;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.Listener;
|
||||
import com.cloud.agent.api.AgentControlAnswer;
|
||||
|
|
@ -55,6 +43,16 @@ import com.cloud.resource.ResourceStateAdapter;
|
|||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.UnableDeleteHostException;
|
||||
import com.cloud.utils.ssh.SSHCmdHelper;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public abstract class LibvirtServerDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter {
|
||||
private static final Logger s_logger = Logger.getLogger(LibvirtServerDiscoverer.class);
|
||||
|
|
@ -211,6 +209,8 @@ public abstract class LibvirtServerDiscoverer extends DiscovererBase implements
|
|||
KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
|
||||
Map<String, Object> params = new HashMap<String, Object>();
|
||||
|
||||
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
|
||||
|
||||
params.put("zone", Long.toString(dcId));
|
||||
params.put("pod", Long.toString(podId));
|
||||
params.put("cluster", Long.toString(clusterId));
|
||||
|
|
|
|||
|
|
@ -16,18 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.resource;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.dc.ClusterVO;
|
||||
import com.cloud.dc.dao.ClusterDao;
|
||||
|
|
@ -37,6 +25,16 @@ import com.cloud.host.dao.HostDao;
|
|||
import com.cloud.network.NetworkModel;
|
||||
import com.cloud.utils.component.AdapterBase;
|
||||
import com.cloud.utils.net.UrlUtil;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class DiscovererBase extends AdapterBase implements Discoverer {
|
||||
protected Map<String, String> _params;
|
||||
|
|
@ -139,6 +137,8 @@ public abstract class DiscovererBase extends AdapterBase implements Discoverer {
|
|||
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
|
||||
params.put(Config.XenMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenMaxNics.toString()));
|
||||
params.put(Config.XenHeartBeatInterval.toString().toLowerCase(), _configDao.getValue(Config.XenHeartBeatInterval.toString()));
|
||||
params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
|
||||
|
||||
return params;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -772,3 +772,4 @@ ALTER TABLE `cloud`.`networks` ADD COLUMN streched_l2 boolean default false;
|
|||
ALTER TABLE `cloud`.`vpc` ADD COLUMN region_level_vpc boolean default false;
|
||||
|
||||
INSERT INTO `cloud`.`configuration`(category, instance, component, name, value, description, default_value) VALUES ('Advanced', 'DEFAULT', 'NetworkOrchestrationService', 'router.redundant.vrrp.interval', '1', 'seconds between VRRP broadcast. It would 3 times broadcast fail to trigger fail-over mechanism of redundant router', '1') ON DUPLICATE KEY UPDATE category='Advanced';
|
||||
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';
|
||||
|
|
|
|||
Loading…
Reference in New Issue