bug fixed for testWhileIdle.

This commit is contained in:
wenshao
2017-11-02 16:36:01 +08:00
parent f13fc91360
commit a9c31ecdc2
3 changed files with 22 additions and 12 deletions
@@ -226,7 +226,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
protected volatile long lastCreateStartTimeMillis;
protected boolean isOracle = false;
protected boolean isMySql = false;
protected boolean useOracleImplicitCache = true;
protected ReentrantLock lock;
@@ -1354,18 +1354,20 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
holder.lastValidTimeMillis = currentTimeMillis;
}
if (valid && JdbcConstants.MYSQL_DRIVER.equals(driverClass)) { // unexcepted branch
if (valid && isMySql) { // unexcepted branch
long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);
long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;
if (lastPacketReceivedTimeMs > 0 //
&& mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
discardConnection(conn);
String errorMsg = "discard long time none received connection. "
+ ", jdbcUrl : " + jdbcUrl
+ ", jdbcUrl : " + jdbcUrl
+ ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis;
LOG.error(errorMsg);
return false;
if (lastPacketReceivedTimeMs > 0) {
long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;
if (lastPacketReceivedTimeMs > 0 //
&& mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
discardConnection(conn);
String errorMsg = "discard long time none received connection. "
+ ", jdbcUrl : " + jdbcUrl
+ ", jdbcUrl : " + jdbcUrl
+ ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis;
LOG.error(errorMsg);
return false;
}
}
}
@@ -1082,6 +1082,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
oracleValidationQueryCheck();
} else if (JdbcUtils.DB2.equals(dbType)) {
db2ValidationQueryCheck();
} else if (JdbcUtils.MYSQL.equals(this.dbType)
|| JdbcUtils.MYSQL_DRIVER_6.equals(this.dbType)) {
isMySql = true;
}
}
@@ -1182,6 +1185,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
if (realDriverClassName.equals(JdbcConstants.MYSQL_DRIVER) //
|| realDriverClassName.equals(JdbcConstants.MYSQL_DRIVER_6)) {
this.exceptionSorter = new MySqlExceptionSorter();
this.isMySql = true;
} else if (realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER)
|| realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER2)) {
this.exceptionSorter = new OracleExceptionSorter();
@@ -293,6 +293,10 @@ public class MySqlUtils {
try {
Object connImpl = conn.unwrap(class_connectionImpl);
if (connImpl == null) {
return -1;
}
Object mysqlio = method_getIO.invoke(connImpl);
Long ms = (Long) method_getLastPacketReceivedTimeMs.invoke(mysqlio);
return ms.longValue();