better thread names and log in validateNumerics() with poolName

pull/567/head
Nitin 9 years ago
parent f46fc1e9e5
commit ba09a68fe1

@ -761,6 +761,13 @@ public class HikariConfig implements HikariConfigMXBean
public void validate() public void validate()
{ {
if (poolName == null) {
poolName = "HikariPool-" + POOL_NUMBER.getAndIncrement();
}
else if (isRegisterMbeans && poolName.contains(":")) {
throw new IllegalArgumentException("poolName cannot contain ':' when used with JMX");
}
validateNumerics(); validateNumerics();
// treat empty property as null // treat empty property as null
@ -773,13 +780,6 @@ public class HikariConfig implements HikariConfigMXBean
driverClassName = getNullIfEmpty(driverClassName); driverClassName = getNullIfEmpty(driverClassName);
jdbcUrl = getNullIfEmpty(jdbcUrl); jdbcUrl = getNullIfEmpty(jdbcUrl);
if (poolName == null) {
poolName = "HikariPool-" + POOL_NUMBER.getAndIncrement();
}
else if (isRegisterMbeans && poolName.contains(":")) {
throw new IllegalArgumentException("poolName cannot contain ':' when used with JMX");
}
// Check Data Source Options // Check Data Source Options
if (dataSource != null) { if (dataSource != null) {
if (dataSourceClassName != null) { if (dataSourceClassName != null) {
@ -814,43 +814,43 @@ public class HikariConfig implements HikariConfigMXBean
private void validateNumerics() private void validateNumerics()
{ {
if (maxLifetime < 0) { if (maxLifetime < 0) {
LOGGER.error("maxLifetime cannot be negative."); LOGGER.error("{} - maxLifetime cannot be negative.", poolName);
throw new IllegalArgumentException("maxLifetime cannot be negative."); throw new IllegalArgumentException("maxLifetime cannot be negative.");
} }
else if (maxLifetime > 0 && maxLifetime < TimeUnit.SECONDS.toMillis(30)) { else if (maxLifetime > 0 && maxLifetime < TimeUnit.SECONDS.toMillis(30)) {
LOGGER.warn("maxLifetime is less than 30000ms, setting to default {}ms.", MAX_LIFETIME); LOGGER.warn("{} - maxLifetime is less than 30000ms, setting to default {}ms.", poolName, MAX_LIFETIME);
maxLifetime = MAX_LIFETIME; maxLifetime = MAX_LIFETIME;
} }
if (idleTimeout != 0 && idleTimeout < TimeUnit.SECONDS.toMillis(10)) { if (idleTimeout != 0 && idleTimeout < TimeUnit.SECONDS.toMillis(10)) {
LOGGER.warn("idleTimeout is less than 10000ms, setting to default {}ms.", IDLE_TIMEOUT); LOGGER.warn("{} - idleTimeout is less than 10000ms, setting to default {}ms.", poolName, IDLE_TIMEOUT);
idleTimeout = IDLE_TIMEOUT; idleTimeout = IDLE_TIMEOUT;
} }
if (idleTimeout + TimeUnit.SECONDS.toMillis(1) > maxLifetime && maxLifetime > 0) { if (idleTimeout + TimeUnit.SECONDS.toMillis(1) > maxLifetime && maxLifetime > 0) {
LOGGER.warn("idleTimeout is close to or more than maxLifetime, disabling it."); LOGGER.warn("{} - idleTimeout is close to or more than maxLifetime, disabling it.", poolName);
idleTimeout = 0; idleTimeout = 0;
} }
if (maxLifetime == 0 && idleTimeout == 0) { if (maxLifetime == 0 && idleTimeout == 0) {
LOGGER.warn("setting idleTimeout to {}ms.", IDLE_TIMEOUT); LOGGER.warn("{} - setting idleTimeout to {}ms.", poolName, IDLE_TIMEOUT);
idleTimeout = IDLE_TIMEOUT; idleTimeout = IDLE_TIMEOUT;
} }
if (leakDetectionThreshold > 0 && !unitTest) { if (leakDetectionThreshold > 0 && !unitTest) {
if (leakDetectionThreshold < TimeUnit.SECONDS.toMillis(2) || (leakDetectionThreshold > maxLifetime && maxLifetime > 0)) { if (leakDetectionThreshold < TimeUnit.SECONDS.toMillis(2) || (leakDetectionThreshold > maxLifetime && maxLifetime > 0)) {
LOGGER.warn("leakDetectionThreshold is less than 2000ms or more than maxLifetime, disabling it."); LOGGER.warn("{} - leakDetectionThreshold is less than 2000ms or more than maxLifetime, disabling it.", poolName);
leakDetectionThreshold = 0L; leakDetectionThreshold = 0L;
} }
} }
if (connectionTimeout != Integer.MAX_VALUE) { if (connectionTimeout != Integer.MAX_VALUE) {
if (validationTimeout > connectionTimeout) { if (validationTimeout > connectionTimeout) {
LOGGER.warn("validationTimeout should be less than connectionTimeout, setting validationTimeout to connectionTimeout."); LOGGER.warn("{} - validationTimeout should be less than connectionTimeout, setting validationTimeout to connectionTimeout.", poolName);
validationTimeout = connectionTimeout; validationTimeout = connectionTimeout;
} }
if (maxLifetime > 0 && connectionTimeout > maxLifetime) { if (maxLifetime > 0 && connectionTimeout > maxLifetime) {
LOGGER.warn("connectionTimeout should be less than maxLifetime, setting connectionTimeout to maxLifetime."); LOGGER.warn("{} - connectionTimeout should be less than maxLifetime, setting connectionTimeout to maxLifetime.", poolName);
connectionTimeout = maxLifetime; connectionTimeout = maxLifetime;
} }
} }

@ -116,11 +116,11 @@ public class HikariPool extends PoolBase implements HikariPoolMXBean, IBagStateL
checkFailFast(); checkFailFast();
ThreadFactory threadFactory = config.getThreadFactory(); ThreadFactory threadFactory = config.getThreadFactory();
this.addConnectionExecutor = createThreadPoolExecutor(config.getMaximumPoolSize(), "Hikari connection adder (" + poolName + ")", threadFactory, new ThreadPoolExecutor.DiscardPolicy()); this.addConnectionExecutor = createThreadPoolExecutor(config.getMaximumPoolSize(), poolName + " connection adder", threadFactory, new ThreadPoolExecutor.DiscardPolicy());
this.closeConnectionExecutor = createThreadPoolExecutor(1 + (config.getMaximumPoolSize() / 2), "Hikari connection closer (" + poolName + ")", threadFactory, new ThreadPoolExecutor.CallerRunsPolicy()); this.closeConnectionExecutor = createThreadPoolExecutor(1 + (config.getMaximumPoolSize() / 2), poolName + " connection closer", threadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
if (config.getScheduledExecutorService() == null) { if (config.getScheduledExecutorService() == null) {
threadFactory = threadFactory != null ? threadFactory : new DefaultThreadFactory("Hikari housekeeper (" + poolName + ")", true); threadFactory = threadFactory != null ? threadFactory : new DefaultThreadFactory(poolName + " housekeeper", true);
this.houseKeepingExecutorService = new ScheduledThreadPoolExecutor(1, threadFactory, new ThreadPoolExecutor.DiscardPolicy()); this.houseKeepingExecutorService = new ScheduledThreadPoolExecutor(1, threadFactory, new ThreadPoolExecutor.DiscardPolicy());
this.houseKeepingExecutorService.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); this.houseKeepingExecutorService.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
this.houseKeepingExecutorService.setRemoveOnCancelPolicy(true); this.houseKeepingExecutorService.setRemoveOnCancelPolicy(true);
@ -223,7 +223,7 @@ public class HikariPool extends PoolBase implements HikariPoolMXBean, IBagStateL
connectionBag.close(); connectionBag.close();
final ExecutorService assassinExecutor = createThreadPoolExecutor(config.getMaximumPoolSize(), "Hikari connection assassin (" + poolName + ")", final ExecutorService assassinExecutor = createThreadPoolExecutor(config.getMaximumPoolSize(), poolName + " connection assassinator",
config.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); config.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy());
try { try {
final long start = clockSource.currentTime(); final long start = clockSource.currentTime();

@ -485,7 +485,7 @@ abstract class PoolBase
} }
else { else {
ThreadFactory threadFactory = config.getThreadFactory(); ThreadFactory threadFactory = config.getThreadFactory();
threadFactory = threadFactory != null ? threadFactory : new DefaultThreadFactory("Hikari network timeout executor (" + poolName + ")", true); threadFactory = threadFactory != null ? threadFactory : new DefaultThreadFactory(poolName + " network timeout executor", true);
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(threadFactory); ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(threadFactory);
executor.setKeepAliveTime(15, TimeUnit.SECONDS); executor.setKeepAliveTime(15, TimeUnit.SECONDS);
executor.allowCoreThreadTimeOut(true); executor.allowCoreThreadTimeOut(true);

Loading…
Cancel
Save