索引的构成

在看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等。

elasticserach 索引删除 源码分析的更多相关文章

  1. shinx索引部分源码分析——过程:连接到CSphSource对应的sql数据源,通过fetch row取其中一行,然后解析出field,分词,获得wordhit,最后再加入到CSphSource的Hits里

    CSphSource 数据源 CSphSource_XMLPipe2-XML文件获取数据 CSphSource_SQL-SQL(MySQL)获取数据 CSphIndex 索引器 派生类CSphInde ...

  2. Mybatis 源码分析--crud

    增加源码分析-insert() --------------------------------------------------------------------- public int ins ...

  3. LinkedList 源码分析(JDK 1.8)

    1.概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构.和 ArrayList 一样,LinkedList 也支持空值和重复值.由于 LinkedList 基 ...

  4. sphinx源码分析总结

    http://www.cnblogs.com/bonelee/p/6667955.html shinx索引部分源码分析——过程:连接到CSphSource对应的sql数据源,通过fetch row取其 ...

  5. Solr4.8.0源码分析(17)之SolrCloud索引深入(4)

    Solr4.8.0源码分析(17)之SolrCloud索引深入(4) 前面几节以add为例已经介绍了solrcloud索引链建索引的三步过程,delete以及deletebyquery跟add过程大同 ...

  6. Solr4.8.0源码分析(16)之SolrCloud索引深入(3)

    Solr4.8.0源码分析(16)之SolrCloud索引深入(3) 前面两节学习了SolrCloud索引过程以及索引链的前两步,LogUpdateProcessorFactory和Distribut ...

  7. Solr4.8.0源码分析(13)之LuceneCore的索引修复

    Solr4.8.0源码分析(13)之LuceneCore的索引修复 题记:今天在公司研究elasticsearch,突然看到一篇博客说elasticsearch具有索引修复功能,顿感好奇,于是点进去看 ...

  8. Solr4.8.0源码分析(10)之Lucene的索引文件(3)

    Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...

  9. Solr4.8.0源码分析(9)之Lucene的索引文件(2)

    Solr4.8.0源码分析(9)之Lucene的索引文件(2) 一. Segments_N文件 一个索引对应一个目录,索引文件都存放在目录里面.Solr的索引文件存放在Solr/Home下的core/ ...

随机推荐

  1. 数学建模三剑客MSN

    前言 不管是不是巴萨的球迷,只要你喜欢足球,就一定听说过梅西(Messi).苏亚雷斯(Suarez)和内马尔(Neymar)这个MSN组合.在众多的数学建模辅助工具中,也有一个犀利无比的MSN组合,他 ...

  2. 在android工程中,res目录下又有anim、drawable、layout、menu、raw、values和xml文件夹,分别用来保存?

    res目录主要是存放资源文件的!layout 布局 这个就是你经常看到的与用户交互的界面的 xml 文件,就是各个 view 的排列和嵌套,没什 么好说的啦 风格和主题. 风格主要是指 view 的显 ...

  3. MySql与SqlServer的区别

    1.SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运 ...

  4. linux 挂载命令mount、umount

    mount /bin/mount语法:mount [-t文件系统] 设备文件名 挂载点mount -t iso9660 /dev/sr0 /mnt/cdromiso9660是固定的,光盘:所以 -t ...

  5. scp远程传输文件和ssh远程连接

    ssh使用方法 如果从一台linux服务器通过ssh远程登录到另一台Linux机器, 这种情况通常会在多台服务器的时候用到. 如用root帐号连接一个IP为192.168.1.102的机器,输入:“  ...

  6. Invalid argument during startup: unknown conf file parameter : requirepass

    redis 设置来密码,出现来这个错误, 把配置文件那一行的 空格 去掉 # requirepass foobared 改成 requirepass 123456 因为# 和 requirepass ...

  7. 用字典给Model赋值

    用字典给Model赋值 此篇教程讲述通过runtime扩展NSObject,可以直接用字典给Model赋值,这是相当有用的技术呢. 源码: NSObject+Properties.h 与 NSObje ...

  8. Linux系统设置运行级别

    设置运行级别 查看开机加载级别:7个级别 规范场景默认都是3         cat /etc/inittab --> 系统开机启动加载的文件,可以设置运行级别 # Default runlev ...

  9. 17 汽车服务工程 李腾飞 MP4

  10. spring4声明式事务--01注解方式

    1.在spring配置文件中引入 tx 命名空间 xmlns:tx="http://www.springframework.org/schema/tx" 2.配置事务管理器 < ...