ES出现异常:

failed to notify ClusterStateListener
java.lang.IllegalStateException: environment is not locked

定位代码:

下载ES 5.5源码,在main/java/org/elasticsearch/env/NodeEnvironment.java 里可以看到:

    private void assertEnvIsLocked() {if (!closed.get() && locks != null) {for (Lock lock : locks) {try {lock.ensureValid();} catch (IOException e) {logger.warn("lock assertion failed", e);throw new IllegalStateException("environment is not locked", e);}}}}

assertEnvIsLocked调用地方,可以看到在检测ES node数据路径、index路径使用:
    /*** Returns an array of all of the nodes data locations.* @throws IllegalStateException if the node is not configured to store local locations*/public Path[] nodeDataPaths() {assertEnvIsLocked();Path[] paths = new Path[nodePaths.length];for(int i=0;i<paths.length;i++) {paths[i] = nodePaths[i].path;}return paths;}/*** Returns an array of all of the {@link NodePath}s.*/public NodePath[] nodePaths() {assertEnvIsLocked();if (nodePaths == null || locks == null) {throw new IllegalStateException("node is not configured to store local location");}return nodePaths;}public int getNodeLockId() {assertEnvIsLocked();if (nodePaths == null || locks == null) {throw new IllegalStateException("node is not configured to store local location");}return nodeLockId;}/*** Returns all index paths.*/public Path[] indexPaths(Index index) {assertEnvIsLocked();Path[] indexPaths = new Path[nodePaths.length];for (int i = 0; i < nodePaths.length; i++) {indexPaths[i] = nodePaths[i].resolve(index);}return indexPaths;}

而locks变量的赋值在:
 public NodeEnvironment(Settings settings, Environment environment) throws IOException {if (!DiscoveryNode.nodeRequiresLocalStorage(settings)) {nodePaths = null;sharedDataPath = null;locks = null;nodeLockId = -1;nodeMetaData = new NodeMetaData(generateNodeId(settings));logger = Loggers.getLogger(getClass(), Node.addNodeNameIfNeeded(settings, this.nodeMetaData.nodeId()));return;}final NodePath[] nodePaths = new NodePath[environment.dataWithClusterFiles().length];final Lock[] locks = new Lock[nodePaths.length];boolean success = false;        。。。

查了下Lock这个类:

import org.apache.lucene.store.Lock

作用:

  • org.apache.lucene.store.Lock
  • An interprocess mutex lock.

    Typical use might look like:

     new Lock.With(directory.makeLock("my.lock")) { public Object doBody() { ... code to execute while locked ... } }.run();
    
    一些加锁、解锁例子 https://www.programcreek.com/java-api-examples/index.php?api=org.apache.lucene.store.Locklucene锁的作用,写保护:在Lucene中,打开一个IndexWrite之后,就会自动在索引目录中生成write.lock文件,这个文件中并不会有内容,不管是在索引打开期间还是在索引关闭之后,其大小都为0KB,并且在IndexWriter关闭之后,并不会删除该文件。如果同时打开多个IndexWriter的话,后打开的IndexWriter就会抛出LockObtainFailedException异常。这是个很重要的保护机制,因为若针对同一索引打开两个writer的话,会导致索引损坏。所以Lucene中的锁主要针对并发写的情况,在写的过程中并不会影响到并发读操作。

    1. lucene并发规则

    a,任意数量的只读属性IndexReader类都可以同时打开一个索引。

    b,对于一个索引来说,一次只能打开一个IndexWriter对象。lucene采用锁来提供保障。

    c,IndexReader可以在indexwriter正在修改索引时打开。该对象只有在IndexWriter提交修改或自己重新打开后才能获知索引的修改情况。

    d,任意多个线程可以共享同一个indexreader或indexwriter。

    2. lucene锁机制

    为了实现单一的writer,lucene采用了基于文件的锁,如果锁文件(默认writer.lock)存在于你的索引所在目录内,说明此时正在打开一个writer。此时若企图对同一个索引文件创建其他的writer的话,将产生一个LockObtainFailedException异常。

    而由assertEnvIsLocked看,抛出的异常应该是锁出现了问题,文件损坏或者目录损坏、或者文件系统损坏导致。

转载于:https://www.cnblogs.com/bonelee/p/7909194.html

ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked相关推荐

  1. IDEA| java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context

    问题:java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.pr ...

  2. java.lang.IllegalStateException: Failed to introspect Class

    异常内容 [org.springframework.web.context.support.XmlWebApplicationContext][Exception encountered during ...

  3. 异常解决:java.lang.IllegalStateException: Failed to introspect Class

    java.lang.IllegalStateException: Failed to introspect Class 异常详情 原因 解决办法 异常详情 Exception encountered ...

  4. Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous map

    Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous map ...

  5. JUnit测试类报错:java.lang.IllegalStateException: Failed to load ApplicationContext

    问题描述 运行JUnit测试类时,报以下错误信息: java.lang.IllegalStateException: Failed to load ApplicationContextat org.s ...

  6. java.lang.IllegalStateException: No instances available for eurekaclient

    在测试ribbon负载均衡的时候,遇到一个这个报错: Servlet.service() for servlet [dispatcherServlet] in context with path [] ...

  7. java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案

    java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案 参考文章: (1)java.lang.Ille ...

  8. Spring Data ElasticSearch删除索引遇到的java.lang.IllegalStateException: Failed to load ApplicationContext异常

    异常内容如下: log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.S ...

  9. java.lang.IllegalStateException: Failed to load ApplicationContext selenium 异常 解决

    java.lang.IllegalStateException: Failed to load ApplicationContext selenium 异常 解决 参考文章: (1)java.lang ...

最新文章

  1. android监听输入框光标,EditText光标的移动
  2. 使用virt-manager管理多台虚拟机
  3. PotPlayer 所有版本合集
  4. CentOS7 安装 mysql8
  5. C++调用WebService
  6. 开发:随笔记录之 Json字符串和对象的相互转换
  7. 中科院大牛带你玩转Python数据分析,大厂offer轻松拿!
  8. 谈谈无头电商 - headless commerce
  9. jpa一级缓存和二级缓存_了解一级JPA缓存
  10. android 悬浮组件,Android 悬浮组件
  11. 分治法 —— 折半查找(递归与非递归)
  12. 软件类配置(三)【ubuntu16.04安装微软的AirSim自动驾驶仿真平台,并初步使用仿真。】
  13. aac蓝牙编解码协议_蓝牙协议总结
  14. 设计模式的三大分类及六大原则
  15. SPSS如何进行Cox回归分析操作
  16. Android 如何发送地理位置消息
  17. IDEA远程提交hadoop任务时出现的错误
  18. CSS笔试题: 实现表格首行首列固定和自适应窗口
  19. PS:“内容识别填充”去水印
  20. Android差分升级原理和实现方式

热门文章

  1. spss预测变量重要性不可用_C4.5/5.0的SPSS操作
  2. flink链接mysql_flink 将mysql作为Source和Sink的代码示例
  3. linux a文本编辑大全,Linux sed 命令 - Linux文档编辑命令大全
  4. Java library util_sdejavautil.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  5. mysql配置文件构成以及具体的配置demo
  6. laravel的composer require报错:Installation failed, reverting ./composer.json to its original content.
  7. php中对于json_decode()和json_encode()的使用方法笔记
  8. 解释上采样和PixelShuffle
  9. Parallels Desktop 16 Win11虚拟机将继续正常运作,但将无法连接网络
  10. 【Java Web前端开发】web概念概述和HTML基础部分