Skip to content
Closed
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 @@ -35,22 +35,22 @@ enum LockLevel {
/**
* Acquire readLock and then lock.
*/
T readLock(LockLevel level, String... resources);
T readLock(LockLevel level, String opName, String... resources);

/**
* Acquire writeLock and then lock.
*/
T writeLock(LockLevel level, String... resources);
T writeLock(LockLevel level, String opName, String... resources);

/**
* Add a lock to LockManager.
*/
void addLock(LockLevel level, String... resources);
void addLock(LockLevel level, String opName, String... resources);

/**
* Remove a lock from LockManager.
*/
void removeLock(LockLevel level, String... resources);
void removeLock(LockLevel level, String opName, String... resources);

/**
* LockManager may need to back hook.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,21 @@ public NoLockManager() {
}

@Override
public AutoCloseDataSetLock readLock(LockLevel level, String... resources) {
public AutoCloseDataSetLock readLock(LockLevel level, String opName, String... resources) {
return lock;
}

@Override
public AutoCloseDataSetLock writeLock(LockLevel level, String... resources) {
public AutoCloseDataSetLock writeLock(LockLevel level, String opName, String... resources) {
return lock;
}

@Override
public void addLock(LockLevel level, String... resources) {
public void addLock(LockLevel level, String opName, String... resources) {
}

@Override
public void removeLock(LockLevel level, String... resources) {
public void removeLock(LockLevel level, String opName, String... resources) {
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ private void connectToNNAndHandshake() throws IOException {
NamespaceInfo nsInfo = retrieveNamespaceInfo();

// init block pool lock when init.
dn.getDataSetLockManager().addLock(LockLevel.BLOCK_POOl,
dn.getDataSetLockManager().addLock(LockLevel.BLOCK_POOl, "connectToNNAndHandshake",
nsInfo.getBlockPoolID());

// Verify that this matches the other NN in this HA pair.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ class BlockSender implements java.io.Closeable {
ChunkChecksum chunkChecksum = null;
final long replicaVisibleLength;
try (AutoCloseableLock lock = datanode.getDataSetLockManager().readLock(
LockLevel.BLOCK_POOl, block.getBlockPoolId())) {
LockLevel.BLOCK_POOl, "BlockSender", block.getBlockPoolId())) {
replica = getReplica(block, datanode);
replicaVisibleLength = replica.getVisibleLength();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3460,7 +3460,8 @@ void transferReplicaForPipelineRecovery(final ExtendedBlock b,

//get replica information
try (AutoCloseableLock lock = dataSetLockManager.readLock(
LockLevel.BLOCK_POOl, b.getBlockPoolId())) {
LockLevel.BLOCK_POOl,
"transferReplicaForPipelineRecovery", b.getBlockPoolId())) {
Block storedBlock = data.getStoredBlock(b.getBlockPoolId(),
b.getBlockId());
if (null == storedBlock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,21 +78,22 @@ public synchronized AutoCloseDataSetLock getWriteLock(String name) {
/**
* Generate lock order string concatenates with lock name.
* @param level which level lock want to acquire.
* @param opName operate name
* @param resources lock name by lock order.
* @return lock order string concatenates with lock name.
*/
private String generateLockName(LockLevel level, String... resources) {
private String generateLockName(LockLevel level, String opName, String... resources) {
if (resources.length == 1 && level == LockLevel.BLOCK_POOl) {
if (resources[0] == null) {
throw new IllegalArgumentException("acquire a null block pool lock");
}
return resources[0];
return opName + ":" + resources[0];
} else if (resources.length == 2 && level == LockLevel.VOLUME) {
if (resources[0] == null || resources[1] == null) {
throw new IllegalArgumentException("acquire a null bp lock : "
+ resources[0] + "volume lock :" + resources[1]);
}
return resources[0] + resources[1];
return opName + ":" + resources[0] + resources[1];
} else {
throw new IllegalArgumentException("lock level do not match resource");
}
Expand Down Expand Up @@ -149,12 +150,12 @@ public DataSetLockManager() {
}

@Override
public AutoCloseDataSetLock readLock(LockLevel level, String... resources) {
public AutoCloseDataSetLock readLock(LockLevel level, String opName, String... resources) {
if (level == LockLevel.BLOCK_POOl) {
return getReadLock(level, resources[0]);
return getReadLock(level, opName, resources[0]);
} else {
AutoCloseDataSetLock bpLock = getReadLock(LockLevel.BLOCK_POOl, resources[0]);
AutoCloseDataSetLock volLock = getReadLock(level, resources);
AutoCloseDataSetLock bpLock = getReadLock(LockLevel.BLOCK_POOl, opName, resources[0]);
AutoCloseDataSetLock volLock = getReadLock(level, opName, resources);
volLock.setParentLock(bpLock);
if (openLockTrace) {
LOG.info("Sub lock " + resources[0] + resources[1] + " parent lock " +
Expand All @@ -165,12 +166,12 @@ public AutoCloseDataSetLock readLock(LockLevel level, String... resources) {
}

@Override
public AutoCloseDataSetLock writeLock(LockLevel level, String... resources) {
public AutoCloseDataSetLock writeLock(LockLevel level, String opName, String... resources) {
if (level == LockLevel.BLOCK_POOl) {
return getWriteLock(level, resources[0]);
return getWriteLock(level, opName, resources[0]);
} else {
AutoCloseDataSetLock bpLock = getReadLock(LockLevel.BLOCK_POOl, resources[0]);
AutoCloseDataSetLock volLock = getWriteLock(level, resources);
AutoCloseDataSetLock bpLock = getReadLock(LockLevel.BLOCK_POOl, opName, resources[0]);
AutoCloseDataSetLock volLock = getWriteLock(level, opName, resources);
volLock.setParentLock(bpLock);
if (openLockTrace) {
LOG.info("Sub lock " + resources[0] + resources[1] + " parent lock " +
Expand All @@ -183,8 +184,8 @@ public AutoCloseDataSetLock writeLock(LockLevel level, String... resources) {
/**
* Return a not null ReadLock.
*/
private AutoCloseDataSetLock getReadLock(LockLevel level, String... resources) {
String lockName = generateLockName(level, resources);
private AutoCloseDataSetLock getReadLock(LockLevel level, String opName, String... resources) {
String lockName = generateLockName(level, opName, resources);
AutoCloseDataSetLock lock = lockMap.getReadLock(lockName);
if (lock == null) {
LOG.warn("Ignore this error during dn restart: Not existing readLock "
Expand All @@ -202,8 +203,8 @@ private AutoCloseDataSetLock getReadLock(LockLevel level, String... resources) {
/**
* Return a not null WriteLock.
*/
private AutoCloseDataSetLock getWriteLock(LockLevel level, String... resources) {
String lockName = generateLockName(level, resources);
private AutoCloseDataSetLock getWriteLock(LockLevel level, String opName, String... resources) {
String lockName = generateLockName(level, opName, resources);
AutoCloseDataSetLock lock = lockMap.getWriteLock(lockName);
if (lock == null) {
LOG.warn("Ignore this error during dn restart: Not existing writeLock"
Expand All @@ -219,8 +220,8 @@ private AutoCloseDataSetLock getWriteLock(LockLevel level, String... resources)
}

@Override
public void addLock(LockLevel level, String... resources) {
String lockName = generateLockName(level, resources);
public void addLock(LockLevel level, String opName, String... resources) {
String lockName = generateLockName(level, opName, resources);
if (level == LockLevel.BLOCK_POOl) {
lockMap.addLock(lockName, new ReentrantReadWriteLock(isFair));
} else {
Expand All @@ -230,9 +231,9 @@ public void addLock(LockLevel level, String... resources) {
}

@Override
public void removeLock(LockLevel level, String... resources) {
String lockName = generateLockName(level, resources);
try (AutoCloseDataSetLock lock = writeLock(level, resources)) {
public void removeLock(LockLevel level, String opName, String... resources) {
String lockName = generateLockName(level, opName, resources);
try (AutoCloseDataSetLock lock = writeLock(level, opName, resources)) {
lock.lock();
lockMap.removeLock(lockName);
}
Expand Down
Loading