cobar分佈式數據存儲系統cobar-server解析

啓動cobar組件服務:
1、執行startup.sh腳本,加載schema.xml,rule.xml,server.xml文件,
2、執行CobarStartup.class

一、解析startup.sh
1、判斷JAVA_HOME是否存在,不存在報錯
2、設置JAVA_OPTS(JVM相關運行參數的變量,即java虛擬機內存設置),
3、開始啓動服務


二、CobarStartup.java
main方法:
1、初始化CobarConfig
1、初始化ConfigInitializer,
1、初始化XMLSchemaLoader
1、初始化XMLRuleLoader(解析rule.xml、rule.dtd): 封裝參數(rule.xml/dtd)
2、初始化XMLConfigLoader(SchemaLoader)()
1、通過SchemaLoader初始化封裝的參數(Map<String, DataSourceConfig>等)
2、初始化XMLServerLoader:解析server.dtd、xml文件,分裝到Map<String, UserConfig>、SystemConfig;
3、初始化RouteRuleInitializer
1、初始化MySQLFunctionManager封裝HashMap<String, FunctionParsingStrategy>,Map<String, FunctionExpression>
2、buildFuncManager方法:將<function>加入到Map<String, FunctionExpression>中
3、初始化MySQLLexer:sql的語法分析(拆分sql,關鍵詞判斷等)、緩存等,
4、初始化MySQLExprParser:sql表達式解析、解析sql,分裝RuleAlgorithm
注:如何把Expression轉換成RuleAlgorithm?
2、初始化CobarServer,





三、XMLRuleLoader(解析rule.xml、rule.dtd文件,封裝參數):
1、load(String dtdFile, String xmlFile):
讀取rule.dtd/rule.xml文件,執行loadFunction,loadTableRules方法


2、方法 loadFunction
拿到元素<functton>,進行拆分,將name作爲key,class(PartitionByLong)作爲value存在map中Map<String, RuleAlgorithm>,
注:
1、先將class字符串(com.alibaba.cobar.route.function.PartitionByLong)轉換成class RuleAlgorithm
2、讀取Element中的節點(<property name="partitionCount">2</property>),name作爲key,2作爲value存到map中
3、將map中的key與RuleAlgorithm的屬性匹配,把值賦值到RuleAlgorithm的屬性上。

3、方法 loadTableRules
拿到元素<tableRule>,進行拆分,將name作爲key,class(TableRuleConfig)作爲value存在map中Map<String, TableRuleConfig>
注:
1、循環遍歷獲取<tableRule>下的<rule>,拆分rule,封裝到RuleConfig中,將規則放到List<RuleConfig>中,


四、初始化XMLSchemaLoader
1、初始化XMLRuleLoader
2、執行load(scheml.dtd,schema.xml) 讀取、解析scheml.dtd、xml文件
1、執行loadDataSources方法(解析schema.xml將數據<dataSource>封裝到Map<String, DataSourceConfig>中):
1、ConfigUtil:遍歷<location>192.168.168.1:3306/dbtest1</location>時搞不懂
2、ParameterMapping.mapping(Object object, Map<String, ? extends Object> parameter)
將xml文件數據封裝到DataSourceConfig對象中
2、執行loadDataNodes方法(解析schema.xml將數據<dataNode>封裝到Map<String, DataNodeConfig>中):
3、執行loadSchemas方法((解析schema.xml將數據<schema>封裝到Map<String, SchemaConfig>中):)
1、loadTables(Element node):返回Map<String, TableConfig>


五、XMLServerLoader
1、執行load(scheml.dtd,schema.xml) 讀取、解析scheml.dtd、xml文件
1、loadSystem方法(解析server.xml將數據<system>封裝SystemConfig)
2、loadUsers方法(解析server.xml將數據<user>封裝到Map<String, UserConfig>)

發佈了23 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章