/*
* Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software;Designed and Developed mainly by many Chinese
* opensource volunteers. you can redistribute it and/or modify it under the
* terms of the GNU General Public License version 2 only, as published by the
* Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Any questions about this component can be directed to it's project Web address
* https://code.google.com/p/opencloudb/.
*
*/
package io.mycat.server.config.node;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import io.mycat.backend.PhysicalDBPool;
/**
* Datahost is a group of DB servers which is synchronized with each other
*
* @author wuzhih
*/
public class DataHostConfig {
public static final int NOT_SWITCH_DS = -1;
public static final int DEFAULT_SWITCH_DS = 1;
public static final int SYN_STATUS_SWITCH_DS = 2;
private static final Pattern pattern = Pattern.compile("\\s*show\\s+slave\\s+status\\s*", Pattern.CASE_INSENSITIVE);
private String dbType;
private String dbDriver;
private int switchType;
private DBHostConfig[] writeHosts;
private Map<Integer, DBHostConfig[]> readHosts;
private String name;
private int maxCon = SystemConfig.DEFAULT_POOL_SIZE;
private int minCon = 10;
private int balance = PhysicalDBPool.BALANCE_NONE;
private int writeType = PhysicalDBPool.WRITE_ONLYONE_NODE;
private String heartbeatSQL;
private boolean isShowSlaveSql = false;
private String connectionInitSql;
private int slaveThreshold = -1;
private String filters = "mergeStat";
private long logTime = 300000;
private boolean tempReadHostAvailable = false; //如果写服务挂掉, 临时读服务是否继续可用
public DataHostConfig() {
super();
}
public DataHostConfig(String name, String dbType, String dbDriver,
DBHostConfig[] writeHosts, Map<Integer, DBHostConfig[]> readHosts, int switchType, int slaveThreshold, boolean tempReadHostAvailable) {
super();
this.name = name;
this.dbType = dbType;
this.dbDriver = dbDriver;
this.writeHosts = writeHosts;
this.readHosts = readHosts;
this.switchType = switchType;
this.slaveThreshold = slaveThreshold;
this.tempReadHostAvailable = tempReadHostAvailable;
}
public boolean isTempReadHostAvailable() {
return this.tempReadHostAvailable;
}
public int getSlaveThreshold() {
return slaveThreshold;
}
public void setSlaveThreshold(int slaveThreshold) {
this.slaveThreshold = slaveThreshold;
}
public int getSwitchType() {
return switchType;
}
public String getConnectionInitSql() {
return connectionInitSql;
}
public void setConnectionInitSql(String connectionInitSql) {
this.connectionInitSql = connectionInitSql;
}
public int getWriteType() {
return writeType;
}
public void setWriteType(int writeType) {
this.writeType = writeType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMaxCon() {
return maxCon;
}
public void setMaxCon(int maxCon) {
this.maxCon = maxCon;
}
public int getMinCon() {
return minCon;
}
public void setMinCon(int minCon) {
this.minCon = minCon;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public String getDbType() {
return dbType;
}
public String getDbDriver() {
return dbDriver;
}
public DBHostConfig[] getWriteHosts() {
return writeHosts;
}
public Map<Integer, DBHostConfig[]> getReadHosts() {
return readHosts;
}
public String getHeartbeatSQL() {
return heartbeatSQL;
}
public void setHeartbeatSQL(String heartbeatSQL) {
this.heartbeatSQL = heartbeatSQL;
Matcher matcher = pattern.matcher(heartbeatSQL);
if (matcher.find()) {
isShowSlaveSql = true;
}
}
public boolean isShowSlaveSql() {
return isShowSlaveSql;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
public long getLogTime() {
return logTime;
}
public void setLogTime(long logTime) {
this.logTime = logTime;
}
public void setDbType(String dbType) {
this.dbType = dbType;
}
public void setDbDriver(String dbDriver) {
this.dbDriver = dbDriver;
}
public void setSwitchType(int switchType) {
this.switchType = switchType;
}
public void setWriteHosts(DBHostConfig[] writeHosts) {
this.writeHosts = writeHosts;
}
public void setReadHosts(Map<Integer, DBHostConfig[]> readHosts) {
this.readHosts = readHosts;
}
public void setIsShowSlaveSql(boolean isShowSlaveSql) {
this.isShowSlaveSql = isShowSlaveSql;
}
}