CLOUDSTACK-3568: finalize logging in the refactored code on new vCenter API 
management facility


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

Branch: refs/heads/master
Commit: d361cb5282c2314da7e7131544585259b5b8ce7d
Parents: 0becde9
Author: Kelven Yang <[email protected]>
Authored: Mon Aug 12 18:26:05 2013 -0700
Committer: Kelven Yang <[email protected]>
Committed: Wed Sep 4 14:49:45 2013 -0700

----------------------------------------------------------------------
 .../hypervisor/vmware/util/VmwareContext.java   | 17 ++++++++++++
 .../vmware/util/VmwareContextPool.java          | 29 ++++++++++++++------
 2 files changed, 37 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d361cb52/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
----------------------------------------------------------------------
diff --git 
a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java 
b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
index 95553fd..5944582 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
@@ -68,6 +68,8 @@ public class VmwareContext {
 
        private VmwareContextPool _pool;
        private String _poolKey;
+       
+       private static volatile int s_outstandingCount = 0;
 
        static {
                try {
@@ -87,6 +89,8 @@ public class VmwareContext {
 
                _vimClient = client;
                _serverAddress = address;
+               
+               registerOutstandingContext();
        }
 
        public void registerStockObject(String name, Object obj) {
@@ -154,6 +158,18 @@ public class VmwareContext {
        public void idleCheck() throws Exception {
                getRootFolder();
        }
+       
+       public static int getOutstandingContextCount() {
+               return s_outstandingCount;
+       }
+       
+       public static void registerOutstandingContext() {
+               s_outstandingCount++;
+       }
+       
+       public static void unregisterOutstandingContext() {
+               s_outstandingCount--;
+       }
 
        public ManagedObjectReference getHostMorByPath(String inventoryPath) 
throws Exception {
                assert(inventoryPath != null);
@@ -614,6 +630,7 @@ public class VmwareContext {
                } catch(Exception e) {
                        s_logger.warn("Unexpected exception: ", e);
                }
+               unregisterOutstandingContext();
        }
 
        public static class TrustAllManager implements 
javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d361cb52/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
----------------------------------------------------------------------
diff --git 
a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java 
b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
index 3bac028..4647ab9 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
@@ -63,15 +63,17 @@ public class VmwareContextPool {
 
                        if(l.size() > 0) {
                                if(s_logger.isTraceEnabled())
-                                       s_logger.trace("Return a VmwareContext 
from the pool.");
+                                       s_logger.trace("Return a VmwareContext 
from the idle pool: " + poolKey + ". current pool size: " + l.size() + ", 
outstanding count: " + VmwareContext.getOutstandingContextCount());
                                
                                VmwareContext context = l.remove(0);
                                context.setPoolInfo(this, poolKey);
                                return context;
                        }
                        
-                       if(s_logger.isInfoEnabled())
-                               s_logger.info("No VmwareContext is available 
from the idle pool, create a new one");
+                       if(s_logger.isTraceEnabled())
+                               s_logger.trace("No VmwareContext is available 
from the idle pool: " + poolKey + ", create a new one and current outstanding 
count is: " + VmwareContext.getOutstandingContextCount());
+                       
+                       // TODO, we need to control the maximum number of 
outstanding VmwareContext object in the future
                        return null;
                }
        }
@@ -89,9 +91,13 @@ public class VmwareContextPool {
                        if(l.size() < _maxIdleQueueLength) {
                                context.clearStockObjects();
                                l.add(context);
+                               
+                               if(s_logger.isTraceEnabled())
+                                       s_logger.trace("Recycle VmwareContext 
into idle pool: " + context.getPoolKey() + ", current idle pool size: " 
+                                               + l.size() + ", outstanding 
count: " + VmwareContext.getOutstandingContextCount());
                        } else {
-                               if(s_logger.isInfoEnabled())
-                                       s_logger.info("VmwareContextPool queue 
exceeds limits, queue size: " + l.size());
+                               if(s_logger.isTraceEnabled())
+                                       s_logger.trace("VmwareContextPool queue 
exceeds limits, queue size: " + l.size());
                                context.close();
                        }
                }
@@ -99,11 +105,13 @@ public class VmwareContextPool {
        
        private void getIdleCheckContexts(List<VmwareContext> l, int batchSize) 
{
                synchronized(_pool) {
-                       for(List<VmwareContext> entryList : _pool.values()) {
-                               if(entryList != null) {
+                       for(Map.Entry<String, List<VmwareContext>> entry : 
_pool.entrySet()) {
+                               if(entry.getValue() != null) {
                                        int count = 0;
-                                       while(entryList.size() > 0 && count < 
batchSize) {
-                                               l.add(entryList.remove(0));
+                                       while(entry.getValue().size() > 0 && 
count < batchSize) {
+                                               VmwareContext context = 
entry.getValue().remove(0);
+                                               context.setPoolInfo(this, 
entry.getKey());
+                                               l.add(context);
                                                count++;
                                        }
                                }
@@ -132,6 +140,9 @@ public class VmwareContextPool {
                for(VmwareContext context : l) {
                        try {
                                context.idleCheck();
+                               
+                               if(s_logger.isTraceEnabled())
+                                       s_logger.trace("Recyle context after 
idle check");
                                returnContext(context);
                        } catch(Throwable e) {
                                s_logger.warn("Exception caught during 
VmwareContext idle check, close and discard the context", e);

Reply via email to