This is an automated email from the ASF dual-hosted git repository. zanderxu pushed a commit to branch HDFS-17384 in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 3214795bce1945508087ca442326f9d831d713bf 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 6628b56a132e..6237862ed4bb 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.ErasureCodingPolicy; 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 @@ final class 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 @@ final class FSDirErasureCodingOp { */ 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 @@ final class FSDirErasureCodingOp { 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 @@ final class FSDirErasureCodingOp { 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 @@ final class FSDirErasureCodingOp { 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 @@ final class FSDirErasureCodingOp { */ 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 @@ final class FSDirErasureCodingOp { */ 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 09cd8ac128b8..1fda50be26a9 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 @@ -8319,7 +8319,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, 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); @@ -8329,7 +8329,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, logAuditEvent(false, operationName, srcArg); throw ace; } finally { - writeUnlock(operationName, + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(srcArg, null, resultingStat)); } getEditLog().logSync(); @@ -8352,7 +8352,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, checkErasureCodingSupported(operationName); List<AddErasureCodingPolicyResponse> responses = new ArrayList<>(policies.length); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot add erasure coding policy"); @@ -8368,7 +8368,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, } } } finally { - writeUnlock(operationName, + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(addECPolicyNames.toString())); } getEditLog().logSync(); @@ -8388,7 +8388,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, final String operationName = "removeErasureCodingPolicy"; checkOperation(OperationCategory.WRITE); checkErasureCodingSupported(operationName); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot remove erasure coding policy " @@ -8396,7 +8396,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, FSDirErasureCodingOp.removeErasureCodingPolicy(this, ecPolicyName, logRetryCache); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(ecPolicyName)); + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(ecPolicyName)); } getEditLog().logSync(); logAuditEvent(true, operationName, ecPolicyName, null, null); @@ -8417,7 +8417,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, checkErasureCodingSupported(operationName); boolean success = false; try { - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot enable erasure coding policy " @@ -8425,7 +8425,8 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, success = FSDirErasureCodingOp.enableErasureCodingPolicy(this, ecPolicyName, logRetryCache); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(ecPolicyName)); + writeUnlock(FSNamesystemLockMode.FS, operationName, + getLockReportInfoSupplier(ecPolicyName)); } } catch (AccessControlException ace) { logAuditEvent(false, operationName, ecPolicyName); @@ -8452,7 +8453,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, checkErasureCodingSupported(operationName); boolean success = false; try { - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot disable erasure coding policy " @@ -8460,7 +8461,8 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, success = FSDirErasureCodingOp.disableErasureCodingPolicy(this, ecPolicyName, logRetryCache); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(ecPolicyName)); + writeUnlock(FSNamesystemLockMode.FS, operationName, + getLockReportInfoSupplier(ecPolicyName)); } } catch (AccessControlException ace) { logAuditEvent(false, operationName, ecPolicyName); @@ -8489,14 +8491,14 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, 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(); @@ -8516,7 +8518,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, checkSuperuserPrivilege(operationName); checkOperation(OperationCategory.UNCHECKED); ECTopologyVerifierResult result; - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.UNCHECKED); // If no policy name is specified return the result @@ -8539,7 +8541,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, .getECTopologyVerifierResult(numOfRacks, numOfDataNodes, policies); } } finally { - readUnlock(operationName, getLockReportInfoSupplier(null)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); } logAuditEvent(true, operationName, null); return result; @@ -8556,7 +8558,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, checkErasureCodingSupported(operationName); final FSPermissionChecker pc = getPermissionChecker(); FSPermissionChecker.setOperationType(operationName); - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.READ); final ErasureCodingPolicy ret = @@ -8564,7 +8566,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, success = true; return ret; } finally { - readUnlock(operationName, getLockReportInfoSupplier(src)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(src)); logAuditEvent(success, operationName, src); } } @@ -8577,7 +8579,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, boolean success = false; checkOperation(OperationCategory.READ); checkErasureCodingSupported(operationName); - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.READ); final ErasureCodingPolicyInfo[] ret = @@ -8585,7 +8587,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, success = true; return ret; } finally { - readUnlock(operationName, getLockReportInfoSupplier(null)); + readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); logAuditEvent(success, operationName, null); } } @@ -8598,7 +8600,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, boolean success = false; checkOperation(OperationCategory.READ); checkErasureCodingSupported(operationName); - readLock(); + readLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.READ); final Map<String, String> ret = @@ -8606,7 +8608,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, 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