Операция джедаев продолжается даже после отмены будущего - PullRequest
0 голосов
/ 25 апреля 2019

Я делаю будущую операцию джедаев (hgetall) через будущее.Когда время ожидания при вызове метода get истекает, я отменяю будущее.Операция redis все еще продолжается.Он не прерывается.

Future<Map<String,String>> future = executorService.submit(() -> {
    long startTime = Instant.now.toEpochMilli();
    Map cachedata = jedis.hgetall(primarykey);
    log.info("Total time for hgetall operation {}", Instant.now.toEpochMilli() - startTime);
});
try {
    future.get(2000, TimeUnit.MILLISECONDS);
} catch (TimeoutException e ) {
    log.warn("jedis operation timeout");
    //set interrupt flag to true
    future.cancel(true);
} //other checked exception handling 

Когда кластер redis работает медленно из-за большой нагрузки, он начинает дольше обрабатывать запросы.Когда это происходит, значение future выше истекает через 2 с.С cancel флаг прерывания потока должен быть установлен на true.После этого я ожидаю, что операция джедаев остановится и будет соблюдать флаг прерывания.Но задача продолжается и в итоге выводит строку журнала «Общее время для операции hgetall 6000». Это означает, что задача выполнялась в фоновом режиме в течение 4 секунд после установки флага прерывания.

Я использую jedis в режиме кластера и получаюсоединение из пула соединений. Версия Java - 8.

...