es索引如何创建?快速入门指南

上一篇:ES处理请求的流程

我们延续上一篇来研究一下ES实际是怎么处理创建索引的流程的,我们根据代码一层层点进去看一下

es索引如何创建?快速入门指南

我们看见了什么,这个就是包装了创建索引相关的一些信息,如:路径、以及实体类;根据这个里面的name进行转发,上一篇最后讲了

es索引如何创建?快速入门指南

这里通过client直接执行的

es索引如何创建?快速入门指南

这里的client需要注意,是在node构建的时候创建的NodeClient

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

在执行execute方法时会走到父类AbstractClient里面去,这个里面就调用了子类实现的doExecute方法

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

这个方法很重要,这个里面会根据我们传入的action在map里获取他实际执行的TransportAction

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

这个方法的实现有很多类,但是我们想看的是创建索引的逻辑,所以我们找到

TransportCreateIndexAction的实现

es索引如何创建?快速入门指南

TransportCreateIndexAction里面比较重要的方法就是createIndex,我们点进去看一下

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

我们一直点进去看一下,其实我们也可以猜想到,后面肯定会提交给一个线程池去执行

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

看见没有,这里确实是交给了一个线程池去处理

es索引如何创建?快速入门指南

而且还是一个优先级线程池,线程池的源码我们就不展开讲了,后续会有文章专门讲线程池源码的

es索引如何创建?快速入门指南

我在回过头看看提交的IndexCreationTask线程里面的逻辑

IndexCreationTask.execute里面比较关键的代码就是这一行,在服务器节点创建索引

我们点进去看一下,createIndexService方法一看就是和创建索引相关的逻辑,在继续点进去

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

我们可以看见创建的IndexService这个类封装了比较核心的创建Shard和删除Shard方法

es索引如何创建?快速入门指南

在就是这里会通过传入的index数据创建一个IndexMetaData(索引元数据)的构造器,在通过构造器模式创建出来索引元数据

es索引如何创建?快速入门指南

es索引如何创建?快速入门指南

根据新的元数据构建一个新的集群状态并且返回

es索引如何创建?快速入门指南

索引创建成功之后则等待指定数量Shard启动

es索引如何创建?快速入门指南

如果为0直接返回

es索引如何创建?快速入门指南

监听集群状态是否发生变化

es索引如何创建?快速入门指南

有发生变化并且满足条件回调监听器的onNewClusterState方法

es索引如何创建?快速入门指南

这个方法会直接将标志位修改为true

es索引如何创建?快速入门指南

标志位为true返回响应

es索引如何创建?快速入门指南

职业发展

shell命令怎么学?学习路线、入门必备、实用技巧

2024-2-1 19:41:22

职业发展

管理网如何提高工作效率?工作技巧有哪些

2024-2-1 19:52:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索