我通过upstart启动我的Java应用程序和Elasticsearch 1.4.2.有时,当我重新启动服务器时,我会收到NoShardAvailableActionException
前5个文档请求中的内容.
我的应用程序首先从Elasticsearch读取了一些文档,而Elasticsearch似乎还没有准备好.当我等待一点并重新启动我的应用程序时,一切正常.
如何检查我的Elasticsearch集群(我只有1个节点)是否已准备好获取文档?
我已经尝试检查群集状态,但即使它已经是黄色,我有时会得到NoShardAvailableActionException
:
private static void checkClusterStateNotRed() throws Exception { while(clusterState() == ClusterHealthStatus.RED) { Logger.info("Elasticsearch cluster state is red); Thread.sleep(1000); } } private static ClusterHealthStatus clusterState() throws Exception { return ElasticsearchClient.getInstance() .admin().cluster() .clusterStats(new ClusterStatsRequest()) .get() .getStatus(); }
Vineeth Moha.. 6
我觉得你不是在等待碎片被恢复并准备开放请求.通常需要一些时间.
client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(5000)
在拨打电话之前使用此代码.在完全恢复分片并且群集恢复到至少黄色状态之前,这将等待至少5秒.
我觉得你不是在等待碎片被恢复并准备开放请求.通常需要一些时间.
client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(5000)
在拨打电话之前使用此代码.在完全恢复分片并且群集恢复到至少黄色状态之前,这将等待至少5秒.