Based on input from other developers, we can be sure that currentTimeMillis() will never retrograde (at the resolution the housekeeper runs).

2.3.0
Brett Wooldridge 10 years ago
parent e9dc9608c9
commit f7aa730e86

@ -234,8 +234,6 @@ public final class HikariPool extends BaseHikariPool
*/
private class HouseKeeper implements Runnable
{
private long past;
@Override
public void run()
{
@ -246,19 +244,13 @@ public final class HikariPool extends BaseHikariPool
final long now = System.currentTimeMillis();
final long idleTimeout = configuration.getIdleTimeout();
if (now < past) { // handles the aberrant case of a computer clock rolling backward
past = now;
softEvictConnections();
}
else {
for (PoolBagEntry bagEntry : connectionBag.values(STATE_NOT_IN_USE)) {
if (connectionBag.reserve(bagEntry)) {
if (bagEntry.evicted || (idleTimeout > 0L && now > bagEntry.lastAccess + idleTimeout)) {
closeConnection(bagEntry);
}
else {
connectionBag.unreserve(bagEntry);
}
for (PoolBagEntry bagEntry : connectionBag.values(STATE_NOT_IN_USE)) {
if (connectionBag.reserve(bagEntry)) {
if (bagEntry.evicted || (idleTimeout > 0L && now > bagEntry.lastAccess + idleTimeout)) {
closeConnection(bagEntry);
}
else {
connectionBag.unreserve(bagEntry);
}
}
}

@ -211,8 +211,6 @@ public final class HikariPool extends BaseHikariPool
*/
private class HouseKeeper implements Runnable
{
private long past;
@Override
public void run()
{
@ -223,20 +221,14 @@ public final class HikariPool extends BaseHikariPool
final long now = System.currentTimeMillis();
final long idleTimeout = configuration.getIdleTimeout();
if (now < past) { // handles the aberrant case of a computer clock rolling backward
past = now;
softEvictConnections();
}
else {
connectionBag.values(STATE_NOT_IN_USE).stream().filter(p -> connectionBag.reserve(p)).forEach(bagEntry -> {
if (bagEntry.evicted || (idleTimeout > 0L && now > bagEntry.lastAccess + idleTimeout)) {
closeConnection(bagEntry);
}
else {
connectionBag.unreserve(bagEntry);
}
});
}
connectionBag.values(STATE_NOT_IN_USE).stream().filter(p -> connectionBag.reserve(p)).forEach(bagEntry -> {
if (bagEntry.evicted || (idleTimeout > 0L && now > bagEntry.lastAccess + idleTimeout)) {
closeConnection(bagEntry);
}
else {
connectionBag.unreserve(bagEntry);
}
});
logPoolState("After cleanup ");

Loading…
Cancel
Save