jmx enhancement & remove notEmpty.signal

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@716 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-09-10 15:21:26 +00:00
parent 6622072d7f
commit f310409798
4 changed files with 23 additions and 13 deletions
@@ -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<String, Object> 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<String, Object> 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();
@@ -85,4 +85,6 @@ public interface StatFilterMBean {
TabularData getSqlList() throws JMException;
TabularData getConnectionList() throws JMException;
long getResetCount();
}
@@ -730,7 +730,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
try {
// 必须存在线程等待,才创建连接
if (poolingCount >= notEmptyWaitThreadCount) {
notEmptySignalCount++;
empty.await();
continue;
}
@@ -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);
}