mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user