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

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

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

    https://github.com/apache/flink/pull/4993#discussion_r150899000
  
    --- Diff: 
flink-queryable-state/flink-queryable-state-client-java/src/main/java/org/apache/flink/queryablestate/network/Client.java
 ---
    @@ -419,20 +472,31 @@ void close() {
                 * @param cause The cause to close the channel with.
                 * @return Channel close future
                 */
    -           private boolean close(Throwable cause) {
    -                   if (failureCause.compareAndSet(null, cause)) {
    -                           channel.close();
    -                           stats.reportInactiveConnection();
    +           private CompletableFuture<Boolean> close(Throwable cause) {
    +                   final CompletableFuture<Boolean> shutdownFuture = new 
CompletableFuture<>();
     
    -                           for (long requestId : pendingRequests.keySet()) 
{
    -                                   TimestampedCompletableFuture pending = 
pendingRequests.remove(requestId);
    -                                   if (pending != null && 
pending.completeExceptionally(cause)) {
    -                                           stats.reportFailedRequest();
    +                   if (connectionShutdownFuture.compareAndSet(null, 
shutdownFuture) &&
    +                                   failureCause.compareAndSet(null, 
cause)) {
    +
    +                           channel.close().addListener(finished -> {
    +                                   stats.reportInactiveConnection();
    +                                   for (long requestId : 
pendingRequests.keySet()) {
    +                                           TimestampedCompletableFuture 
pending = pendingRequests.remove(requestId);
    +                                           if (pending != null && 
pending.completeExceptionally(cause)) {
    +                                                   
stats.reportFailedRequest();
    +                                           }
                                        }
    -                           }
    -                           return true;
    +
    +                                   if (finished.isSuccess()) {
    --- End diff --
    
    This seems weird at first sight but I'm guessing it's correct. I.e. we 
never finish the returned Future with the `cause` that was handed in. We only 
fail it exceptionally if anything in closing the channel went wrong, right? 


> 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