[teiid-commits] teiid SVN: r952 - in trunk/engine/src: test/java/org/teiid/dqp/internal/pooling/connector and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Fri May 15 14:09:13 EDT 2009


Author: vhalbert at redhat.com
Date: 2009-05-15 14:09:13 -0400 (Fri, 15 May 2009)
New Revision: 952

Modified:
   trunk/engine/src/main/java/org/teiid/dqp/internal/pooling/connector/ConnectionPool.java
   trunk/engine/src/test/java/org/teiid/dqp/internal/pooling/connector/TestConnectionPool.java
Log:
Teiid-580 - adding support for monitoring connector connection pools - this change adds the logic to track the following:

-  totalConnections (already there)
-  totalConnectionsCreated
-  totalConnectionsDestroyed
-  totalConnectionsInUse
-  totalConnectionsWaiting

including updates to testcases

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/pooling/connector/ConnectionPool.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/pooling/connector/ConnectionPool.java	2009-05-15 17:25:24 UTC (rev 951)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/pooling/connector/ConnectionPool.java	2009-05-15 18:09:13 UTC (rev 952)
@@ -123,7 +123,23 @@
     
     private Semaphore poolSemaphore;
 
+    /**
+     * Total number of connections that are currently in the system (in use or waiting)
+     */
     private volatile int totalConnectionCount;
+    /**
+     * Total number of connections that have been created since the inception of this pool
+     */
+    private volatile int totalCreatedConnections;
+    /**
+     * Total number of connections that have been destroyed since the inception of this pool
+     */
+    private volatile int totalDestroyedConnections;
+    
+    /**
+     * The number of connections currently in use by a client
+     */
+    private volatile int totalConnectionsInUse;
 
     private volatile boolean shuttingDownPool;
 
@@ -249,6 +265,7 @@
 	                        LogManager.logDetail(CTX_CONNECTOR,  new Object[] {"Existing connection leased for", id}); //$NON-NLS-1$
 	                        connLists.used.addLast(conn);
 	                        success = true;
+	                        this.totalConnectionsInUse++;
 	                        return conn;
 						} catch (ConnectorException e) {
 							LogManager.logDetail(CTX_CONNECTOR,  new Object[] {"Existing connection failed to have identity updated", id}); //$NON-NLS-1$
@@ -270,7 +287,7 @@
             }
             
             updateStateWithNewConnection(id, connection, idSize);
-
+            this.totalConnectionsInUse++;
             success = true;
             return connection;
         } catch (InterruptedException err) {
@@ -295,6 +312,7 @@
         synchronized (this.lock) {
             this.reverseIdConnections.put(connection, id);
             this.totalConnectionCount++;
+            this.totalCreatedConnections++;
             
             if (this.totalConnectionCount > this.maxConnections) {
                 ids = new ArrayList(this.idConnections.values());
@@ -357,6 +375,7 @@
         }
         
         synchronized (connLists) {
+        	totalConnectionsInUse--;
             //release it only if there is one.
             //If the same connection is to be released twice, just ignore
             if ( connLists.used.remove(connection)) {
@@ -428,6 +447,7 @@
     private void closeSourceConnection(ConnectionWrapper connection, ConnectorIdentity id) {
     	synchronized (this.lock) {
             this.totalConnectionCount--;
+            this.totalDestroyedConnections++;
             this.reverseIdConnections.remove(connection);
         }
     	try {
@@ -475,9 +495,25 @@
         return Collections.emptyList();
     }
 
-    //for testing purpose
+    
     int getTotalConnectionCount() {
         return this.totalConnectionCount;
     }
+    
+    int getTotalCreatedConnectionCount() {
+    	return this.totalCreatedConnections;
+    }
+    
+    int getTotalDestroyedConnectionCount() {
+    	return this.totalDestroyedConnections;
+    }
+    
+    int getNumberOfConnectionsInUse() {
+    	return this.totalConnectionsInUse;
+    }
+    
+    int getNumberOfConnectinsWaiting() {
+    	return this.totalConnectionCount - this.totalConnectionsInUse;
+    }
 
 }
\ No newline at end of file

Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/pooling/connector/TestConnectionPool.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/pooling/connector/TestConnectionPool.java	2009-05-15 17:25:24 UTC (rev 951)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/pooling/connector/TestConnectionPool.java	2009-05-15 18:09:13 UTC (rev 952)
@@ -101,10 +101,28 @@
         ConnectionWrapper conn1 = singleIDPool.obtain(context);
         ConnectionWrapper conn2 = singleIDPool.obtain(context);
         ConnectionWrapper conn3 = singleIDPool.obtain(context);
-        ConnectionWrapper conn4 = singleIDPool.obtain(context);         
+        ConnectionWrapper conn4 = singleIDPool.obtain(context);   
+        
+        assertEquals(4, singleIDPool.getTotalCreatedConnectionCount());
+        assertEquals(4, singleIDPool.getTotalConnectionCount());
+        assertEquals(4, singleIDPool.getNumberOfConnectionsInUse());
+        assertEquals(0, singleIDPool.getNumberOfConnectinsWaiting());
+        assertEquals(0, singleIDPool.getTotalDestroyedConnectionCount());
+
+     
+
+        
         singleIDPool.release(conn2, false);
         singleIDPool.release(conn4, true);
         
+        // only 1 has been closed/destroyed  #4
+        assertEquals(3, singleIDPool.getTotalConnectionCount());
+        assertEquals(1, singleIDPool.getTotalDestroyedConnectionCount());
+        assertEquals(1, singleIDPool.getNumberOfConnectinsWaiting());
+        assertEquals(4, singleIDPool.getTotalCreatedConnectionCount());
+        assertEquals(2, singleIDPool.getNumberOfConnectionsInUse());
+
+        
         List unusedConns = singleIDPool.getUnusedConnections(conn1);
         assertEquals(1, unusedConns.size());
         assertTrue(unusedConns.contains(conn2));
@@ -112,7 +130,7 @@
         assertEquals(2, usedConns.size());
         assertTrue(usedConns.contains(conn1));
         assertTrue(usedConns.contains(conn3));    
-        assertEquals(3, singleIDPool.getTotalConnectionCount());        
+        assertEquals(3, singleIDPool.getTotalConnectionCount());  
     }
 
     @Test public void testMaxConnectionTest() throws Exception {
@@ -223,10 +241,27 @@
         userIDPool.obtain(context1);
         ConnectionWrapper conn2 = userIDPool.obtain(context1);
         ConnectionWrapper conn3 = userIDPool.obtain(context2);
-        ConnectionWrapper conn4 = userIDPool.obtain(context2);         
+        ConnectionWrapper conn4 = userIDPool.obtain(context2);      
+        
+        assertEquals(4, userIDPool.getTotalCreatedConnectionCount());
+        assertEquals(4, userIDPool.getTotalConnectionCount());
+        assertEquals(4, userIDPool.getNumberOfConnectionsInUse());
+        assertEquals(0, userIDPool.getNumberOfConnectinsWaiting());
+        assertEquals(0, userIDPool.getTotalDestroyedConnectionCount());
+        
+        
+        
         userIDPool.release(conn2, false);
         userIDPool.release(conn4, true);
         
+        // only 1 has been closed/destroyed  #4
+        assertEquals(3, userIDPool.getTotalConnectionCount());
+        assertEquals(1, userIDPool.getTotalDestroyedConnectionCount());
+        assertEquals(1, userIDPool.getNumberOfConnectinsWaiting());
+        assertEquals(4, userIDPool.getTotalCreatedConnectionCount());
+        assertEquals(2, userIDPool.getNumberOfConnectionsInUse());
+        
+        
         List unusedConns = userIDPool.getUnusedConnections(conn2);
         assertEquals(1, unusedConns.size());
         assertTrue(unusedConns.contains(conn2));




More information about the teiid-commits mailing list