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

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

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

    https://github.com/apache/flink/pull/6329#discussion_r202655436
  
    --- Diff: 
flink-runtime/src/main/java/org/apache/flink/runtime/rest/handler/taskmanager/AbstractTaskManagerFileHandler.java
 ---
    @@ -208,51 +209,77 @@ private void 
removeBlob(RemovalNotification<ResourceID, CompletableFuture<Transi
        }
     
        private void transferFile(ChannelHandlerContext ctx, File file, 
HttpRequest httpRequest) throws FlinkException {
    -           try (final RandomAccessFile randomAccessFile = new 
RandomAccessFile(file, "r")) {
    -                   final long fileLength = randomAccessFile.length();
    +           final RandomAccessFile randomAccessFile;
     
    -                   try (final FileChannel fileChannel = 
randomAccessFile.getChannel()) {
    +           try {
    +                   randomAccessFile = new RandomAccessFile(file, "r");
    +           } catch (FileNotFoundException e) {
    +                   throw new FlinkException("Can not find file " + file + 
".", e);
    +           }
     
    -                           HttpResponse response = new 
DefaultHttpResponse(HTTP_1_1, OK);
    -                           response.headers().set(CONTENT_TYPE, 
"text/plain");
    +           final long fileLength;
     
    -                           if (HttpHeaders.isKeepAlive(httpRequest)) {
    -                                   response.headers().set(CONNECTION, 
HttpHeaders.Values.KEEP_ALIVE);
    -                           }
    -                           HttpHeaders.setContentLength(response, 
fileLength);
    -
    -                           // write the initial line and the header.
    -                           ctx.write(response);
    -
    -                           // write the content.
    -                           final ChannelFuture lastContentFuture;
    -                           final GenericFutureListener<Future<? super 
Void>> completionListener = future -> {
    -                                   fileChannel.close();
    -                                   randomAccessFile.close();
    -                           };
    -
    -                           if (ctx.pipeline().get(SslHandler.class) == 
null) {
    -                                   ctx.write(
    -                                           new 
DefaultFileRegion(fileChannel, 0, fileLength), ctx.newProgressivePromise())
    -                                           
.addListener(completionListener);
    -                                   lastContentFuture = 
ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
    -
    -                           } else {
    -                                   lastContentFuture = ctx
    -                                           .writeAndFlush(
    -                                                   new 
HttpChunkedInput(new ChunkedFile(randomAccessFile, 0, fileLength, 8192)),
    -                                                   
ctx.newProgressivePromise())
    -                                           
.addListener(completionListener);
    -
    -                                   // HttpChunkedInput will write the end 
marker (LastHttpContent) for us.
    -                           }
    +           try {
    +                   fileLength = randomAccessFile.length();
    --- End diff --
    
    you could move this back into the following try block, like this:
    ```
    try {
                        final long fileLength = randomAccessFile.length();
                        final FileChannel fileChannel = 
randomAccessFile.getChannel();
    
                        try {
                                [... actual handler code ...]
                        } catch (Exception e) {
                                fileChannel.close();
                                throw e;
                        }
                } catch (IOException ioe) {
                        try {
                                randomAccessFile.close();
                        } catch (IOException e) {
                                log.warn("Error while closing file.", e);
                        }
                }
    ```


> Web UI only show partial taskmanager log 
> -----------------------------------------
>
>                 Key: FLINK-9841
>                 URL: https://issues.apache.org/jira/browse/FLINK-9841
>             Project: Flink
>          Issue Type: Bug
>    Affects Versions: 1.5.0
>         Environment: env : Flink on YARN
> version : 1.5.0
>            Reporter: vinoyang
>            Assignee: vinoyang
>            Priority: Major
>              Labels: pull-request-available
>
>  
> In the web UI, we select a task manager and click the "log" tab, but the UI 
> only show the partial log (first part), can never update even if we click the 
> "refresh" button.
> However, the job manager is always OK.
> The reason is the resource be closed twice.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to