ElasticSearch 源码分析21 CreateIndex

先看创建索引的方法入口 TransportCreateIndexAction

   ElasticSearch 源码分析21 CreateIndex

1.从创建索引请求request中获取cause,如果长度length == 0,那么就设置默认值api

2.然后就根据request的index 来解析出indexName

3.然后包装成为一个updateRequest

4.继续调用createIndexService的createIndex方法,来创建索引

ElasticSearch 源码分析21 CreateIndex

5.创建索引调用onlyCreateIndex,并且有对应的创建回调处理

ElasticSearch 源码分析21 CreateIndex

6.提交创建索引的任务

7.调用execute方法执行创建索引

ElasticSearch 源码分析21 CreateIndex

8.先调用validate校验,然后再检验alias别名

9.根据请求获取索引模板templates

10.循环request请求的mappings,然后解析到之前新建的mappings中

11.继续解析request请求的customs

ElasticSearch 源码分析21 CreateIndex

12.然后进行templates和request中的mappings进行合并

13.处理请求request的settings,可以覆盖模板templates

ElasticSearch 源码分析21 CreateIndex

14.根据索引的配置idxSettings,获取routingNumShards

 

ElasticSearch 源码分析21 CreateIndex

15.本地master先创建一个索引,然后增加mappings

ElasticSearch 源码分析21 CreateIndex

16.然后使用实际的source,更新mappings,最后调用

indexMetaData = indexMetaDataBuilder.build();

  创建出索引元数据indexMetaData,再创建出newMetaData

ElasticSearch 源码分析21 CreateIndex

17.再构建出updatedState,获取路由表routingTable

18.然后调用reroute来分配

ElasticSearch 源码分析21 CreateIndex

19.根据clusterState获取路由节点routingNodes

20.继续调用reroute

ElasticSearch 源码分析21 CreateIndex

21.分配可用的node节点