Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
3.3.0, 3.2.1
Description
I met this issue if rm root directory, for remove non-root and non-empty directory, toRemovedBlocks isn't null, its toDeleteList size is 0.
when will return null?
Through this screenshot, we can find that if fileRemoved = -1, then toRemovedBlocks = null
And when deleteAllowed(iip) return false, fileRemoved can be -1,
private static boolean deleteAllowed(final INodesInPath iip) { if (iip.length() < 1 || iip.getLastINode() == null) { if (NameNode.stateChangeLog.isDebugEnabled()) { NameNode.stateChangeLog.debug( "DIR* FSDirectory.unprotectedDelete: failed to remove " + iip.getPath() + " because it does not exist"); } return false; } else if (iip.length() == 1) { // src is the root NameNode.stateChangeLog.warn( "DIR* FSDirectory.unprotectedDelete: failed to remove " + iip.getPath() + " because the root is not allowed to be deleted"); return false; } return true; }
Through the code of deleteAllowed, we can find that when src is the root, it can return false.
So without this PR, when I execute bin/hdfs dfs -rm -r /
I find the confusing auditlog line like following
2020-11-05 14:32:53,420 INFO FSNamesystem.audit (FSNamesystem.java:logAuditMessage(8102)) - allowed=true
Attachments
Attachments
Issue Links
- links to