package io.mycat.util.rehasher; import io.mycat.util.CmdArgs; import io.mycat.util.StringUtil; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class RehashCmdArgs { public static final String JDBC_DRIVER="jdbcDriver"; public static final String JDBC_URL="jdbcUrl"; public static final String HOST="host"; public static final String USER="user"; public static final String DATABASE="database"; public static final String PASSWORD="password"; public static final String TABLES_FILE="tablesFile"; public static final String SHARDING_FIELD="shardingField"; public static final String REHASH_HOSTS_FILE="rehashHostsFile"; public static final String HASH_TYPE="hashType"; public static final String SEED="seed"; public static final String VIRTUAL_BUCKET_TIMES="virtualBucketTimes"; public static final String WEIGHT_MAP_FILE="weightMapFile"; public static final String REHASH_NODE_DIR="rehashNodeDir"; private CmdArgs cmdArgs; public RehashCmdArgs(String[] args){ cmdArgs=CmdArgs.getInstance(args); } public String getString(String name){ return cmdArgs.getString(name); } public String getJdbcDriver(){ return getString(JDBC_DRIVER); } public String getJdbcUrl(){ return getString(JDBC_URL); } /** * including host and port, which format is host:port * @return */ public String getHost(){ return getString(HOST); } public String getHostName(){ String host=getHost(); return host.substring(0,host.indexOf(':')); } public int getHostPort(){ String host=getHost(); return Integer.parseInt(host.substring(host.indexOf(':')+1)); } public String getDatabase(){ return getString(DATABASE); } public String getHostWithDatabase(){ return getHost()+'/'+getDatabase(); } public String getUser(){ return getString(USER); } public String getPassword(){ return getString(PASSWORD); } public String getTablesFile(){ return getString(TABLES_FILE); } public String[] getTables() throws IOException{ return readStringArrayFromFile(getTablesFile()); } public String getShardingField(){ return getString(SHARDING_FIELD); } public String getRehashHostsFile(){ return getString(REHASH_HOSTS_FILE); } public String[] getRehashHosts() throws IOException{ return readStringArrayFromFile(getRehashHostsFile()); } public HashType getHashType(){ return HashType.valueOf(getString(HASH_TYPE).toUpperCase()); } public int getMurmurHashSeed(){ return getIntWithDefaultValue(SEED, 0); } public int getMurmurHashVirtualBucketTimes(){ return getIntWithDefaultValue(VIRTUAL_BUCKET_TIMES, 160); } public String getMurmurWeightMapFile(){ return getString(WEIGHT_MAP_FILE); } public String getRehashNodeDir(){ return getString(REHASH_NODE_DIR); } private int getIntWithDefaultValue(String name,int defaultValue){ String val=getString(name); if(StringUtil.isEmpty(val)){ return defaultValue; }else{ return Integer.parseInt(val); } } private String[] readStringArrayFromFile(String file) throws IOException{ BufferedReader br=null; try{ List<String> tableList=new ArrayList<>(); br=new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf8")); String table=null; while((table=br.readLine())!=null){ tableList.add(table); } return tableList.toArray(new String[tableList.size()]); }finally{ if(br!=null){ br.close(); } } } }