This is an automated email from the ASF dual-hosted git repository. zanderxu pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 7158b9ee194f6b3063f1aec7fd59dfd0727c2a9c Author: ZanderXu <zande...@apache.org> AuthorDate: Thu Mar 7 14:07:27 2024 +0800 HDFS-17395. [FGL] Use FSLock to protect ErasureCodingPolicy related operations (#6579) --- .../hdfs/server/namenode/FSDirErasureCodingOp.java | 15 ++++---- .../hadoop/hdfs/server/namenode/FSNamesystem.java | 42 +++++++++++----------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java index 6628b56a132..6237862ed4b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java @@ -28,6 +28,7 @@ import org.apache.hadoop.hdfs.protocol.ErasureCodingPolicyInfo; import org.apache.hadoop.hdfs.protocol.NoECPolicySetException; import org.apache.hadoop.hdfs.server.namenode.FSDirectory.DirOp; +import org.apache.hadoop.hdfs.server.namenode.fgl.FSNamesystemLockMode; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.WritableUtils; import org.apache.hadoop.io.erasurecode.CodecRegistry; @@ -71,7 +72,7 @@ private FSDirErasureCodingOp() {} */ static ErasureCodingPolicy getEnabledErasureCodingPolicyByName( final FSNamesystem fsn, final String ecPolicyName) throws IOException { - assert fsn.hasReadLock(); + assert fsn.hasReadLock(FSNamesystemLockMode.FS); ErasureCodingPolicy ecPolicy = fsn.getErasureCodingPolicyManager() .getEnabledPolicyByName(ecPolicyName); if (ecPolicy == null) { @@ -103,7 +104,7 @@ static ErasureCodingPolicy getEnabledErasureCodingPolicyByName( */ static ErasureCodingPolicy getErasureCodingPolicyByName( final FSNamesystem fsn, final String ecPolicyName) throws IOException { - assert fsn.hasReadLock(); + assert fsn.hasReadLock(FSNamesystemLockMode.FS); ErasureCodingPolicy ecPolicy = fsn.getErasureCodingPolicyManager() .getErasureCodingPolicyByName(ecPolicyName); if (ecPolicy == null) { @@ -132,7 +133,7 @@ static FileStatus setErasureCodingPolicy(final FSNamesystem fsn, final String srcArg, final String ecPolicyName, final FSPermissionChecker pc, final boolean logRetryCache) throws IOException, AccessControlException { - assert fsn.hasWriteLock(); + assert fsn.hasWriteLock(FSNamesystemLockMode.FS); String src = srcArg; FSDirectory fsd = fsn.getFSDirectory(); @@ -209,7 +210,7 @@ private static List<XAttr> setErasureCodingPolicyXAttr(final FSNamesystem fsn, static FileStatus unsetErasureCodingPolicy(final FSNamesystem fsn, final String srcArg, final FSPermissionChecker pc, final boolean logRetryCache) throws IOException { - assert fsn.hasWriteLock(); + assert fsn.hasWriteLock(FSNamesystemLockMode.FS); String src = srcArg; FSDirectory fsd = fsn.getFSDirectory(); @@ -353,7 +354,7 @@ private static List<XAttr> removeErasureCodingPolicyXAttr( static ErasureCodingPolicy getErasureCodingPolicy(final FSNamesystem fsn, final String src, FSPermissionChecker pc) throws IOException, AccessControlException { - assert fsn.hasReadLock(); + assert fsn.hasReadLock(FSNamesystemLockMode.FS); if (FSDirectory.isExactReservedName(src)) { return null; @@ -416,7 +417,7 @@ static ErasureCodingPolicy getErasureCodingPolicy(FSNamesystem fsn, */ static ErasureCodingPolicy unprotectedGetErasureCodingPolicy( final FSNamesystem fsn, final INodesInPath iip) throws IOException { - assert fsn.hasReadLock(); + assert fsn.hasReadLock(FSNamesystemLockMode.FS); return getErasureCodingPolicyForPath(fsn.getFSDirectory(), iip); } @@ -441,7 +442,7 @@ static ErasureCodingPolicyInfo[] getErasureCodingPolicies( */ static Map<String, String> getErasureCodingCodecs(final FSNamesystem fsn) throws IOException { - assert fsn.hasReadLock(); + assert fsn.hasReadLock(FSNamesystemLockMode.FS); return CodecRegistry.getInstance().getCodec2CoderCompactMap(); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index 3e404e4f7c9..785c4500e1d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -8354,7 +8354,7 @@ void setErasureCodingPolicy(final String srcArg, final String ecPolicyName, FileStatus resultingStat = null; final FSPermissionChecker pc = getPermissionChecker(); FSPermissionChecker.setOperationType(operationName); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot set erasure coding policy on " + srcArg); @@ -8364,7 +8364,7 @@ void setErasureCodingPolicy(final String srcArg, final String ecPolicyName, logAuditEvent(false, operationName, srcArg); throw ace; } finally { - writeUnlock(operationName, + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(srcArg, null, resultingStat)); } getEditLog().logSync(); @@ -8387,7 +8387,7 @@ AddErasureCodingPolicyResponse[] addErasureCodingPolicies( checkErasureCodingSupported(operationName); List<AddErasureCodingPolicyResponse> responses = new ArrayList<>(policies.length); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot add erasure coding policy"); @@ -8403,7 +8403,7 @@ AddErasureCodingPolicyResponse[] addErasureCodingPolicies( } } } finally { - writeUnlock(operationName, + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(addECPolicyNames.toString())); } getEditLog().logSync(); @@ -8423,7 +8423,7 @@ void removeErasureCodingPolicy(String ecPolicyName, final String operationName = "removeErasureCodingPolicy"; checkOperation(OperationCategory.WRITE); checkErasureCodingSupported(operationName); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot remove erasure coding policy " @@ -8431,7 +8431,7 @@ void removeErasureCodingPolicy(String ecPolicyName, FSDirErasureCodingOp.removeErasureCodingPolicy(this, ecPolicyName, logRetryCache); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(ecPolicyName)); + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(ecPolicyName)); } getEditLog().logSync(); logAuditEvent(true, operationName, ecPolicyName, null, null); @@ -8452,7 +8452,7 @@ boolean enableErasureCodingPolicy(String ecPolicyName, checkErasureCodingSupported(operationName); boolean success = false; try { - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot enable erasure coding policy " @@ -8460,7 +8460,8 @@ boolean enableErasureCodingPolicy(String ecPolicyName, success = FSDirErasureCodingOp.enableErasureCodingPolicy(this, ecPolicyName, logRetryCache); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(ecPolicyName)); + writeUnlock(FSNamesystemLockMode.FS, operationName, + getLockReportInfoSupplier(ecPolicyName)); } } catch (AccessControlException ace) { logAuditEvent(false, operationName, ecPolicyName); @@ -8487,7 +8488,7 @@ boolean disableErasureCodingPolicy(String ecPolicyName, checkErasureCodingSupported(operationName); boolean success = false; try { - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot disable erasure coding policy " @@ -8495,7 +8496,8 @@ boolean disableErasureCodingPolicy(String ecPolicyName, success = FSDirErasureCodingOp.disableErasureCodingPolicy(this, ecPolicyName, logRetryCache); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(ecPolicyName)); + writeUnlock(FSNamesystemLockMode.FS, operationName, + getLockReportInfoSupplier(ecPolicyName)); } } catch (AccessControlException ace) { logAuditEvent(false, operationName, ecPolicyName); @@ -8524,14 +8526,14 @@ void unsetErasureCodingPolicy(final String srcArg, FileStatus resultingStat = null; final FSPermissionChecker pc = getPermissionChecker(); FSPermissionChecker.setOperationType(operationName); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot unset erasure coding policy on " + srcArg); resultingStat = FSDirErasureCodingOp.unsetErasureCodingPolicy(this, srcArg, pc, logRetryCache); } finally { - writeUnlock(operationName, + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(srcArg, null, resultingStat)); } getEditLog().logSync(); @@ -8551,7 +8553,7 @@ public ECTopologyVerifierResult getECTopologyResultForPolicies( checkSuperuserPrivilege(operationName); checkOperation(OperationCategory.UNCHECKED); ECTopologyVerifierResult result; - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.UNCHECKED); // If no policy name is specified return the result @@ -8574,7 +8576,7 @@ public ECTopologyVerifierResult getECTopologyResultForPolicies( .getECTopologyVerifierResult(numOfRacks, numOfDataNodes, policies); } } finally { - readUnlock(operationName, getLockReportInfoSupplier(null)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); } logAuditEvent(true, operationName, null); return result; @@ -8591,7 +8593,7 @@ ErasureCodingPolicy getErasureCodingPolicy(String src) checkErasureCodingSupported(operationName); final FSPermissionChecker pc = getPermissionChecker(); FSPermissionChecker.setOperationType(operationName); - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.READ); final ErasureCodingPolicy ret = @@ -8599,7 +8601,7 @@ ErasureCodingPolicy getErasureCodingPolicy(String src) success = true; return ret; } finally { - readUnlock(operationName, getLockReportInfoSupplier(src)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(src)); logAuditEvent(success, operationName, src); } } @@ -8612,7 +8614,7 @@ ErasureCodingPolicyInfo[] getErasureCodingPolicies() throws IOException { boolean success = false; checkOperation(OperationCategory.READ); checkErasureCodingSupported(operationName); - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.READ); final ErasureCodingPolicyInfo[] ret = @@ -8620,7 +8622,7 @@ ErasureCodingPolicyInfo[] getErasureCodingPolicies() throws IOException { success = true; return ret; } finally { - readUnlock(operationName, getLockReportInfoSupplier(null)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); logAuditEvent(success, operationName, null); } } @@ -8633,7 +8635,7 @@ Map<String, String> getErasureCodingCodecs() throws IOException { boolean success = false; checkOperation(OperationCategory.READ); checkErasureCodingSupported(operationName); - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.READ); final Map<String, String> ret = @@ -8641,7 +8643,7 @@ Map<String, String> getErasureCodingCodecs() throws IOException { success = true; return ret; } finally { - readUnlock(operationName, getLockReportInfoSupplier(null)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); logAuditEvent(success, operationName, null); } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org