修正evict的bug

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@522 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-07-26 05:52:52 +00:00
parent 0e4d3d00d2
commit 0fdd23b6c6
7 changed files with 233 additions and 29 deletions
@@ -266,6 +266,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
JdbcUtils.close(realConnection);
continue;
}
poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis());
} else {
Connection realConnection = poolalbeConnection.getConnection();
if (realConnection.isClosed()) {
@@ -395,6 +396,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
}
return;
}
holder.setLastCheckTimeMillis(System.currentTimeMillis());
}
lock.lockInterruptibly();
@@ -480,7 +482,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
throw new NullPointerException();
}
e.setLastActiveMillis(System.currentTimeMillis());
e.setLastActiveTimeMillis(System.currentTimeMillis());
connections[count++] = e;
notEmpty.signal();
@@ -716,7 +718,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
continue FOR_0;
}
long idleMillis = System.currentTimeMillis() - connection.getLastActiveMillis();
long idleMillis = System.currentTimeMillis() - connection.getLastActiveTimeMillis();
if (idleMillis >= minEvictableIdleTimeMillis && count - evictList.size() > minIdle) {
evictList.add(connection);
} else {
@@ -735,6 +737,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
if (!testConnectionInternal(idleConnection.getConnection())) {
evictList.add(idleConnection);
} else {
idleConnection.setLastCheckTimeMillis(System.currentTimeMillis());
checkList.add(idleConnection);
}
}
@@ -751,7 +754,20 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
lock.unlock();
}
if (LOG.isDebugEnabled()) {
LOG.debug("checked " + size);
StringBuilder buf = new StringBuilder();
buf.append("checked ");
buf.append(size);
buf.append(", idleCount ");
buf.append(count);
buf.append(", [");
for (int i = 0; i < size; ++i) {
if (i != 0) {
buf.append(",");
}
buf.append(System.identityHashCode(checkList.get(i)));
}
buf.append("]");
LOG.debug(buf.toString());
}
}
@@ -761,6 +777,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
destroyCount++;
}
if (evictList.size() > 0) {
if (LOG.isDebugEnabled()) {
StringBuilder buf = new StringBuilder();
buf.append("evict ");
buf.append(evictList.size());
buf.append(", [");
for (int i = 0; i < size; ++i) {
if (i != 0) {
buf.append(",");
}
buf.append(System.identityHashCode(checkList.get(i)));
}
buf.append("]");
LOG.debug(buf.toString());
}
}
idleList.clear();
checkList.clear();
evictList.clear();