[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