CLOUDSTACK-3715. Socket timeout error is observed in VMware setup if a VMware task (RelocateVM_Task, CloneVM_Task etc.) takes more than 10 minutes. Making this value configurable to allow admins to modify the timeout if required. It defaults to the current value i.e. 10 minutes.

This commit is contained in:
Likitha Shetty 2013-11-03 18:42:24 +05:30
parent 1058e3049a
commit 3a91500173
7 changed files with 39 additions and 3 deletions

View File

@ -69,5 +69,7 @@ public interface VmwareManager {
public String getRootDiskController();
public int getVcenterSessionTimeout();
boolean isLegacyZone(long dcId);
}

View File

@ -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<Class<?>> getCommands() {
List<Class<?>> cmdList = new ArrayList<Class<?>>();

View File

@ -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);

View File

@ -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);

View File

@ -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),

View File

@ -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;
}
}

View File

@ -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);