Netty Channel.close() иногда зависает. В нашем конкретном случае использования у нас есть пул каналов, и наши тесты проверяют устойчивость к сетевым сбоям. Итак, в наших тестах мы пытаемся закрыть один канал.Netty Channel.close() висит с перерывами
В следующем фрагменте кода мы печатаем инструкции отладки перед вызовом Channel.close(), сразу после Channel.close() и после ChannelFuture.await(). Чтобы убедиться, что поток не прерывается, мы проверяем исключение InterruptedException.
Channel c = partitionChannelMap.get(partition);
if (c != null) {
for (int retries = 0; retries < numRetries; retries++) {
try {
logger.debug("Attempt {}: Closing channel to partition {}", retries + 1, partition);
logger.debug("Channel Properties - isBound() isConnected() isOpen() " + c.isBound() + " "
+ c.isConnected() + " " + c.isOpen());
ChannelFuture closeFuture = c.close();
logger.debug("About to wait");
closeFuture.await(nettyTimeout);
if (closeFuture.isSuccess()) {
logger.debug("Attempt {}: CLOSED channel to partition {}", retries + 1, partition);
partitionChannelMap.remove(partition);
break;
} else {
logger.error("Attempt {}: FAILED to close partition {}", retries + 1, partition);
continue;
}
} catch (InterruptedException e) {
logger.error("Attempt {}: FAILED to close partition {}", retries + 1, partition);
e.printStackTrace();
continue;
}
}
}
}
В некоторых опытах (ошибочные из них), операторы отладки перед Channel.close() выполняются, в то время как сразу после этого не делают. Поскольку Channel.close() является асинхронным, мы ожидаем его немедленного возврата. В этих случаях выполнение зависает после вызова Channel.close().
Я предполагаю или что-то не так здесь?
Пример вывода для ошибочного исполнения -
15:12:32.497 [Thread-7] DEBUG org.apache.s4.comm.tcp.TCPEmitter - Attempt 1: Closing channel to partition 0
15:12:32.497 [Thread-7] DEBUG org.apache.s4.comm.tcp.TCPEmitter - Channel Properties - isBound() isConnected() isOpen() true true true
Я был бы очень признателен за любую помощь по этому вопросу.
Thanks