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 7d37995f46e5f571b22f0acc82f12900e4ed754b 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 ab657fb6724..465aad3ec50 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.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 @@ void doCheckpoint() throws IOException { 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 @@ void doCheckpoint() throws IOException { 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 @@ void doCheckpoint() throws IOException { 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 c0bb69fb0c1..8570b053dc9 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 @@ -1983,13 +1983,13 @@ public BlocksWithLocations getBlocks(DatanodeID datanode, long size, long 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"); } } @@ -5338,7 +5338,8 @@ CheckpointSignature rollEditLog() throws IOException { 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"); @@ -5347,7 +5348,7 @@ CheckpointSignature rollEditLog() throws IOException { } result = getFSImage().rollEditLog(getEffectiveLayoutVersion()); } finally { - writeUnlock(operationName, getLockReportInfoSupplier(null)); + writeUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null)); } logAuditEvent(true, operationName, null); return result; @@ -5356,7 +5357,7 @@ CheckpointSignature rollEditLog() throws IOException { NamenodeCommand startCheckpoint(NamenodeRegistration backupNode, NamenodeRegistration activeNamenode) throws IOException { checkOperation(OperationCategory.CHECKPOINT); - writeLock(); + writeLock(FSNamesystemLockMode.GLOBAL); try { checkOperation(OperationCategory.CHECKPOINT); checkNameNodeSafeMode("Checkpoint not started"); @@ -5367,7 +5368,7 @@ NamenodeCommand startCheckpoint(NamenodeRegistration backupNode, getEditLog().logSync(); return cmd; } finally { - writeUnlock("startCheckpoint"); + writeUnlock(FSNamesystemLockMode.GLOBAL, "startCheckpoint"); } } @@ -5388,14 +5389,14 @@ public void processIncrementalBlockReport(final DatanodeID nodeID, 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"); } } @@ -6156,7 +6157,7 @@ private void updatePipelineInternal(String clientName, ExtendedBlock oldBlock, */ void registerBackupNode(NamenodeRegistration bnReg, NamenodeRegistration nnReg) throws IOException { - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { if(getNNStorage().getNamespaceID() != bnReg.getNamespaceID()) @@ -6170,7 +6171,7 @@ void registerBackupNode(NamenodeRegistration bnReg, bnReg, nnReg); } } finally { - writeUnlock("registerBackupNode"); + writeUnlock(FSNamesystemLockMode.FS, "registerBackupNode"); } } @@ -6183,7 +6184,7 @@ void registerBackupNode(NamenodeRegistration bnReg, void releaseBackupNode(NamenodeRegistration registration) throws IOException { checkOperation(OperationCategory.WRITE); - writeLock(); + writeLock(FSNamesystemLockMode.FS); try { checkOperation(OperationCategory.WRITE); if(getNNStorage().getNamespaceID() @@ -6195,7 +6196,7 @@ void releaseBackupNode(NamenodeRegistration registration) " 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