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 ea3cbae809acc4d466e6b6874b0d8d12f6e67d16 Author: ZanderXu <zande...@apache.org> AuthorDate: Wed Mar 27 09:44:11 2024 +0800 HDFS-17415. [FGL] RPCs in NamenodeProtocol support fine-grained lock (#6654) --- .../hadoop/hdfs/server/namenode/Checkpointer.java | 10 +++++---- .../hadoop/hdfs/server/namenode/FSNamesystem.java | 25 +++++++++++----------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/Checkpointer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/Checkpointer.java index ab657fb67249..465aad3ec50b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/Checkpointer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/Checkpointer.java @@ -32,6 +32,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hdfs.DFSUtil; import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NamenodeRole; import org.apache.hadoop.hdfs.server.namenode.NNStorage.NameNodeFile; +import org.apache.hadoop.hdfs.server.namenode.fgl.FSNamesystemLockMode; import org.apache.hadoop.hdfs.server.protocol.CheckpointCommand; import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand; import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol; @@ -244,13 +245,14 @@ class Checkpointer extends Daemon { if(needReloadImage) { LOG.info("Loading image with txid " + sig.mostRecentCheckpointTxId); - backupNode.namesystem.writeLock(); + backupNode.namesystem.writeLock(FSNamesystemLockMode.GLOBAL); try { File file = bnStorage.findImageFile(NameNodeFile.IMAGE, sig.mostRecentCheckpointTxId); bnImage.reloadFromImageFile(file, backupNode.getNamesystem()); } finally { - backupNode.namesystem.writeUnlock("doCheckpointByBackupNode"); + backupNode.namesystem.writeUnlock( + FSNamesystemLockMode.GLOBAL, "doCheckpointByBackupNode"); } } rollForwardByApplyingLogs(manifest, bnImage, backupNode.getNamesystem()); @@ -258,7 +260,7 @@ class Checkpointer extends Daemon { long txid = bnImage.getLastAppliedTxId(); - backupNode.namesystem.writeLock(); + backupNode.namesystem.writeLock(FSNamesystemLockMode.GLOBAL); try { backupNode.namesystem.setImageLoaded(); if(backupNode.namesystem.getBlocksTotal() > 0) { @@ -272,7 +274,7 @@ class Checkpointer extends Daemon { bnImage.updateStorageVersion(); } } finally { - backupNode.namesystem.writeUnlock("doCheckpoint"); + backupNode.namesystem.writeUnlock(FSNamesystemLockMode.GLOBAL, "doCheckpoint"); } if(cpCmd.needToReturnImage()) { 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 dbb5cfbf1951..cbd81c1f5578 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 @@ -1977,13 +1977,13 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, isGetBlocksCheckOperationEnabled ? OperationCategory.READ : OperationCategory.UNCHECKED; checkOperation(checkOp); - readLock(); + readLock(FSNamesystemLockMode.BM); try { checkOperation(checkOp); return getBlockManager().getBlocksWithLocations(datanode, size, minimumBlockSize, timeInterval, storageType); } finally { - readUnlock("getBlocks"); + readUnlock(FSNamesystemLockMode.BM, "getBlocks"); } } @@ -5317,7 +5317,8 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, CheckpointSignature result = null; checkSuperuserPrivilege(operationName); checkOperation(OperationCategory.JOURNAL); - writeLock(); + // Using FSWriteLock to make edit-related operations thread safe. + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.JOURNAL); checkNameNodeSafeMode("Log not rolled"); @@ -5326,7 +5327,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, } result = getFSImage().rollEditLog(getEffectiveLayoutVersion()); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(null)); + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); } logAuditEvent(true, operationName, null); return result; @@ -5335,7 +5336,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, NamenodeCommand startCheckpoint(NamenodeRegistration backupNode, NamenodeRegistration activeNamenode) throws IOException { checkOperation(OperationCategory.CHECKPOINT); - writeLock(); + writeLock(FSNamesystemLockMode.GLOBAL); try { checkOperation(OperationCategory.CHECKPOINT); checkNameNodeSafeMode("Checkpoint not started"); @@ -5346,7 +5347,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, getEditLog().logSync(); return cmd; } finally { - writeUnlock("startCheckpoint"); + writeUnlock(FSNamesystemLockMode.GLOBAL, "startCheckpoint"); } } @@ -5367,14 +5368,14 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, void endCheckpoint(NamenodeRegistration registration, CheckpointSignature sig) throws IOException { checkOperation(OperationCategory.CHECKPOINT); - readLock(); + readLock(FSNamesystemLockMode.GLOBAL); try { checkOperation(OperationCategory.CHECKPOINT); checkNameNodeSafeMode("Checkpoint not ended"); LOG.info("End checkpoint for " + registration.getAddress()); getFSImage().endCheckpoint(sig); } finally { - readUnlock("endCheckpoint"); + readUnlock(FSNamesystemLockMode.GLOBAL, "endCheckpoint"); } } @@ -6129,7 +6130,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, */ void registerBackupNode(NamenodeRegistration bnReg, NamenodeRegistration nnReg) throws IOException { - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { if(getNNStorage().getNamespaceID() != bnReg.getNamespaceID()) @@ -6143,7 +6144,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, bnReg, nnReg); } } finally { - writeUnlock("registerBackupNode"); + writeUnlock(FSNamesystemLockMode.FS, "registerBackupNode"); } } @@ -6156,7 +6157,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, void releaseBackupNode(NamenodeRegistration registration) throws IOException { checkOperation(OperationCategory.WRITE); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); if(getNNStorage().getNamespaceID() @@ -6168,7 +6169,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, " node namespaceID = " + registration.getNamespaceID()); getEditLog().releaseBackupStream(registration); } finally { - writeUnlock("releaseBackupNode"); + writeUnlock(FSNamesystemLockMode.FS, "releaseBackupNode"); } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org