2014-12-22 5 views
1

upstart를 통해 Java 응용 프로그램과 Elasticsearch 1.4.2를 시작합니다. 때로는 서버를 다시 시작하면 처음 5 회의 doc 요청에 NoShardAvailableActionException이 표시됩니다.Elasticsearch : NoShardAvailableActionException 시작 후

내 응용 프로그램은 먼저 Elasticsearch에서 일부 워드 프로세서를 읽고 Elasticsearch는 준비가되어 있지 않은 것 같습니다. 잠시 기다렸다가 내 앱을 다시 시작하면 모든 것이 작동합니다.

내 Elasticsearch 클러스터 (노드가 하나뿐입니다)에서 문서를 가져올 준비가되었는지 어떻게 확인할 수 있습니까?

는 이미 클러스터의 상태를 확인하려했지만, 심지어, 나는 때때로 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(); 
} 

답변

5

난 당신이 파편이 복구 될 때까지 대기 할 준비가되지 않은 느낌 요청을 위해 열립니다. 보통 그것은 약간의 시간이 걸립니다.

client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(5000) 

전화를 걸기 전에이 코드를 사용하십시오. 샤드가 완전히 복구되고 클러스터가 적어도 노란색 상태로 돌아 가기까지 최소한 5 초 동안 대기합니다.