Updated Branches:
  refs/heads/4.3 041089afe -> f15c99776

CLOUDSTACK-5069. Added global config 'vmware.vcenter.session.timeout' to make 
the vCenter session timeout value configurable.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f15c9977
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f15c9977
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f15c9977

Branch: refs/heads/4.3
Commit: f15c9977690f8916543c2c066ee49cb37b34c730
Parents: 041089a
Author: Likitha Shetty <likitha.she...@citrix.com>
Authored: Mon Nov 18 10:24:26 2013 +0530
Committer: Likitha Shetty <likitha.she...@citrix.com>
Committed: Wed Nov 20 16:02:50 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/hypervisor/guru/VMwareGuru.java     |  1 +
 .../hypervisor/vmware/manager/VmwareManager.java      |  2 ++
 .../hypervisor/vmware/manager/VmwareManagerImpl.java  |  9 +++++++++
 .../vmware/resource/VmwareContextFactory.java         |  6 ++++--
 .../VmwareSecondaryStorageContextFactory.java         | 11 ++++++++++-
 .../VmwareSecondaryStorageResourceHandler.java        |  6 +++++-
 server/src/com/cloud/configuration/Config.java        |  1 +
 setup/db/db/schema-421to430.sql                       |  2 ++
 .../cloud/hypervisor/vmware/util/VmwareClient.java    | 14 ++++++++++++--
 .../vmware/mo/TestVmwareContextFactory.java           |  1 +
 10 files changed, 47 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
index 76ee59b..eb3cb6b 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
@@ -368,6 +368,7 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru {
             _cmdExecLogDao.persist(execLog);
             cmd.setContextParam("execid", String.valueOf(execLog.getId()));
                cmd.setContextParam("noderuninfo", String.format("%d-%d", 
_clusterMgr.getManagementNodeId(), _clusterMgr.getCurrentRunId()));
+            cmd.setContextParam("vCenterSessionTimeout", 
String.valueOf(_vmwareMgr.getVcenterSessionTimeout()));
 
             if(cmd instanceof BackupSnapshotCommand ||
                     cmd instanceof CreatePrivateTemplateFromVolumeCommand ||

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java
----------------------------------------------------------------------
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 6c67599..bc0c9a4 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);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
----------------------------------------------------------------------
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 9af0aa0..d306b74 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 = 1200000; // 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()),
 1200) * 1000;
+        s_logger.info("VmwareManagerImpl config - 
vmware.vcenter.session.timeout: " + _vCenterSessionTimeout);
+
         _reserveCpu = _configDao.getValue(Config.VmwareReserveCpu.key());
         if(_reserveCpu == null || _reserveCpu.isEmpty()) {
             _reserveCpu = "false";
@@ -986,6 +990,11 @@ public class VmwareManagerImpl extends ManagerBase 
implements VmwareManager, Vmw
     }
 
     @Override
+    public int getVcenterSessionTimeout() {
+        return _vCenterSessionTimeout;
+    }
+
+    @Override
     public List<Class<?>> getCommands() {
         List<Class<?>> cmdList = new ArrayList<Class<?>>();
         cmdList.add(AddVmwareDcCmd.class);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java
----------------------------------------------------------------------
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 3079998..6d959a3 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);
@@ -83,13 +84,14 @@ public class VmwareContextFactory {
                if(context == null) {
                        context = create(vCenterAddress, vCenterUserName, 
vCenterPassword);
                } else {
-                       if(!context.validate()) {
+            // Validate current context and verify if vCenter session timeout 
value of the context matches the timeout value set by Admin
+            if(!context.validate() || 
(context.getVimClient().getVcenterSessionTimeout() != 
s_vmwareMgr.getVcenterSessionTimeout())) {
                                s_logger.info("Validation of the context faild. 
dispose and create a new one");
                                context.close();
                                context = create(vCenterAddress, 
vCenterUserName, vCenterPassword);
                        }
                }
-               
+       
                if(context != null) {
                        
context.registerStockObject(VmwareManager.CONTEXT_STOCK_NAME, s_vmwareMgr);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java
----------------------------------------------------------------------
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 ac8b294..e2f57df 100644
--- 
a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java
@@ -31,6 +31,8 @@ public class VmwareSecondaryStorageContextFactory {
 
        private static VmwareContextPool s_pool;
 
+    public static int s_vCenterSessionTimeout = 1200000; // Timeout in 
milliseconds
+
        public static void initFactoryEnvironment() {
                System.setProperty("axis.socketSecureFactory", 
"org.apache.axis.components.net.SunFakeTrustSocketFactory");
                s_pool = new VmwareContextPool();
@@ -43,6 +45,7 @@ public class VmwareSecondaryStorageContextFactory {
 
                String serviceUrl = "https://"; + vCenterAddress + 
"/sdk/vimService";
                VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" 
+ s_seq++);
+        vimClient.setVcenterSessionTimeout(s_vCenterSessionTimeout);
                vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword);
                VmwareContext context = new VmwareContext(vimClient, 
vCenterAddress);
                assert(context != null);
@@ -58,7 +61,8 @@ public class VmwareSecondaryStorageContextFactory {
                if(context == null) {
                        context = create(vCenterAddress, vCenterUserName, 
vCenterPassword);
                } else {
-                       if(!context.validate()) {
+            // Validate current context and verify if vCenter session timeout 
value of the context matches the timeout value set by Admin
+            if(!context.validate() || 
(context.getVimClient().getVcenterSessionTimeout() != s_vCenterSessionTimeout)) 
{
                                s_logger.info("Validation of the context faild. 
dispose and create a new one");
                                context.close();
                                context = create(vCenterAddress, 
vCenterUserName, vCenterPassword);
@@ -76,4 +80,9 @@ public class VmwareSecondaryStorageContextFactory {
        public static void invalidate(VmwareContext context) {
                context.close();
        }
+
+     public static void setVcenterSessionTimeout(int timeout) {
+         s_vCenterSessionTimeout = timeout;
+     }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
 
b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
index 81f7bd9..2e6c280 100644
--- 
a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
@@ -45,6 +45,7 @@ import 
com.cloud.hypervisor.vmware.mo.VmwareHypervisorHostNetworkSummary;
 import com.cloud.hypervisor.vmware.util.VmwareContext;
 import com.cloud.hypervisor.vmware.util.VmwareHelper;
 import com.cloud.serializer.GsonHelper;
+import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.StringUtils;
 import com.google.gson.Gson;
@@ -206,6 +207,8 @@ public class VmwareSecondaryStorageResourceHandler 
implements SecondaryStorageRe
             return null;
         }
 
+        int vCenterSessionTimeout = 
NumbersUtil.parseInt(cmd.getContextParam("vCenterSessionTimeout"), 1200000);
+
         try {
             _resource.ensureOutgoingRuleForAddress(vCenterAddress);
             
@@ -213,9 +216,10 @@ public class VmwareSecondaryStorageResourceHandler 
implements SecondaryStorageRe
                if(context == null) {
                        s_logger.info("Open new VmwareContext. vCenter: " + 
vCenterAddress + ", user: " + username 
                                + ", password: " + 
StringUtils.getMaskedPasswordForDisplay(password));
+                
VmwareSecondaryStorageContextFactory.setVcenterSessionTimeout(vCenterSessionTimeout);
                 context = 
VmwareSecondaryStorageContextFactory.getContext(vCenterAddress, username, 
password);
                }
-               
+
             if (context != null) {
                 context.registerStockObject("serviceconsole", 
cmd.getContextParam("serviceconsole"));
                 context.registerStockObject("manageportgroup", 
cmd.getContextParam("manageportgroup"));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java 
b/server/src/com/cloud/configuration/Config.java
index 93a4606..5bb135a 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -263,6 +263,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", "1200", "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),

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql
index 2692640..40b0c82 100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@ -742,3 +742,5 @@ CREATE VIEW `cloud`.`domain_router_view` AS
         `cloud`.`async_job` ON async_job.instance_id = vm_instance.id
             and async_job.instance_type = 'DomainRouter'
             and async_job.job_status = 0;
+INSERT IGNORE INTO `cloud`.`configuration` VALUES ("Advanced", 'DEFAULT', 
'management-server', "vmware.vcenter.session.timeout", "1200", "VMware client 
timeout in seconds", "1200", NULL,NULL,0);
+

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java
----------------------------------------------------------------------
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 13172fb..277b105 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 = 1200000; // 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", 1200000);
-        ctxt.put("com.sun.xml.internal.ws.connect.timeout", 1200000);
+        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,13 @@ public class VmwareClient {
        }
        return propmor;
     }
+
+    public void setVcenterSessionTimeout(int vCenterSessionTimeout) {
+        this.vCenterSessionTimeout = vCenterSessionTimeout;
+    }
+
+    public int getVcenterSessionTimeout() {
+        return this.vCenterSessionTimeout;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f15c9977/vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java
----------------------------------------------------------------------
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 c0bd562..5d00c2a 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(1200000);
                vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword);
 
                VmwareContext context = new VmwareContext(vimClient, 
vCenterAddress);

Reply via email to