From f31040979873e5f251c2410ca4b268575b92aed2 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 10 Sep 2011 15:21:26 +0000 Subject: [PATCH] jmx enhancement & remove notEmpty.signal git-svn-id: http://code.alibabatech.com/svn/druid/trunk@716 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/filter/stat/StatFilter.java | 27 ++++++++++++------- .../druid/filter/stat/StatFilterMBean.java | 2 ++ .../alibaba/druid/pool/DruidDataSource.java | 1 - .../pool/TestIdle3_Concurrent_Starvation.java | 6 ++--- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 1185b2b2d5..db11b163de 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -21,6 +21,7 @@ import java.util.Date; import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicLong; import javax.management.JMException; import javax.management.openmbean.CompositeData; @@ -51,7 +52,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { public final static String ATTR_SQL = "stat.sql"; public final static String ATTR_UPDATE_COUNT = "stat.updteCount"; - public final static String ATTR_TRANSACTION = "stat.tx"; + public final static String ATTR_TRANSACTION = "stat.tx"; protected JdbcDataSourceStat dataSourceStat; @@ -63,6 +64,8 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { protected DataSourceProxy dataSource; + protected final AtomicLong resetCount = new AtomicLong(); + public boolean isConnectionStackTraceEnable() { return connectionStackTraceEnable; } @@ -77,6 +80,12 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { public void reset() { dataSourceStat.reset(); + + resetCount.incrementAndGet(); + } + + public long getResetCount() { + return resetCount.get(); } @Override @@ -93,24 +102,24 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { } this.dataSourceStat = stat; } - + @Override public void connection_setAutoCommit(FilterChain chain, ConnectionProxy connection, boolean autoCommit) throws SQLException { Map attributes = connection.getAttributes(); - + if (!autoCommit) { TransactionInfo transInfo = (TransactionInfo) attributes.get(ATTR_TRANSACTION); if (transInfo == null) { long transactionId = connection.getDirectDataSource().createTransactionId(); - transInfo = new TransactionInfo(transactionId); + transInfo = new TransactionInfo(transactionId); attributes.put(ATTR_TRANSACTION, transInfo); dataSourceStat.getConnectionStat().incrementConnectionCommitCount(); } } else { attributes.remove(ATTR_TRANSACTION); } - + chain.connection_setAutoCommit(connection, autoCommit); } @@ -176,7 +185,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { @Override public void connection_commit(FilterChain chain, ConnectionProxy connection) throws SQLException { super.connection_commit(chain, connection); - + handleEndTransaction(connection); connectStat.incrementConnectionCommitCount(); @@ -185,7 +194,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { private void handleEndTransaction(ConnectionProxy connection) { Map attributes = connection.getAttributes(); - + TransactionInfo transInfo = (TransactionInfo) attributes.remove(ATTR_TRANSACTION); if (transInfo != null) { transInfo.setEndTimeMillis(System.currentTimeMillis()); @@ -195,7 +204,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { @Override public void connection_rollback(FilterChain chain, ConnectionProxy connection) throws SQLException { super.connection_rollback(chain, connection); - + handleEndTransaction(connection); connectStat.incrementConnectionRollbackCount(); @@ -208,7 +217,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { public void connection_rollback(FilterChain chain, ConnectionProxy connection, Savepoint savepoint) throws SQLException { super.connection_rollback(chain, connection, savepoint); - + handleEndTransaction(connection); connectStat.incrementConnectionRollbackCount(); diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilterMBean.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilterMBean.java index 298fc674bb..e47b78f82f 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilterMBean.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilterMBean.java @@ -85,4 +85,6 @@ public interface StatFilterMBean { TabularData getSqlList() throws JMException; TabularData getConnectionList() throws JMException; + + long getResetCount(); } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index b1c3bc57cd..bfa1947ce2 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -730,7 +730,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat try { // 必须存在线程等待,才创建连接 if (poolingCount >= notEmptyWaitThreadCount) { - notEmptySignalCount++; empty.await(); continue; } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java index b6adf3ad9d..c9041493c0 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java @@ -25,8 +25,8 @@ public class TestIdle3_Concurrent_Starvation extends TestCase { dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriver(driver); dataSource.setInitialSize(1); - dataSource.setMaxActive(14); - dataSource.setMaxIdle(14); + dataSource.setMaxActive(1000); + dataSource.setMaxIdle(1000); dataSource.setMinIdle(1); dataSource.setMinEvictableIdleTimeMillis(300 * 1000); // 300 / 10 dataSource.setTimeBetweenEvictionRunsMillis(180 * 1000); // 180 / 10 @@ -62,7 +62,7 @@ public class TestIdle3_Concurrent_Starvation extends TestCase { } for (int i = 0; i < 1; ++i) { - final int threadCount = 5; + final int threadCount = 1000; concurrent(threadCount); }