Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8319,7 +8319,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);
Expand All @@ -8329,7 +8329,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();
Expand All @@ -8352,7 +8352,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");
Expand All @@ -8368,7 +8368,7 @@ AddErasureCodingPolicyResponse[] addErasureCodingPolicies(
}
}
} finally {
writeUnlock(operationName,
writeUnlock(FSNamesystemLockMode.FS, operationName,
getLockReportInfoSupplier(addECPolicyNames.toString()));
}
getEditLog().logSync();
Expand All @@ -8388,15 +8388,15 @@ 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 "
+ 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);
Expand All @@ -8417,15 +8417,16 @@ boolean enableErasureCodingPolicy(String ecPolicyName,
checkErasureCodingSupported(operationName);
boolean success = false;
try {
writeLock();
writeLock(FSNamesystemLockMode.FS);
try {
checkOperation(OperationCategory.WRITE);
checkNameNodeSafeMode("Cannot enable erasure coding policy "
+ 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);
Expand All @@ -8452,15 +8453,16 @@ boolean disableErasureCodingPolicy(String ecPolicyName,
checkErasureCodingSupported(operationName);
boolean success = false;
try {
writeLock();
writeLock(FSNamesystemLockMode.FS);
try {
checkOperation(OperationCategory.WRITE);
checkNameNodeSafeMode("Cannot disable erasure coding policy "
+ 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);
Expand Down Expand Up @@ -8489,14 +8491,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();
Expand All @@ -8516,7 +8518,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
Expand All @@ -8539,7 +8541,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;
Expand All @@ -8556,15 +8558,15 @@ ErasureCodingPolicy getErasureCodingPolicy(String src)
checkErasureCodingSupported(operationName);
final FSPermissionChecker pc = getPermissionChecker();
FSPermissionChecker.setOperationType(operationName);
readLock();
readLock(FSNamesystemLockMode.FS);
try {
checkOperation(OperationCategory.READ);
final ErasureCodingPolicy ret =
FSDirErasureCodingOp.getErasureCodingPolicy(this, src, pc);
success = true;
return ret;
} finally {
readUnlock(operationName, getLockReportInfoSupplier(src));
readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(src));
logAuditEvent(success, operationName, src);
}
}
Expand All @@ -8577,15 +8579,15 @@ ErasureCodingPolicyInfo[] getErasureCodingPolicies() throws IOException {
boolean success = false;
checkOperation(OperationCategory.READ);
checkErasureCodingSupported(operationName);
readLock();
readLock(FSNamesystemLockMode.FS);
try {
checkOperation(OperationCategory.READ);
final ErasureCodingPolicyInfo[] ret =
FSDirErasureCodingOp.getErasureCodingPolicies(this);
success = true;
return ret;
} finally {
readUnlock(operationName, getLockReportInfoSupplier(null));
readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null));
logAuditEvent(success, operationName, null);
}
}
Expand All @@ -8598,15 +8600,15 @@ 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 =
FSDirErasureCodingOp.getErasureCodingCodecs(this);
success = true;
return ret;
} finally {
readUnlock(operationName, getLockReportInfoSupplier(null));
readUnlock(FSNamesystemLockMode.FS, operationName, getLockReportInfoSupplier(null));
logAuditEvent(success, operationName, null);
}
}
Expand Down