From 8dc5d2d3077d7f75ab32dca5a6b4b101a7bad87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Mon, 27 May 2019 19:09:56 +0800 Subject: [PATCH] add more error info for DataSourceDisableException --- .../alibaba/druid/pool/DruidDataSource.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 7eb5184305..8e29afeb82 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -42,7 +42,6 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.concurrent.atomic.AtomicLongFieldUpdater; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -176,6 +175,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private static List autoFilters = null; private boolean loadSpifilterSkip = false; + private volatile DataSourceDisableException disableException = null; protected static final AtomicLongFieldUpdater recycleErrorCountUpdater = AtomicLongFieldUpdater.newUpdater(DruidDataSource.class, "recycleErrorCount"); @@ -1507,6 +1507,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (!enable) { connectErrorCountUpdater.incrementAndGet(this); + + if (disableException != null) { + throw disableException; + } + throw new DataSourceDisableException(); } @@ -2002,6 +2007,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat this.closed = true; this.closeTimeMillis = System.currentTimeMillis(); + disableException = new DataSourceDisableException(); + for (Filter filter : filters) { filter.destroy(); } @@ -2092,6 +2099,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (!enable) { connectErrorCountUpdater.incrementAndGet(this); + if (disableException != null) { + throw disableException; + } + throw new DataSourceDisableException(); } } @@ -2139,6 +2150,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (!enable) { connectErrorCountUpdater.incrementAndGet(this); + + if (disableException != null) { + throw disableException; + } + throw new DataSourceDisableException(); } } catch (InterruptedException ie) { @@ -2428,18 +2444,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private int errorCount = 0; private boolean initTask = false; - private long taskId; + private final long taskId; public CreateConnectionTask() { - init(); - } - - private void init() { taskId = createTaskIdSeedUpdater.getAndIncrement(DruidDataSource.this); } public CreateConnectionTask(boolean initTask) { - init(); + taskId = createTaskIdSeedUpdater.getAndIncrement(DruidDataSource.this); this.initTask = initTask; } @@ -2527,7 +2539,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return; } - this.init(); createSchedulerFuture = createScheduler.schedule(this, timeBetweenConnectErrorMillis, TimeUnit.MILLISECONDS); return; } @@ -2568,7 +2579,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return; } - this.init(); createSchedulerFuture = createScheduler.schedule(this, timeBetweenConnectErrorMillis, TimeUnit.MILLISECONDS); return; }