Skip to content

Commit 90fb76a

Browse files
author
Likitha Shetty
committed
CLOUDSTACK-5069. Added global config 'vmware.vcenter.session.timeout' to make the vCenter session timeout value configurable.
1 parent 8321ea4 commit 90fb76a

10 files changed

Lines changed: 47 additions & 6 deletions

File tree

plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ public Pair<Boolean, Long> getCommandHostDelegation(long hostId, Command cmd) {
368368
_cmdExecLogDao.persist(execLog);
369369
cmd.setContextParam("execid", String.valueOf(execLog.getId()));
370370
cmd.setContextParam("noderuninfo", String.format("%d-%d", _clusterMgr.getManagementNodeId(), _clusterMgr.getCurrentRunId()));
371+
cmd.setContextParam("vCenterSessionTimeout", String.valueOf(_vmwareMgr.getVcenterSessionTimeout()));
371372

372373
if(cmd instanceof BackupSnapshotCommand ||
373374
cmd instanceof CreatePrivateTemplateFromVolumeCommand ||

plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,7 @@ List<ManagedObjectReference> addHostToPodCluster(VmwareContext serviceContext, l
6969

7070
public String getRootDiskController();
7171

72+
public int getVcenterSessionTimeout();
73+
7274
boolean isLegacyZone(long dcId);
7375
}

plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
177177
int _additionalPortRangeStart;
178178
int _additionalPortRangeSize;
179179
int _routerExtraPublicNics = 2;
180+
int _vCenterSessionTimeout = 1200000; // Timeout in milliseconds
180181

181182
String _reserveCpu = "false";
182183

@@ -279,6 +280,9 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
279280

280281
_routerExtraPublicNics = NumbersUtil.parseInt(_configDao.getValue(Config.RouterExtraPublicNics.key()), 2);
281282

283+
_vCenterSessionTimeout = NumbersUtil.parseInt(_configDao.getValue(Config.VmwareVcenterSessionTimeout.key()), 1200) * 1000;
284+
s_logger.info("VmwareManagerImpl config - vmware.vcenter.session.timeout: " + _vCenterSessionTimeout);
285+
282286
_reserveCpu = _configDao.getValue(Config.VmwareReserveCpu.key());
283287
if(_reserveCpu == null || _reserveCpu.isEmpty()) {
284288
_reserveCpu = "false";
@@ -985,6 +989,11 @@ public String getRootDiskController() {
985989
return _rootDiskController;
986990
}
987991

992+
@Override
993+
public int getVcenterSessionTimeout() {
994+
return _vCenterSessionTimeout;
995+
}
996+
988997
@Override
989998
public List<Class<?>> getCommands() {
990999
List<Class<?>> cmdList = new ArrayList<Class<?>>();

plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public static VmwareContext create(String vCenterAddress, String vCenterUserName
6363
s_logger.debug("initialize VmwareContext. url: " + serviceUrl + ", username: " + vCenterUserName + ", password: " + StringUtils.getMaskedPasswordForDisplay(vCenterPassword));
6464

6565
VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++);
66+
vimClient.setVcenterSessionTimeout(s_vmwareMgr.getVcenterSessionTimeout());
6667
vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword);
6768

6869
VmwareContext context = new VmwareContext(vimClient, vCenterAddress);
@@ -83,13 +84,14 @@ public static VmwareContext getContext(String vCenterAddress, String vCenterUser
8384
if(context == null) {
8485
context = create(vCenterAddress, vCenterUserName, vCenterPassword);
8586
} else {
86-
if(!context.validate()) {
87+
// Validate current context and verify if vCenter session timeout value of the context matches the timeout value set by Admin
88+
if(!context.validate() || (context.getVimClient().getVcenterSessionTimeout() != s_vmwareMgr.getVcenterSessionTimeout())) {
8789
s_logger.info("Validation of the context faild. dispose and create a new one");
8890
context.close();
8991
context = create(vCenterAddress, vCenterUserName, vCenterPassword);
9092
}
9193
}
92-
94+
9395
if(context != null) {
9496
context.registerStockObject(VmwareManager.CONTEXT_STOCK_NAME, s_vmwareMgr);
9597

plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class VmwareSecondaryStorageContextFactory {
3131

3232
private static VmwareContextPool s_pool;
3333

34+
public static int s_vCenterSessionTimeout = 1200000; // Timeout in milliseconds
35+
3436
public static void initFactoryEnvironment() {
3537
System.setProperty("axis.socketSecureFactory", "org.apache.axis.components.net.SunFakeTrustSocketFactory");
3638
s_pool = new VmwareContextPool();
@@ -43,6 +45,7 @@ public static VmwareContext create(String vCenterAddress, String vCenterUserName
4345

4446
String serviceUrl = "https://" + vCenterAddress + "/sdk/vimService";
4547
VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++);
48+
vimClient.setVcenterSessionTimeout(s_vCenterSessionTimeout);
4649
vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword);
4750
VmwareContext context = new VmwareContext(vimClient, vCenterAddress);
4851
assert(context != null);
@@ -58,7 +61,8 @@ public static VmwareContext getContext(String vCenterAddress, String vCenterUser
5861
if(context == null) {
5962
context = create(vCenterAddress, vCenterUserName, vCenterPassword);
6063
} else {
61-
if(!context.validate()) {
64+
// Validate current context and verify if vCenter session timeout value of the context matches the timeout value set by Admin
65+
if(!context.validate() || (context.getVimClient().getVcenterSessionTimeout() != s_vCenterSessionTimeout)) {
6266
s_logger.info("Validation of the context faild. dispose and create a new one");
6367
context.close();
6468
context = create(vCenterAddress, vCenterUserName, vCenterPassword);
@@ -76,4 +80,9 @@ public static VmwareContext getContext(String vCenterAddress, String vCenterUser
7680
public static void invalidate(VmwareContext context) {
7781
context.close();
7882
}
83+
84+
public static void setVcenterSessionTimeout(int timeout) {
85+
s_vCenterSessionTimeout = timeout;
86+
}
87+
7988
}

plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.cloud.hypervisor.vmware.util.VmwareContext;
4646
import com.cloud.hypervisor.vmware.util.VmwareHelper;
4747
import com.cloud.serializer.GsonHelper;
48+
import com.cloud.utils.NumbersUtil;
4849
import com.cloud.utils.Pair;
4950
import com.cloud.utils.StringUtils;
5051
import com.google.gson.Gson;
@@ -206,16 +207,19 @@ public VmwareContext getServiceContext(Command cmd) {
206207
return null;
207208
}
208209

210+
int vCenterSessionTimeout = NumbersUtil.parseInt(cmd.getContextParam("vCenterSessionTimeout"), 1200000);
211+
209212
try {
210213
_resource.ensureOutgoingRuleForAddress(vCenterAddress);
211214

212215
VmwareContext context = currentContext.get();
213216
if(context == null) {
214217
s_logger.info("Open new VmwareContext. vCenter: " + vCenterAddress + ", user: " + username
215218
+ ", password: " + StringUtils.getMaskedPasswordForDisplay(password));
219+
VmwareSecondaryStorageContextFactory.setVcenterSessionTimeout(vCenterSessionTimeout);
216220
context = VmwareSecondaryStorageContextFactory.getContext(vCenterAddress, username, password);
217221
}
218-
222+
219223
if (context != null) {
220224
context.registerStockObject("serviceconsole", cmd.getContextParam("serviceconsole"));
221225
context.registerStockObject("manageportgroup", cmd.getContextParam("manageportgroup"));

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ public enum Config {
263263
VmwareRecycleHungWorker("Advanced", ManagementServer.class, Boolean.class, "vmware.recycle.hung.wokervm", "false", "Specify whether or not to recycle hung worker VMs", null),
264264
VmwareHungWorkerTimeout("Advanced", ManagementServer.class, Long.class, "vmware.hung.wokervm.timeout", "7200", "Worker VM timeout in seconds", null),
265265
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),
266+
VmwareVcenterSessionTimeout("Advanced", ManagementServer.class, Long.class, "vmware.vcenter.session.timeout", "1200", "VMware client timeout in seconds", null),
266267

267268
// Midonet
268269
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),

setup/db/db/schema-421to430.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,3 +751,5 @@ CREATE VIEW `cloud`.`domain_router_view` AS
751751
`cloud`.`async_job` ON async_job.instance_id = vm_instance.id
752752
and async_job.instance_type = 'DomainRouter'
753753
and async_job.job_status = 0;
754+
INSERT IGNORE INTO `cloud`.`configuration` VALUES ("Advanced", 'DEFAULT', 'management-server', "vmware.vcenter.session.timeout", "1200", "VMware client timeout in seconds", "1200", NULL,NULL,0);
755+

vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ private static void trustAllHttpsCertificates() throws Exception {
109109
private VimPortType vimPort;
110110
private String serviceCookie;
111111
private final String SVC_INST_NAME = "ServiceInstance";
112+
private int vCenterSessionTimeout = 1200000; // Timeout in milliseconds
112113

113114
private boolean isConnected = false;
114115

@@ -132,8 +133,8 @@ public void connect(String url, String userName, String password) throws Excepti
132133
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
133134
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
134135

135-
ctxt.put("com.sun.xml.internal.ws.request.timeout", 1200000);
136-
ctxt.put("com.sun.xml.internal.ws.connect.timeout", 1200000);
136+
ctxt.put("com.sun.xml.internal.ws.request.timeout", vCenterSessionTimeout);
137+
ctxt.put("com.sun.xml.internal.ws.connect.timeout", vCenterSessionTimeout);
137138

138139
ServiceContent serviceContent = vimPort.retrieveServiceContent(SVC_INST_REF);
139140

@@ -616,4 +617,13 @@ public ManagedObjectReference getMoRefProp(ManagedObjectReference objMor, String
616617
}
617618
return propmor;
618619
}
620+
621+
public void setVcenterSessionTimeout(int vCenterSessionTimeout) {
622+
this.vCenterSessionTimeout = vCenterSessionTimeout;
623+
}
624+
625+
public int getVcenterSessionTimeout() {
626+
return this.vCenterSessionTimeout;
627+
}
628+
619629
}

vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public static VmwareContext create(String vCenterAddress, String vCenterUserName
4848
s_logger.debug("initialize VmwareContext. url: " + serviceUrl + ", username: " + vCenterUserName + ", password: " + StringUtils.getMaskedPasswordForDisplay(vCenterPassword));
4949

5050
VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++);
51+
vimClient.setVcenterSessionTimeout(1200000);
5152
vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword);
5253

5354
VmwareContext context = new VmwareContext(vimClient, vCenterAddress);

0 commit comments

Comments
 (0)