HBASE-21553 schedLock not released in MasterProcedureScheduler

Signed-off-by: Andrew Purtell <apurtell@apache.org>
This commit is contained in:
xcang 2018-12-06 22:42:44 -08:00 committed by Andrew Purtell
parent 19c3663119
commit bd33a1ef96
No known key found for this signature in database
GPG Key ID: 8597754DD5365CCD

View File

@ -743,9 +743,11 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
* @return true if we were able to acquire the lock on the table, otherwise false.
*/
public boolean tryAcquireTableExclusiveLock(final Procedure procedure, final TableName table) {
try {
schedLock.lock();
TableQueue queue = getTableQueue(table);
if (!queue.getNamespaceQueue().trySharedLock()) {
schedLock.unlock();
return false;
}
@ -768,6 +770,11 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
schedLock.unlock();
}
return hasXLock;
} finally {
if(schedLock.isHeldByCurrentThread()){
schedLock.unlock();
}
}
}
/**
@ -776,6 +783,7 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
* @param table the name of the table that has the exclusive lock
*/
public void releaseTableExclusiveLock(final Procedure procedure, final TableName table) {
try {
schedLock.lock();
TableQueue queue = getTableQueue(table);
schedLock.unlock();
@ -788,6 +796,11 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
queue.getNamespaceQueue().releaseSharedLock();
addToRunQueue(tableRunQueue, queue);
schedLock.unlock();
} finally {
if(schedLock.isHeldByCurrentThread()) {
schedLock.unlock();
}
}
}
/**
@ -803,6 +816,7 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
private TableQueue tryAcquireTableQueueSharedLock(final Procedure procedure,
final TableName table) {
try {
schedLock.lock();
TableQueue queue = getTableQueue(table);
if (!queue.getNamespaceQueue().trySharedLock()) {
@ -826,6 +840,11 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
return null;
}
return queue;
} finally {
if(schedLock.isHeldByCurrentThread()) {
schedLock.unlock();
}
}
}
/**
@ -838,11 +857,16 @@ public class MasterProcedureScheduler implements ProcedureRunnableSet {
// Zk lock is expensive...
queue.releaseZkSharedLock(lockManager);
try {
schedLock.lock();
queue.releaseSharedLock();
queue.getNamespaceQueue().releaseSharedLock();
schedLock.unlock();
} finally {
if(schedLock.isHeldByCurrentThread()) {
schedLock.unlock();
}
}
}
/**