[
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]