浏览代码

HDFS-7008. xlator should be closed upon exit from DFSAdmin#genericRefresh(). (ozawa)

Tsuyoshi Ozawa 10 年之前
父节点
当前提交
b53fd7163b

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -1014,6 +1014,9 @@ Release 2.7.0 - UNRELEASED
     HDFS-7805. NameNode recovery prompt should be printed on console (Surendra
     HDFS-7805. NameNode recovery prompt should be printed on console (Surendra
     Singh Lilhore via Colin P. McCabe)
     Singh Lilhore via Colin P. McCabe)
 
 
+    HDFS-7008. xlator should be closed upon exit from DFSAdmin#genericRefresh().
+    (ozawa)
+
     BREAKDOWN OF HDFS-7584 SUBTASKS AND RELATED JIRAS
     BREAKDOWN OF HDFS-7584 SUBTASKS AND RELATED JIRAS
 
 
       HDFS-7720. Quota by Storage Type API, tools and ClientNameNode
       HDFS-7720. Quota by Storage Type API, tools and ClientNameNode

+ 27 - 22
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSAdmin.java

@@ -1496,30 +1496,35 @@ public class DFSAdmin extends FsShell {
       RPC.getProxy(xface, RPC.getProtocolVersion(xface), address,
       RPC.getProxy(xface, RPC.getProtocolVersion(xface), address,
         ugi, conf, NetUtils.getDefaultSocketFactory(conf), 0);
         ugi, conf, NetUtils.getDefaultSocketFactory(conf), 0);
 
 
-    GenericRefreshProtocol xlator =
-      new GenericRefreshProtocolClientSideTranslatorPB(proxy);
-
-    // Refresh
-    Collection<RefreshResponse> responses = xlator.refresh(identifier, args);
-
-    int returnCode = 0;
-
-    // Print refresh responses
-    System.out.println("Refresh Responses:\n");
-    for (RefreshResponse response : responses) {
-      System.out.println(response.toString());
-
-      if (returnCode == 0 && response.getReturnCode() != 0) {
-        // This is the first non-zero return code, so we should return this
-        returnCode = response.getReturnCode();
-      } else if (returnCode != 0 && response.getReturnCode() != 0) {
-        // Then now we have multiple non-zero return codes,
-        // so we merge them into -1
-        returnCode = -1;
+    Collection<RefreshResponse> responses = null;
+    try (GenericRefreshProtocolClientSideTranslatorPB xlator =
+        new GenericRefreshProtocolClientSideTranslatorPB(proxy);) {
+      // Refresh
+      responses = xlator.refresh(identifier, args);
+
+      int returnCode = 0;
+
+      // Print refresh responses
+      System.out.println("Refresh Responses:\n");
+      for (RefreshResponse response : responses) {
+        System.out.println(response.toString());
+
+        if (returnCode == 0 && response.getReturnCode() != 0) {
+          // This is the first non-zero return code, so we should return this
+          returnCode = response.getReturnCode();
+        } else if (returnCode != 0 && response.getReturnCode() != 0) {
+          // Then now we have multiple non-zero return codes,
+          // so we merge them into -1
+          returnCode = - 1;
+        }
+      }
+      return returnCode;
+    } finally {
+      if (responses == null) {
+        System.out.println("Failed to get response.\n");
+        return -1;
       }
       }
     }
     }
-
-    return returnCode;
   }
   }
 
 
   /**
   /**