Установка таймаута для поиска клиента elasti c с использованием java - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь использовать поиск elasti c таким образом, чтобы клиент был закрыт через 1 час или около того. Я заметил, что в моих тестах он закрывается через 30 минут, и я не могу понять, в чем проблема, это Вот как я реализовал свой класс клиента ElasticSearch:


public class ElasticSearchClient implements Closeable {

    public static final String INDEX = EnvConf.getProperty("elastic.tests_report.index");
    private static final String HOST = EnvConf.getProperty("elastic.host");
    private static final int PORT = EnvConf.getAsInteger("elastic.port");
    private final RestHighLevelClient restClient;

    public ElasticSearchClient() {
        RestClientBuilder builder = RestClient.builder(
                new HttpHost(HOST, PORT))
                .setRequestConfigCallback(
                        requestConfigBuilder -> requestConfigBuilder
                                .setConnectTimeout(5000)
                                .setSocketTimeout(10000))
                .setMaxRetryTimeoutMillis(90000);
        restClient = new RestHighLevelClient(builder);
    }

    public IndexResponse index(String index , String type , XContentBuilder contentBuilder) throws IOException {
        IndexRequest indexRequest = new IndexRequest(index, type)
                .source(contentBuilder);
        return restClient.index(indexRequest , RequestOptions.DEFAULT);
    }



    public SearchResponse query(QueryBuilder queryBuilder, int maxHits, String...indices) throws IOException {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS))
                .size(maxHits)
                .sort(new FieldSortBuilder("start_timestamp").order(SortOrder.DESC));
        SearchRequest searchRequest = new SearchRequest(indices);
        searchRequest.source(searchSourceBuilder.query(queryBuilder));
        return restClient.search(searchRequest , RequestOptions.DEFAULT);
    }

    @Override
    public void close() throws IOException {
        restClient.close();
    }
}

Я думал, что он будет работать в течение 1,5 часов, я увидел, что через 30 минут он останавливается для индексации клиента, и я получаю сообщение об ошибке:

java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
    at org.apache.http.util.Asserts.check(Asserts.java:46)
    at org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90)
    at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123)
    at org.elasticsearch.client.RestClient.performRequestAsync(RestClient.java:533)
    at org.elasticsearch.client.RestClient.performRequestAsyncNoCatch(RestClient.java:516)
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:228)
    at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1762)
    at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1732)
    at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1694)
    at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:926)
    at com.indeni.automation.api.db.ElasticSearchClient.index(ElasticSearchClient.java:46)
    at com.indeni.automation.core.runner.testng.TestListener.updateDataSourceWithTestResult(TestListener.java:215)
    at com.indeni.automation.core.runner.testng.TestListener.onFinish(TestListener.java:125)
    at org.testng.TestRunner.fireEvent(TestRunner.java:1239)
    at org.testng.TestRunner.afterRun(TestRunner.java:1030)
    at org.testng.TestRunner.run(TestRunner.java:636)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.access$000(SuiteRunner.java:39)
    at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:400)
    at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

Я заметил, что это перестало работать через 30 минут, и я не могу понять причину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...