From b218c17a3b5208d7a397fdb349372351b0aa9215 Mon Sep 17 00:00:00 2001 From: yanjunli Date: Sun, 24 Sep 2017 01:25:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=8E=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E8=81=94=E9=80=9A=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/mycat/mycat2/ProxyStarter.java | 2 +- .../io/mycat/mycat2/beans/MySQLMetaBean.java | 4 ++-- .../java/io/mycat/mycat2/beans/MySQLRepBean.java | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/source/src/main/java/io/mycat/mycat2/ProxyStarter.java b/source/src/main/java/io/mycat/mycat2/ProxyStarter.java index 13ba29e..f08e56c 100644 --- a/source/src/main/java/io/mycat/mycat2/ProxyStarter.java +++ b/source/src/main/java/io/mycat/mycat2/ProxyStarter.java @@ -99,7 +99,7 @@ private void init(MycatConfig conf) { value.initMaster(); value.getMysqls().forEach(metaBean -> { try { - metaBean.init(value,ProxyRuntime.INSTANCE.maxdataSourceInitTime); + metaBean.init(value,ProxyRuntime.INSTANCE.maxdataSourceInitTime,value.getDataSourceInitStatus()); } catch (IOException e) { LOGGER.error("error to init metaBean: {}", metaBean.getHostName()); } diff --git a/source/src/main/java/io/mycat/mycat2/beans/MySQLMetaBean.java b/source/src/main/java/io/mycat/mycat2/beans/MySQLMetaBean.java index 8135370..0c7feac 100644 --- a/source/src/main/java/io/mycat/mycat2/beans/MySQLMetaBean.java +++ b/source/src/main/java/io/mycat/mycat2/beans/MySQLMetaBean.java @@ -74,12 +74,12 @@ public class MySQLMetaBean { /** charsetName 到 默认collationIndex 的映射 */ public final Map CHARSET_TO_INDEX = new HashMap<>(); - public boolean init(MySQLRepBean repBean,long maxwaitTime) throws IOException { + public boolean init(MySQLRepBean repBean,long maxwaitTime,int status) throws IOException { logger.info("init backend myqsl source ,create connections total " + minCon + " for " + hostName + " index :" + repBean.getWriteIndex()); this.repBean = repBean; - heartbeat = new MySQLHeartbeat(this,DBHeartbeat.INIT_STATUS); + heartbeat = new MySQLHeartbeat(this,status); ProxyRuntime runtime = ProxyRuntime.INSTANCE; MycatReactorThread[] reactorThreads = (MycatReactorThread[]) runtime.getReactorThreads(); int reactorSize = runtime.getNioReactorThreads(); diff --git a/source/src/main/java/io/mycat/mycat2/beans/MySQLRepBean.java b/source/src/main/java/io/mycat/mycat2/beans/MySQLRepBean.java index ce3631c..33b830c 100644 --- a/source/src/main/java/io/mycat/mycat2/beans/MySQLRepBean.java +++ b/source/src/main/java/io/mycat/mycat2/beans/MySQLRepBean.java @@ -35,8 +35,10 @@ import org.slf4j.LoggerFactory; import io.mycat.mycat2.MycatConfig; +import io.mycat.mycat2.beans.heartbeat.DBHeartbeat; import io.mycat.mysql.Alarms; import io.mycat.proxy.ProxyRuntime; +import io.mycat.proxy.man.MyCluster; /** * 表示一組MySQL Server复制集群,如主从或者多主 @@ -239,11 +241,11 @@ public void switchSource(int newIndex,long maxwaittime) { if (current != newIndex) { String reason = "switch datasource"; - + // init again MySQLMetaBean newWriteBean = mysqls.get(newIndex); newWriteBean.clearCons(reason); - newWriteBean.init(this,maxwaittime); + newWriteBean.init(this,maxwaittime,getDataSourceInitStatus()); // clear all connections MySQLMetaBean oldMetaBean = mysqls.get(current); @@ -268,6 +270,16 @@ public void switchSource(int newIndex,long maxwaittime) { } } + public int getDataSourceInitStatus(){ + int initstatus = DBHeartbeat.OK_STATUS; + MyCluster myCluster = ProxyRuntime.INSTANCE.getMyCLuster(); + + if(myCluster.getMyLeader()==myCluster.getMyNode()){ + initstatus = DBHeartbeat.INIT_STATUS; + } + return initstatus; + } + private String switchMessage(int current, int newIndex, String reason) { StringBuilder s = new StringBuilder(); s.append("[Host=").append(name).append(",result=[").append(current).append("->");