Forráskód Böngészése

HADOOP-18809. S3A prefetch read/write file operations should guard channel close (#5853)

Contributed by Viraj Jasani
Viraj Jasani 1 éve
szülő
commit
adab0babc7

+ 9 - 9
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java

@@ -271,12 +271,12 @@ public class SingleFilePerBlockCache implements BlockCache {
   protected int readFile(Path path, ByteBuffer buffer) throws IOException {
     int numBytesRead = 0;
     int numBytes;
-    FileChannel channel = FileChannel.open(path, StandardOpenOption.READ);
-    while ((numBytes = channel.read(buffer)) > 0) {
-      numBytesRead += numBytes;
+    try (FileChannel channel = FileChannel.open(path, StandardOpenOption.READ)) {
+      while ((numBytes = channel.read(buffer)) > 0) {
+        numBytesRead += numBytes;
+      }
+      buffer.limit(buffer.position());
     }
-    buffer.limit(buffer.position());
-    channel.close();
     return numBytesRead;
   }
 
@@ -460,11 +460,11 @@ public class SingleFilePerBlockCache implements BlockCache {
 
   protected void writeFile(Path path, ByteBuffer buffer) throws IOException {
     buffer.rewind();
-    WritableByteChannel writeChannel = Files.newByteChannel(path, CREATE_OPTIONS);
-    while (buffer.hasRemaining()) {
-      writeChannel.write(buffer);
+    try (WritableByteChannel writeChannel = Files.newByteChannel(path, CREATE_OPTIONS)) {
+      while (buffer.hasRemaining()) {
+        writeChannel.write(buffer);
+      }
     }
-    writeChannel.close();
   }
 
   /**