From 2a0792df08314bb564f2ea4a2b6f8ec371800e10 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 21 Dec 2011 14:42:16 +0800 Subject: [PATCH] ha --- .../alibaba/druid/pool/ha/HADataSource.java | 4 ++++ .../druid/pool/ha/MultiDataSource.java | 23 +++++++++++++++---- .../druid/pool/ha/MultiDataSourceMBean.java | 6 +++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java index 5ed4f01f80..9a06e01470 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java @@ -97,6 +97,8 @@ public class HADataSource extends MultiDataSource implements HADataSourceMBean, } master.setEnable(value); + + this.computeTotalWeight(); } public String getMasterUrl() { @@ -153,6 +155,8 @@ public class HADataSource extends MultiDataSource implements HADataSourceMBean, } slave.setEnable(value); + + this.computeTotalWeight(); } public void switchMasterSlave() { diff --git a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java index c5317675dc..f4b45234bf 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java @@ -173,7 +173,7 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi } public boolean startFailureDetectScheduleTask() { - if (failureDetectFuture != null) { + if (failureDetectFuture == null) { failureDetectFuture = scheduler.scheduleAtFixedRate(new FailureDetectTask(), failureDetectPeriodMillis, failureDetectPeriodMillis, TimeUnit.MILLISECONDS); return true; @@ -224,6 +224,8 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi if (changeCount != 0) { computeTotalWeight(); } + + failureDetectCount.incrementAndGet(); } protected ScheduledExecutorService getScheduler() { @@ -340,7 +342,7 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi public void handleNotAwailableDatasource(DataSourceHolder dataSourceHolder) { } - + public long getRetryGetConnectionCount() { return retryGetConnectionCount.get(); } @@ -406,6 +408,14 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi return failureDetectCount.get(); } + public long getFailureDetectPeriodMillis() { + return failureDetectPeriodMillis; + } + + public long getConfigLoadPeriodMillis() { + return configLoadPeriodMillis; + } + class ConfigLoadTask implements Runnable { @Override @@ -414,7 +424,7 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi try { configLoadCount.incrementAndGet(); configLoader.load(); - } catch (SQLException e) { + } catch (Exception e) { LOG.error("config load error", e); } } @@ -425,8 +435,11 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi @Override public void run() { - failureDetectCount.incrementAndGet(); - failureDetect(); + try { + failureDetect(); + } catch (Exception ex) { + LOG.error("failure detect error", ex); + } } } diff --git a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java index 30a4659010..0e99921f01 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java @@ -23,4 +23,10 @@ public interface MultiDataSourceMBean { long getRetryGetConnectionCount(); long getBusySkipCount(); + + int getTotalWeight(); + + long getFailureDetectPeriodMillis(); + + long getConfigLoadPeriodMillis(); }