From 9d2521fb5b317789525e86409ebfb8f5196191fc Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 30 Aug 2011 07:36:59 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=A4=B1=E6=95=88=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=8D=A0=E7=94=A8activeCount=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@542 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 3 ++ .../com/alibaba/druid/bvt/pool/TestIdle.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 40f71ab30f..3eb9e2b30e 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -266,6 +266,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat Connection realConnection = poolalbeConnection.getConnection(); JdbcUtils.close(realConnection); + this.decrementActiveCountWithLock(); continue; } poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis()); @@ -273,6 +274,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat Connection realConnection = poolalbeConnection.getConnection(); if (realConnection.isClosed()) { JdbcUtils.close(realConnection); + this.decrementActiveCountWithLock(); continue; } @@ -286,6 +288,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } JdbcUtils.close(realConnection); + this.decrementActiveCountWithLock(); continue; } poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis()); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java index fc7696070e..4feec39b3b 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java @@ -31,9 +31,11 @@ public class TestIdle extends TestCase { Connection conn = dataSource.getConnection(); Assert.assertEquals(dataSource.getInitialSize(), driver.getConnections().size()); + Assert.assertEquals(1, dataSource.getActiveCount()); conn.close(); Assert.assertEquals(dataSource.getInitialSize(), driver.getConnections().size()); + Assert.assertEquals(0, dataSource.getActiveCount()); } { @@ -41,11 +43,14 @@ public class TestIdle extends TestCase { Connection[] connections = new Connection[4]; for (int i = 0; i < count; ++i) { connections[i] = dataSource.getConnection(); + Assert.assertEquals(i + 1, dataSource.getActiveCount()); } Assert.assertEquals(4, driver.getConnections().size()); for (int i = 0; i < count; ++i) { connections[i].close(); + Assert.assertEquals(count - i - 1, dataSource.getActiveCount()); } + Assert.assertEquals(0, dataSource.getActiveCount()); Assert.assertEquals(4, driver.getConnections().size()); Thread.sleep(dataSource.getMinEvictableIdleTimeMillis() * 2); @@ -62,10 +67,33 @@ public class TestIdle extends TestCase { Assert.assertEquals(1, dataSource.getPoolingCount()); { Connection conn = dataSource.getConnection(); + Assert.assertEquals(1, dataSource.getActiveCount()); Assert.assertEquals(dataSource.getMinIdle(), driver.getConnections().size()); conn.close(); Assert.assertEquals(dataSource.getMinIdle(), driver.getConnections().size()); + Assert.assertEquals(0, dataSource.getActiveCount()); } + + { + int count = 4; + Connection[] connections = new Connection[4]; + for (int i = 0; i < count; ++i) { + connections[i] = dataSource.getConnection(); + Assert.assertEquals(i + 1, dataSource.getActiveCount()); + } + Assert.assertEquals(4, driver.getConnections().size()); + for (int i = 0; i < count; ++i) { + connections[i].close(); + Assert.assertEquals(count - i - 1, dataSource.getActiveCount()); + } + Assert.assertEquals(4, driver.getConnections().size()); + Assert.assertEquals(0, dataSource.getActiveCount()); + + dataSource.shrink(); + Assert.assertEquals(0, dataSource.getActiveCount()); + Assert.assertEquals(dataSource.getMinIdle(), driver.getConnections().size()); + } + dataSource.close(); }