Przeglądaj źródła

HADOOP-18476. Abfs and S3A FileContext bindings to close wrapped filesystems in finalizer (#4966)

This is to try and close the underlying filesystems when the FileContext APIs are used.
Without this, threads may be leaked
Steve Loughran 2 lat temu
rodzic
commit
d80db6c9e5

+ 11 - 2
hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3A.java

@@ -33,10 +33,10 @@ import java.net.URISyntaxException;
  */
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
-public class S3A extends DelegateToFileSystem{
+public class S3A extends DelegateToFileSystem {
 
   public S3A(URI theUri, Configuration conf)
-          throws IOException, URISyntaxException {
+      throws IOException, URISyntaxException {
     super(theUri, new S3AFileSystem(), conf, "s3a", false);
   }
 
@@ -54,4 +54,13 @@ public class S3A extends DelegateToFileSystem{
     sb.append('}');
     return sb.toString();
   }
+
+  /**
+   * Close the file system; the FileContext API doesn't have an explicit close.
+   */
+  @Override
+  protected void finalize() throws Throwable {
+    fsImpl.close();
+    super.finalize();
+  }
 }

+ 9 - 0
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/Abfs.java

@@ -43,4 +43,13 @@ public class Abfs extends DelegateToFileSystem {
   public int getUriDefaultPort() {
     return -1;
   }
+
+  /**
+   * Close the file system; the FileContext API doesn't have an explicit close.
+   */
+  @Override
+  protected void finalize() throws Throwable {
+    fsImpl.close();
+    super.finalize();
+  }
 }

+ 9 - 0
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/Abfss.java

@@ -43,4 +43,13 @@ public class Abfss extends DelegateToFileSystem {
   public int getUriDefaultPort() {
     return -1;
   }
+
+  /**
+   * Close the file system; the FileContext API doesn't have an explicit close.
+   */
+  @Override
+  protected void finalize() throws Throwable {
+    fsImpl.close();
+    super.finalize();
+  }
 }