mkuchenbecker commented on code in PR #4967:
URL: https://github.com/apache/hadoop/pull/4967#discussion_r988403730


##########
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java:
##########
@@ -3898,4 +3898,31 @@ public DatanodeInfo[] getSlowDatanodeStats() throws 
IOException {
     return dfs.slowDatanodeReport();
   }
 
+  /* HDFS only */
+  public Path getEnclosingRoot(final Path path) throws IOException {
+    statistics.incrementReadOps(1);
+    storageStatistics.incrementOpCounter(OpType.GET_ENCLOSING_ROOT);
+    Preconditions.checkNotNull(path);
+    Path absF = fixRelativePart(path);
+    return new FileSystemLinkResolver<Path>() {
+      @Override
+      public Path doCall(final Path p) throws IOException {
+        return dfs.getEnclosingRoot(getPathName(p));
+      }
+
+      @Override
+      public Path next(final FileSystem fs, final Path p)
+          throws IOException {
+        if (fs instanceof DistributedFileSystem) {

Review Comment:
   Nit, I would reverse the condition and say:
   if not instanceof then throw
   // Logic
   



##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java:
##########
@@ -1919,6 +1927,14 @@ public Collection<? extends BlockStoragePolicySpi> 
getAllStoragePolicies()
       }
       return allPolicies;
     }
+
+    @Override
+    public Path getEnclosingRoot(Path path) throws IOException {

Review Comment:
   They both override; you could consider a static helper to DRY. 



##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClientProtocol.java:
##########
@@ -1935,6 +1935,21 @@ public DatanodeInfo[] getSlowDatanodeReport() throws 
IOException {
     return rpcServer.getSlowDatanodeReport(true, 0);
   }
 
+  @Override
+  public String getEnclosingRoot(String src) throws IOException {
+    Path mountPath = new Path("/");
+    if (subclusterResolver instanceof MountTableResolver) {
+      MountTableResolver mountTable = (MountTableResolver) subclusterResolver;
+      if (mountTable.getMountPoint(src) != null) {
+        // unclear if this is the correct thing to do, probably depends on 
default mount point / link fallback
+        mountPath = new Path(mountTable.getMountPoint(src).getSourcePath());

Review Comment:
   getMonutPoint can return null. 



##########
hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/ClientNamenodeProtocol.proto:
##########
@@ -428,6 +428,14 @@ message GetPreferredBlockSizeResponseProto {
 message GetSlowDatanodeReportRequestProto {
 }
 
+message GetEnclosingRootRequestProto {
+  required string filename = 1;

Review Comment:
   I'd use optional. Required has been deprecated in Proto3. 
   
   
https://stackoverflow.com/questions/31801257/why-required-and-optional-is-removed-in-protocol-buffers-3



##########
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java:
##########
@@ -1888,4 +1889,11 @@ BatchedEntries<OpenFileEntry> listOpenFiles(long prevId,
   @ReadOnly
   DatanodeInfo[] getSlowDatanodeReport() throws IOException;
 
+  /**
+   * Get the enclosing root for a path.
+   */
+  @Idempotent
+  @ReadOnly(isCoordinated = true)
+  String getEnclosingRoot(String src) throws IOException;

Review Comment:
   +1, Path is getting implicitly cast as string. 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to