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

ASF GitHub Bot commented on HDFS-17263:
---------------------------------------

LiuGuH commented on code in PR #6291:
URL: https://github.com/apache/hadoop/pull/6291#discussion_r1404159749


##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java:
##########
@@ -357,7 +357,7 @@ public void refreshEntries(final Collection<MountTable> 
entries) {
   @VisibleForTesting
   public static boolean isTrashPath(String path) throws IOException {
     Pattern pattern = Pattern.compile(
-        "^" + getTrashRoot() + TRASH_PATTERN + "/");
+        "^" + getTrashRoot() + TRASH_PATTERN);

Review Comment:
   In  other word, if client listStatus trashpath like 
'/user/test-trash/.Trash/Current',  this is not consider a trash path
   `   if (isTrashPath(path)) {
         path = subtractTrashCurrentPath(path);
       }`
   
   And then it will not find any mountpoint for this trash path,and only return 
defalut nameservice mountpoint
   
   ` public PathLocation getDestinationForPath(final String path)
         throws IOException {
       verifyMountTable();
       PathLocation res;
       readLock.lock();
       try {
         if (this.locationCache == null) {
           res = lookupLocation(processTrashPath(path));
         } else {
           Callable<? extends PathLocation> meh = (Callable<PathLocation>) () 
-> {
             this.getLocCacheMiss().increment();
             return lookupLocation(processTrashPath(path));
           };
           res = this.locationCache.get(processTrashPath(path), meh);
           this.getLocCacheAccess().increment();
         }
         if (isTrashPath(path)) {
           List<RemoteLocation> remoteLocations = new ArrayList<>();
           for (RemoteLocation remoteLocation : res.getDestinations()) {
             remoteLocations.add(new RemoteLocation(remoteLocation, path));
           }
           return new PathLocation(path, remoteLocations,
               res.getDestinationOrder());
         } else {
           return res;
         }
       } catch (ExecutionException e) {
         Throwable cause = e.getCause();
         final IOException ioe;
         if (cause instanceof IOException) {
           ioe = (IOException) cause;
         } else {
           ioe = new IOException(cause);
         }
         throw ioe;
       } finally {
         readLock.unlock();
       }
     }`





> RBF: Fix client ls trash path cannot get except default nameservices trash 
> path
> -------------------------------------------------------------------------------
>
>                 Key: HDFS-17263
>                 URL: https://issues.apache.org/jira/browse/HDFS-17263
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>            Reporter: liuguanghua
>            Priority: Major
>              Labels: pull-request-available
>
> With  HDFS-16024, we can rename data to the Trash should be based on src 
> locations. That is great for my useage.  After a period of use, I found this 
> cause a issue.
> There are two nameservices ns0   ns1,  and ns0 is the default nameservice.
> (1) Add moutTable 
> /home/data -> (ns0, /home/data)
> /data1/test1 -> (ns1, /data1/test1 )
> /data2/test2 -> (ns1, /data2/test2 )
> (2)mv file to trash
> ns0:   /user/test-user/.Trash/Current/home/data/file1
> ns1:   /user/test-user/.Trash/Current/data1/test1/file1
> (3) client via DFSRouter  ls will not see  
> /user/test-user/.Trash/Current/data1
> (4) client ls  /user/test-user/.Trash/Current/data2/test2 will return 
> exception .
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to