ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
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相关推荐
- IDEA| java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context
问题:java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.pr ...
- java.lang.IllegalStateException: Failed to introspect Class
异常内容 [org.springframework.web.context.support.XmlWebApplicationContext][Exception encountered during ...
- 异常解决:java.lang.IllegalStateException: Failed to introspect Class
java.lang.IllegalStateException: Failed to introspect Class 异常详情 原因 解决办法 异常详情 Exception encountered ...
- 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 ...
- JUnit测试类报错:java.lang.IllegalStateException: Failed to load ApplicationContext
问题描述 运行JUnit测试类时,报以下错误信息: java.lang.IllegalStateException: Failed to load ApplicationContextat org.s ...
- java.lang.IllegalStateException: No instances available for eurekaclient
在测试ribbon负载均衡的时候,遇到一个这个报错: Servlet.service() for servlet [dispatcherServlet] in context with path [] ...
- java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案
java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案 参考文章: (1)java.lang.Ille ...
- 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 ...
- java.lang.IllegalStateException: Failed to load ApplicationContext selenium 异常 解决
java.lang.IllegalStateException: Failed to load ApplicationContext selenium 异常 解决 参考文章: (1)java.lang ...
最新文章
- android监听输入框光标,EditText光标的移动
- 使用virt-manager管理多台虚拟机
- PotPlayer 所有版本合集
- CentOS7 安装 mysql8
- C++调用WebService
- 开发:随笔记录之 Json字符串和对象的相互转换
- 中科院大牛带你玩转Python数据分析,大厂offer轻松拿!
- 谈谈无头电商 - headless commerce
- jpa一级缓存和二级缓存_了解一级JPA缓存
- android 悬浮组件,Android 悬浮组件
- 分治法 —— 折半查找(递归与非递归)
- 软件类配置(三)【ubuntu16.04安装微软的AirSim自动驾驶仿真平台,并初步使用仿真。】
- aac蓝牙编解码协议_蓝牙协议总结
- 设计模式的三大分类及六大原则
- SPSS如何进行Cox回归分析操作
- Android 如何发送地理位置消息
- IDEA远程提交hadoop任务时出现的错误
- CSS笔试题: 实现表格首行首列固定和自适应窗口
- PS:“内容识别填充”去水印
- Android差分升级原理和实现方式
热门文章
- spss预测变量重要性不可用_C4.5/5.0的SPSS操作
- flink链接mysql_flink 将mysql作为Source和Sink的代码示例
- linux a文本编辑大全,Linux sed 命令 - Linux文档编辑命令大全
- Java library util_sdejavautil.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- mysql配置文件构成以及具体的配置demo
- laravel的composer require报错:Installation failed, reverting ./composer.json to its original content.
- php中对于json_decode()和json_encode()的使用方法笔记
- 解释上采样和PixelShuffle
- Parallels Desktop 16 Win11虚拟机将继续正常运作,但将无法连接网络
- 【Java Web前端开发】web概念概述和HTML基础部分