[ 
https://issues.apache.org/jira/browse/FLINK-7974?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16247476#comment-16247476
 ] 

ASF GitHub Bot commented on FLINK-7974:
---------------------------------------

Github user tillrohrmann commented on a diff in the pull request:

    https://github.com/apache/flink/pull/4993#discussion_r150228000
  
    --- Diff: 
flink-queryable-state/flink-queryable-state-client-java/src/main/java/org/apache/flink/queryablestate/network/Client.java
 ---
    @@ -309,31 +323,38 @@ 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) {
    +           private CompletableFuture<?> close(Throwable cause) {
                        synchronized (connectLock) {
    -                           if (!closed) {
    +                           final CompletableFuture<?> shutdownFuture;
    +                           if (closed) {
    +                                   shutdownFuture = new 
CompletableFuture<>();
    +                                   shutdownFuture.complete(null);
    +                           } else {
                                        if (failureCause == null) {
                                                failureCause = cause;
                                        }
     
                                        if (established != null) {
    -                                           established.close();
    +                                           shutdownFuture = 
established.close();
                                        } else {
                                                PendingRequest pending;
                                                while ((pending = 
queuedRequests.poll()) != null) {
                                                        
pending.completeExceptionally(cause);
                                                }
    +                                           shutdownFuture = new 
CompletableFuture<>();
    +                                           shutdownFuture.complete(null);
                                        }
    -                                   closed = true;
    +                                   shutdownFuture.thenRun(() -> closed = 
true);
    --- End diff --
    
    Why do we set `closed` to true` only after the shutdown completed? 
Shouldn't `close` directly set it to true such that all preceding operations 
won't be executed anymore?


> AbstractServerBase#shutdown does not wait for shutdown completion
> -----------------------------------------------------------------
>
>                 Key: FLINK-7974
>                 URL: https://issues.apache.org/jira/browse/FLINK-7974
>             Project: Flink
>          Issue Type: Bug
>          Components: Queryable State
>    Affects Versions: 1.4.0
>            Reporter: Till Rohrmann
>            Assignee: Kostas Kloudas
>            Priority: Critical
>
> The {{AbstractServerBase}} does not wait for the completion of its shutdown 
> when calling {{AbstractServerBase#shutdown}}. This is problematic since it 
> leads to resource leaks and instable tests such as the 
> {{AbstractServerTest}}. I propose to let the {{AbstractServerBase#shutdown}} 
> return a termination future which is completed upon shutdown completion.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to