/* * 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 io.mycat.server.Isolations; import java.io.File; import java.io.IOException; /** * 系统基础配置项 * * @author mycat */ public final class SystemConfig { public static final String SYS_HOME = "MYCAT_HOME"; private static final int DEFAULT_PORT = 8066; private static final int DEFAULT_MANAGER_PORT = 9066; private static final String DEFAULT_CHARSET = "utf8"; private static final String DEFAULT_SQL_PARSER = "fdbparser";// druidparser private static final int DEFAULT_BUFFER_CHUNK_SIZE = 4096; private int processorBufferLocalPercent; private static final int DEFAULT_PROCESSORS = Runtime.getRuntime() .availableProcessors(); private int frontSocketSoRcvbuf = 1024 * 1024; private int frontSocketSoSndbuf = 4 * 1024 * 1024; private int backSocketSoRcvbuf = 4 * 1024 * 1024;// mysql 5.6 // net_buffer_length // defaut 4M private int backSocketSoSndbuf = 1024 * 1024; private int frontSocketNoDelay = 1; // 0=false private int backSocketNoDelay = 1; // 1=true public static final int DEFAULT_POOL_SIZE = 128;// 保持后端数据通道的默认最大值 public static final long DEFAULT_IDLE_TIMEOUT = 30 * 60 * 1000L; private static final long DEFAULT_PROCESSOR_CHECK_PERIOD = 1 * 1000L; private static final long DEFAULT_DATANODE_IDLE_CHECK_PERIOD = 5 * 60 * 1000L; private static final long DEFAULT_DATANODE_HEARTBEAT_PERIOD = 10 * 1000L; private static final long DEFAULT_CLUSTER_HEARTBEAT_PERIOD = 5 * 1000L; private static final long DEFAULT_CLUSTER_HEARTBEAT_TIMEOUT = 10 * 1000L; private static final int DEFAULT_CLUSTER_HEARTBEAT_RETRY = 10; private static final int DEFAULT_MAX_LIMIT = 100; private static final String DEFAULT_CLUSTER_HEARTBEAT_USER = "_HEARTBEAT_USER_"; private static final String DEFAULT_CLUSTER_HEARTBEAT_PASS = "_HEARTBEAT_PASS_"; private static final int DEFAULT_PARSER_COMMENT_VERSION = 50148; private static final int DEFAULT_SQL_RECORD_COUNT = 10; // 全局表一致性检测任务,默认24小时调度一次 private static final long DEFAULT_GLOBAL_TABLE_CHECK_PERIOD = 24 * 60 * 60 * 1000L; private boolean globalTableCheckSwitchOn = true; // 全局表一致性检查开关 private int maxStringLiteralLength = 65535; private int frontWriteQueueSize = 2048; private String bindIp = "0.0.0.0"; private int serverPort; private int managerPort; private String charset; private int processors; private int processorExecutor; private int timerExecutor; private int managerExecutor; private long idleTimeout; private int catletClassCheckSeconds = 60; // sql execute timeout (second) private long sqlExecuteTimeout = 300; private long processorCheckPeriod; private long dataNodeIdleCheckPeriod; private long dataNodeHeartbeatPeriod; private String clusterHeartbeatUser; private String clusterHeartbeatPass; private long clusterHeartbeatPeriod; private long glableTableCheckPeriod; private long clusterHeartbeatTimeout; private int clusterHeartbeatRetry; private int txIsolation; private int parserCommentVersion; private int sqlRecordCount; private long processorBufferPool; private int processorBufferChunk; private int defaultMaxLimit = DEFAULT_MAX_LIMIT; public static final int SEQUENCEHANDLER_LOCALFILE = 0; public static final int SEQUENCEHANDLER_MYSQLDB = 1; public static final int SEQUENCEHANDLER_LOCAL_TIME = 2; private int sequnceHandlerType = SEQUENCEHANDLER_LOCALFILE; private String sqlInterceptor = "io.mycat.server.interceptor.impl.DefaultSqlInterceptor"; private String sqlInterceptorType = "select"; private String sqlInterceptorFile = System.getProperty("user.dir") + "/logs/sql.txt"; public static final int MUTINODELIMIT_SMALL_DATA = 0; public static final int MUTINODELIMIT_LAR_DATA = 1; private int mutiNodeLimitType = MUTINODELIMIT_SMALL_DATA; public static final int MUTINODELIMIT_PATCH_SIZE = 100; private int mutiNodePatchSize = MUTINODELIMIT_PATCH_SIZE; private String defaultSqlParser = DEFAULT_SQL_PARSER; private int usingAIO = 0; private int packetHeaderSize = 4; private int maxPacketSize = 16 * 1024 * 1024; private int mycatNodeId = 1; private int useCompression = 0; public String getDefaultSqlParser() { return defaultSqlParser; } public void setDefaultSqlParser(String defaultSqlParser) { this.defaultSqlParser = defaultSqlParser; } public SystemConfig() { this.serverPort = DEFAULT_PORT; this.managerPort = DEFAULT_MANAGER_PORT; this.charset = DEFAULT_CHARSET; this.processors = DEFAULT_PROCESSORS; processorBufferChunk = DEFAULT_BUFFER_CHUNK_SIZE; this.processorExecutor = (DEFAULT_PROCESSORS != 1) ? DEFAULT_PROCESSORS * 2 : 4; this.managerExecutor = 2; processorBufferPool = DEFAULT_BUFFER_CHUNK_SIZE * processors * 1000; this.processorBufferLocalPercent = 100; this.timerExecutor = 2; this.idleTimeout = DEFAULT_IDLE_TIMEOUT; this.processorCheckPeriod = DEFAULT_PROCESSOR_CHECK_PERIOD; this.dataNodeIdleCheckPeriod = DEFAULT_DATANODE_IDLE_CHECK_PERIOD; this.dataNodeHeartbeatPeriod = DEFAULT_DATANODE_HEARTBEAT_PERIOD; this.clusterHeartbeatUser = DEFAULT_CLUSTER_HEARTBEAT_USER; this.clusterHeartbeatPass = DEFAULT_CLUSTER_HEARTBEAT_PASS; this.clusterHeartbeatPeriod = DEFAULT_CLUSTER_HEARTBEAT_PERIOD; this.clusterHeartbeatTimeout = DEFAULT_CLUSTER_HEARTBEAT_TIMEOUT; this.clusterHeartbeatRetry = DEFAULT_CLUSTER_HEARTBEAT_RETRY; this.txIsolation = Isolations.REPEATED_READ; this.parserCommentVersion = DEFAULT_PARSER_COMMENT_VERSION; this.sqlRecordCount = DEFAULT_SQL_RECORD_COUNT; this.glableTableCheckPeriod = DEFAULT_GLOBAL_TABLE_CHECK_PERIOD; } public long getGlableTableCheckPeriod() { return glableTableCheckPeriod; } public void setGlableTableCheckPeriod(long glableTableCheckPeriod) { this.glableTableCheckPeriod = glableTableCheckPeriod; } public String getSqlInterceptor() { return sqlInterceptor; } public void setSqlInterceptor(String sqlInterceptor) { this.sqlInterceptor = sqlInterceptor; } public int getSequnceHandlerType() { return sequnceHandlerType; } public void setSequnceHandlerType(int sequnceHandlerType) { this.sequnceHandlerType = sequnceHandlerType; } public int getPacketHeaderSize() { return packetHeaderSize; } public void setPacketHeaderSize(int packetHeaderSize) { this.packetHeaderSize = packetHeaderSize; } public int getMaxPacketSize() { return maxPacketSize; } public int getCatletClassCheckSeconds() { return catletClassCheckSeconds; } public void setCatletClassCheckSeconds(int catletClassCheckSeconds) { this.catletClassCheckSeconds = catletClassCheckSeconds; } public void setMaxPacketSize(int maxPacketSize) { this.maxPacketSize = maxPacketSize; } public int getFrontWriteQueueSize() { return frontWriteQueueSize; } public void setFrontWriteQueueSize(int frontWriteQueueSize) { this.frontWriteQueueSize = frontWriteQueueSize; } public String getBindIp() { return bindIp; } public void setBindIp(String bindIp) { this.bindIp = bindIp; } public int getDefaultMaxLimit() { return defaultMaxLimit; } public void setDefaultMaxLimit(int defaultMaxLimit) { this.defaultMaxLimit = defaultMaxLimit; } public static String getHomePath() { String home = System.getProperty(SystemConfig.SYS_HOME); if (home != null) { if (home.endsWith(File.pathSeparator)) { home = home.substring(0, home.length() - 1); System.setProperty(SystemConfig.SYS_HOME, home); } } // MYCAT_HOME为空,默认尝试设置为当前目录或上级目录。BEN if (home == null) { try { String path = new File("..").getCanonicalPath().replaceAll( "\\\\", "/"); File conf = new File(path + "/conf"); if (conf.exists() && conf.isDirectory()) { home = path; } else { path = new File(".").getCanonicalPath().replaceAll("\\\\", "/"); conf = new File(path + "/conf"); if (conf.exists() && conf.isDirectory()) { home = path; } } if (home != null) { System.setProperty(SystemConfig.SYS_HOME, home); } } catch (IOException e) { // 如出错,则忽略。 } } return home; } public int getUseCompression() { return useCompression; } public void setUseCompression(int useCompression) { this.useCompression = useCompression; } public String getCharset() { return charset; } public void setCharset(String charset) { this.charset = charset; } public int getServerPort() { return serverPort; } public void setServerPort(int serverPort) { this.serverPort = serverPort; } public int getManagerPort() { return managerPort; } public void setManagerPort(int managerPort) { this.managerPort = managerPort; } public int getProcessors() { return processors; } public void setProcessors(int processors) { this.processors = processors; } public int getProcessorExecutor() { return processorExecutor; } public void setProcessorExecutor(int processorExecutor) { this.processorExecutor = processorExecutor; } public int getManagerExecutor() { return managerExecutor; } public void setManagerExecutor(int managerExecutor) { this.managerExecutor = managerExecutor; } public int getTimerExecutor() { return timerExecutor; } public void setTimerExecutor(int timerExecutor) { this.timerExecutor = timerExecutor; } public long getIdleTimeout() { return idleTimeout; } public void setIdleTimeout(long idleTimeout) { this.idleTimeout = idleTimeout; } public long getProcessorCheckPeriod() { return processorCheckPeriod; } public void setProcessorCheckPeriod(long processorCheckPeriod) { this.processorCheckPeriod = processorCheckPeriod; } public long getDataNodeIdleCheckPeriod() { return dataNodeIdleCheckPeriod; } public void setDataNodeIdleCheckPeriod(long dataNodeIdleCheckPeriod) { this.dataNodeIdleCheckPeriod = dataNodeIdleCheckPeriod; } public long getDataNodeHeartbeatPeriod() { return dataNodeHeartbeatPeriod; } public void setDataNodeHeartbeatPeriod(long dataNodeHeartbeatPeriod) { this.dataNodeHeartbeatPeriod = dataNodeHeartbeatPeriod; } public String getClusterHeartbeatUser() { return clusterHeartbeatUser; } public void setClusterHeartbeatUser(String clusterHeartbeatUser) { this.clusterHeartbeatUser = clusterHeartbeatUser; } public long getSqlExecuteTimeout() { return sqlExecuteTimeout; } public void setSqlExecuteTimeout(long sqlExecuteTimeout) { this.sqlExecuteTimeout = sqlExecuteTimeout; } public String getClusterHeartbeatPass() { return clusterHeartbeatPass; } public void setClusterHeartbeatPass(String clusterHeartbeatPass) { this.clusterHeartbeatPass = clusterHeartbeatPass; } public long getClusterHeartbeatPeriod() { return clusterHeartbeatPeriod; } public void setClusterHeartbeatPeriod(long clusterHeartbeatPeriod) { this.clusterHeartbeatPeriod = clusterHeartbeatPeriod; } public long getClusterHeartbeatTimeout() { return clusterHeartbeatTimeout; } public void setClusterHeartbeatTimeout(long clusterHeartbeatTimeout) { this.clusterHeartbeatTimeout = clusterHeartbeatTimeout; } public int getFrontsocketsorcvbuf() { return frontSocketSoRcvbuf; } public int getFrontsocketsosndbuf() { return frontSocketSoSndbuf; } public int getBacksocketsorcvbuf() { return backSocketSoRcvbuf; } public int getBacksocketsosndbuf() { return backSocketSoSndbuf; } public int getClusterHeartbeatRetry() { return clusterHeartbeatRetry; } public void setClusterHeartbeatRetry(int clusterHeartbeatRetry) { this.clusterHeartbeatRetry = clusterHeartbeatRetry; } public int getTxIsolation() { return txIsolation; } public void setTxIsolation(int txIsolation) { this.txIsolation = txIsolation; } public int getParserCommentVersion() { return parserCommentVersion; } public void setParserCommentVersion(int parserCommentVersion) { this.parserCommentVersion = parserCommentVersion; } public int getSqlRecordCount() { return sqlRecordCount; } public void setSqlRecordCount(int sqlRecordCount) { this.sqlRecordCount = sqlRecordCount; } public long getProcessorBufferPool() { return processorBufferPool; } public void setProcessorBufferPool(long processorBufferPool) { this.processorBufferPool = processorBufferPool; } public int getProcessorBufferChunk() { return processorBufferChunk; } public void setProcessorBufferChunk(int processorBufferChunk) { this.processorBufferChunk = processorBufferChunk; } public int getFrontSocketSoRcvbuf() { return frontSocketSoRcvbuf; } public void setFrontSocketSoRcvbuf(int frontSocketSoRcvbuf) { this.frontSocketSoRcvbuf = frontSocketSoRcvbuf; } public int getFrontSocketSoSndbuf() { return frontSocketSoSndbuf; } public void setFrontSocketSoSndbuf(int frontSocketSoSndbuf) { this.frontSocketSoSndbuf = frontSocketSoSndbuf; } public int getBackSocketSoRcvbuf() { return backSocketSoRcvbuf; } public void setBackSocketSoRcvbuf(int backSocketSoRcvbuf) { this.backSocketSoRcvbuf = backSocketSoRcvbuf; } public int getBackSocketSoSndbuf() { return backSocketSoSndbuf; } public void setBackSocketSoSndbuf(int backSocketSoSndbuf) { this.backSocketSoSndbuf = backSocketSoSndbuf; } public int getFrontSocketNoDelay() { return frontSocketNoDelay; } public void setFrontSocketNoDelay(int frontSocketNoDelay) { this.frontSocketNoDelay = frontSocketNoDelay; } public int getBackSocketNoDelay() { return backSocketNoDelay; } public void setBackSocketNoDelay(int backSocketNoDelay) { this.backSocketNoDelay = backSocketNoDelay; } public int getMaxStringLiteralLength() { return maxStringLiteralLength; } public void setMaxStringLiteralLength(int maxStringLiteralLength) { this.maxStringLiteralLength = maxStringLiteralLength; } public int getMutiNodeLimitType() { return mutiNodeLimitType; } public void setMutiNodeLimitType(int mutiNodeLimitType) { this.mutiNodeLimitType = mutiNodeLimitType; } public int getMutiNodePatchSize() { return mutiNodePatchSize; } public void setMutiNodePatchSize(int mutiNodePatchSize) { this.mutiNodePatchSize = mutiNodePatchSize; } public int getProcessorBufferLocalPercent() { return processorBufferLocalPercent; } public void setProcessorBufferLocalPercent(int processorBufferLocalPercent) { this.processorBufferLocalPercent = processorBufferLocalPercent; } public String getSqlInterceptorType() { return sqlInterceptorType; } public void setSqlInterceptorType(String sqlInterceptorType) { this.sqlInterceptorType = sqlInterceptorType; } public String getSqlInterceptorFile() { return sqlInterceptorFile; } public void setSqlInterceptorFile(String sqlInterceptorFile) { this.sqlInterceptorFile = sqlInterceptorFile; } public int getUsingAIO() { return usingAIO; } public void setUsingAIO(int usingAIO) { this.usingAIO = usingAIO; } public int getMycatNodeId() { return mycatNodeId; } public void setMycatNodeId(int mycatNodeId) { this.mycatNodeId = mycatNodeId; } public boolean isGlobalTableCheckSwitchOn() { return globalTableCheckSwitchOn; } public void setGlobalTableCheckSwitchOn(boolean globalTableCheckSwitchOn) { this.globalTableCheckSwitchOn = globalTableCheckSwitchOn; } @Override public String toString() { return "SystemConfig [processorBufferLocalPercent=" + processorBufferLocalPercent + ", frontSocketSoRcvbuf=" + frontSocketSoRcvbuf + ", frontSocketSoSndbuf=" + frontSocketSoSndbuf + ", backSocketSoRcvbuf=" + backSocketSoRcvbuf + ", backSocketSoSndbuf=" + backSocketSoSndbuf + ", frontSocketNoDelay=" + frontSocketNoDelay + ", backSocketNoDelay=" + backSocketNoDelay + ", maxStringLiteralLength=" + maxStringLiteralLength + ", frontWriteQueueSize=" + frontWriteQueueSize + ", bindIp=" + bindIp + ", serverPort=" + serverPort + ", managerPort=" + managerPort + ", charset=" + charset + ", processors=" + processors + ", processorExecutor=" + processorExecutor + ", timerExecutor=" + timerExecutor + ", managerExecutor=" + managerExecutor + ", idleTimeout=" + idleTimeout + ", catletClassCheckSeconds=" + catletClassCheckSeconds + ", sqlExecuteTimeout=" + sqlExecuteTimeout + ", processorCheckPeriod=" + processorCheckPeriod + ", dataNodeIdleCheckPeriod=" + dataNodeIdleCheckPeriod + ", dataNodeHeartbeatPeriod=" + dataNodeHeartbeatPeriod + ", clusterHeartbeatUser=" + clusterHeartbeatUser + ", clusterHeartbeatPass=" + clusterHeartbeatPass + ", clusterHeartbeatPeriod=" + clusterHeartbeatPeriod + ", globalTableCheckSwitchOn=" + globalTableCheckSwitchOn + ", glableTableCheckPeriod=" + glableTableCheckPeriod + ", clusterHeartbeatTimeout=" + clusterHeartbeatTimeout + ", clusterHeartbeatRetry=" + clusterHeartbeatRetry + ", txIsolation=" + txIsolation + ", parserCommentVersion=" + parserCommentVersion + ", sqlRecordCount=" + sqlRecordCount + ", processorBufferPool=" + processorBufferPool + ", processorBufferChunk=" + processorBufferChunk + ", defaultMaxLimit=" + defaultMaxLimit + ", sequnceHandlerType=" + sequnceHandlerType + ", sqlInterceptor=" + sqlInterceptor + ", sqlInterceptorType=" + sqlInterceptorType + ", sqlInterceptorFile=" + sqlInterceptorFile + ", mutiNodeLimitType=" + mutiNodeLimitType + ", mutiNodePatchSize=" + mutiNodePatchSize + ", defaultSqlParser=" + defaultSqlParser + ", usingAIO=" + usingAIO + ", packetHeaderSize=" + packetHeaderSize + ", maxPacketSize=" + maxPacketSize + ", mycatNodeId=" + mycatNodeId + "]"; } }