diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java index 6c675990bb3..bc0c9a48420 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java @@ -69,5 +69,7 @@ public interface VmwareManager { public String getRootDiskController(); + public int getVcenterSessionTimeout(); + boolean isLegacyZone(long dcId); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 9af0aa002d8..183d6761a9b 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -177,6 +177,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw int _additionalPortRangeStart; int _additionalPortRangeSize; int _routerExtraPublicNics = 2; + int _vCenterSessionTimeout = 600000; // Timeout in milliseconds String _reserveCpu = "false"; @@ -279,6 +280,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw _routerExtraPublicNics = NumbersUtil.parseInt(_configDao.getValue(Config.RouterExtraPublicNics.key()), 2); + _vCenterSessionTimeout = NumbersUtil.parseInt(_configDao.getValue(Config.VmwareVcenterSessionTimeout.key()), 600) * 1000; + s_logger.info("VmwareManagerImpl config - vmware.vcenter.session.timeout: " + _vCenterSessionTimeout); + _reserveCpu = _configDao.getValue(Config.VmwareReserveCpu.key()); if(_reserveCpu == null || _reserveCpu.isEmpty()) { _reserveCpu = "false"; @@ -985,6 +989,11 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw return _rootDiskController; } + @Override + public int getVcenterSessionTimeout() { + return _vCenterSessionTimeout; + } + @Override public List> getCommands() { List> cmdList = new ArrayList>(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java index 3079998198c..f108fda078a 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java @@ -63,6 +63,7 @@ public class VmwareContextFactory { s_logger.debug("initialize VmwareContext. url: " + serviceUrl + ", username: " + vCenterUserName + ", password: " + StringUtils.getMaskedPasswordForDisplay(vCenterPassword)); VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++); + vimClient.setVcenterSessionTimeout(s_vmwareMgr.getVcenterSessionTimeout()); vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword); VmwareContext context = new VmwareContext(vimClient, vCenterAddress); diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java index 253d6fd3517..3d7a18de0e2 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java @@ -16,11 +16,17 @@ // under the License. package com.cloud.storage.resource; +import javax.annotation.PostConstruct; +import javax.inject.Inject; + import org.apache.log4j.Logger; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.hypervisor.vmware.util.VmwareClient; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.hypervisor.vmware.util.VmwareContextPool; +import com.cloud.utils.NumbersUtil; public class VmwareSecondaryStorageContextFactory { private static final Logger s_logger = Logger.getLogger(VmwareSecondaryStorageContextFactory.class); @@ -28,20 +34,30 @@ public class VmwareSecondaryStorageContextFactory { private static volatile int s_seq = 1; private static VmwareContextPool s_pool; + private static ConfigurationDao s_configDao; + + @Inject ConfigurationDao _configDao; public static void initFactoryEnvironment() { System.setProperty("axis.socketSecureFactory", "org.apache.axis.components.net.SunFakeTrustSocketFactory"); s_pool = new VmwareContextPool(); } + @PostConstruct + void init() { + s_configDao = _configDao; + } + public static VmwareContext create(String vCenterAddress, String vCenterUserName, String vCenterPassword) throws Exception { assert(vCenterAddress != null); assert(vCenterUserName != null); assert(vCenterPassword != null); String serviceUrl = "https://" + vCenterAddress + "/sdk/vimService"; + int vCenterSessionTimeout = NumbersUtil.parseInt(s_configDao.getValue(Config.VmwareVcenterSessionTimeout.key()), 600) * 1000; VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++); - vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword); + vimClient.setVcenterSessionTimeout(vCenterSessionTimeout); + vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword); VmwareContext context = new VmwareContext(vimClient, vCenterAddress); assert(context != null); diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index e78757639ee..e4413251400 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -265,6 +265,7 @@ public enum Config { VmwareRecycleHungWorker("Advanced", ManagementServer.class, Boolean.class, "vmware.recycle.hung.wokervm", "false", "Specify whether or not to recycle hung worker VMs", null), VmwareHungWorkerTimeout("Advanced", ManagementServer.class, Long.class, "vmware.hung.wokervm.timeout", "7200", "Worker VM timeout in seconds", null), VmwareEnableNestedVirtualization("Advanced", ManagementServer.class, Boolean.class, "vmware.nested.virtualization", "false", "When set to true this will enable nested virtualization when this is supported by the hypervisor", null), + VmwareVcenterSessionTimeout("Advanced", ManagementServer.class, Long.class, "vmware.vcenter.session.timeout", "600", "VMware client timeout in seconds", null), // Midonet MidoNetAPIServerAddress("Network", ManagementServer.class, String.class, "midonet.apiserver.address", "http://localhost:8081", "Specify the address at which the Midonet API server can be contacted (if using Midonet)", null), diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java index d1adbc2dc30..a0122d29e22 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java @@ -109,6 +109,7 @@ public class VmwareClient { private VimPortType vimPort; private String serviceCookie; private final String SVC_INST_NAME = "ServiceInstance"; + private int vCenterSessionTimeout = 600000; // Timeout in milliseconds private boolean isConnected = false; @@ -132,8 +133,8 @@ public class VmwareClient { ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url); ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true); - ctxt.put("com.sun.xml.internal.ws.request.timeout", 600000); - ctxt.put("com.sun.xml.internal.ws.connect.timeout", 600000); + ctxt.put("com.sun.xml.internal.ws.request.timeout", vCenterSessionTimeout); + ctxt.put("com.sun.xml.internal.ws.connect.timeout", vCenterSessionTimeout); ServiceContent serviceContent = vimPort.retrieveServiceContent(SVC_INST_REF); @@ -616,4 +617,9 @@ public class VmwareClient { } return propmor; } + + public void setVcenterSessionTimeout(int vCenterSessionTimeout) { + this.vCenterSessionTimeout = vCenterSessionTimeout; + } + } diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java b/vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java index c0bd5620d94..c8363d6e78d 100644 --- a/vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java +++ b/vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java @@ -48,6 +48,7 @@ public class TestVmwareContextFactory { s_logger.debug("initialize VmwareContext. url: " + serviceUrl + ", username: " + vCenterUserName + ", password: " + StringUtils.getMaskedPasswordForDisplay(vCenterPassword)); VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++); + vimClient.setVcenterSessionTimeout(600000); // Timeout in milliseconds vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword); VmwareContext context = new VmwareContext(vimClient, vCenterAddress);