elasticserach 索引删除 源码分析
索引的构成
在看indicesservice服务中移除索引的前提,先了解一个index类的构成,也就是索引的一些基本信息,代码贴图如下:
主要的信息就两个:一个是name,表示索引名称,一个是uuid,表示索引的唯一标识。ok,了解这个之后。我们开始表述我们的正题,索引是怎么删除的,要删除哪些信息。
index删除过程
在indicesservice类中的removeindex方法进行索引的删除操作, 执行流程如下:
1:创建一个map<string,indexservice>类型的hashmap叫做newindices,将indicesservice中indices中的数据复制到newindices中
2:通过uuid将newindices中的indexservice移除,并返回indexservice对象
3:通过unmodifiablemap方法,将newindices 赋值给indices,并将indices设置为final。
备注: unmodifiablemap是一个java内置方法,将指定的对象设置为final并返回新的对象。这里indices初始化是一个volatile(不懂volatile可查阅具体资料),通过一个新的map对象,也就是newindices来保证indices操作的线程安全.因为newindices是线程内部,属于线程私有。
4:关闭分片,将分片的状态置为close,将移除原因设置为delete
5:关闭bitsetfiltercache,indexcache,indexfielddata,mapperservice,refreshtask,fsynctask,trimtranslogtask,globalcheckpointtask这些服务
6:执行删除操作,如果删除失败,将索引添加到pendingdeletes 中,表示当前索引已经挂起,为不可用的状态。
备注:执行删除主要是文件删除操作,删除的文件是我们配置的节点data目录下,每个目录${basepath}/nodes/0/indices下,basepath是我们在安装集群时创建的路径,而nodes/0/indices是默认路径,在indices中以index的uuid为文件夹名称的文件夹是所有的数据目录,在删除的时候就是通过uuid来删除这个目录。这个目录我查看的是5.1.1的版本。
要删除的信息就是上面截图中的文件夹。这也是我们数据的主要存储目录
7:删除所有的index元数据信息(这个起到一个保护机制,保证删除索引不会重新作为一个新的空索引导入,所以彻底删除掉。但是后面的es版本应该会将元数据信息做一个备份或者标志一个已删除的状态,而不是全部删除清空)
ok,索引的删除操作就是这样的,在后面会继续分析这服务的其他操作,索引的创建,分片等elasticsearch的一些知识,中间还会涉及到一些内置的配置信息,会告诉你通过这些配置我们可以起到怎样的作用,怎么优化elasticseach等。
上一篇: 使用函数验证哥德巴赫猜想
推荐阅读
-
Netty源码分析之ChannelPipeline(二)—ChannelHandler的添加与删除
-
jQuery 源码分析(二十一) DOM操作模块 删除元素 详解
-
jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/unde
-
RocketMQ:索引源码分析
-
elasticserach 索引删除 源码分析
-
Netty源码分析之ChannelPipeline(二)—ChannelHandler的添加与删除
-
分布式搜索Elasticsearch源码分析之二------索引过程源码概要分析
-
分布式搜索Elasticsearch源码分析之二------索引过程源码概要分析
-
jQuery 源码分析(二十一) DOM操作模块 删除元素 详解
-
[原创] jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/undelegate