|
@@ -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");
|
|
|
}
|
|
|
}
|
|
|
|