Github user zentol commented on a diff in the pull request:
https://github.com/apache/flink/pull/5038#discussion_r152298240
--- Diff:
flink-queryable-state/flink-queryable-state-client-java/src/main/java/org/apache/flink/queryablestate/network/Client.java
---
@@ -312,32 +345,43 @@ private void handInChannel(Channel channel) {
/**
* Close the connecting channel with a ClosedChannelException.
*/
- private void close() {
- close(new ClosedChannelException());
+ private CompletableFuture<?> close() {
+ return close(new ClosedChannelException());
}
/**
* Close the connecting channel with an Exception (can be
{@code null})
* or forward to the established channel.
*/
- private void close(Throwable cause) {
- synchronized (connectLock) {
- if (!closed) {
- if (failureCause == null) {
- failureCause = cause;
- }
+ private CompletableFuture<?> close(Throwable cause) {
+ CompletableFuture<?> future = new CompletableFuture<>();
+ if (connectionShutdownFuture.compareAndSet(null,
future)) {
+ synchronized (connectLock) {
+ if (!closed) {
--- End diff --
this seems unnecessary, doesn't the check at L358 guarantee that the entire
branch is only executed once?
---