Elasticsearch: AssertionError при получении имени индекса из псевдонима

Мы использовали Elasticsearch Plugin в нашем проекте. При получении имени индекса из псевдонима появляется ошибка ниже

ошибка

   {
   "error": "AssertionError[Expected current thread[Thread[elasticsearch[Seth][http_server_worker][T#2]{New I/O worker #20},5,main]] to not be a transport thread. Reason: [Blocking operation]]",  "status": 500
   }

Код

    String realIndex = client.admin().cluster().prepareState()
                   .execute().actionGet().getState().getMetaData()
                   .aliases().get(aliasName).iterator()
                   .next().key;

что вызывает эту проблему?? Погуглил не помог

1 ответ

Судя по ошибке, кажется, что эта операция недопустима в транспортном потоке, поскольку она будет блокировать поток до тех пор, пока вы не получите результат обратно. Вы должны выполнить это в потоке выполнения.

public String getIndexName() {
    final IndexNameHolder result = new IndexNameHolder(); // holds the index Name. Needed a final instance here, hence created a holder.
    getTransportClient().admin().cluster().prepareState().execute(new ActionListener<ClusterStateResponse>() {

        @Override
        public void onResponse(ClusterStateResponse response) {
            result.indexName = response.getState().getMetaData().aliases().get("alias").iterator().next().key;

        }
        @Override
        public void onFailure(Throwable e) {
            //Handle failures
        }
    });
    return result.value;
}

Есть еще один метод для execute()тот, который берет слушателя. Вы должны реализовать свой собственный слушатель. В моем ответе у меня есть анонимная реализация Listener.

Я надеюсь, что это помогает

Другие вопросы по тегам