HBASE-19642 Fix locking for peer modification procedure
This commit is contained in:
parent
ac07e07988
commit
b40c426806
@ -46,6 +46,8 @@ public abstract class ModifyPeerProcedure
|
|||||||
|
|
||||||
protected String peerId;
|
protected String peerId;
|
||||||
|
|
||||||
|
private volatile boolean locked;
|
||||||
|
|
||||||
// used to keep compatible with old client where we can only returns after updateStorage.
|
// used to keep compatible with old client where we can only returns after updateStorage.
|
||||||
protected ProcedurePrepareLatch latch;
|
protected ProcedurePrepareLatch latch;
|
||||||
|
|
||||||
@ -145,16 +147,29 @@ public abstract class ModifyPeerProcedure
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected LockState acquireLock(MasterProcedureEnv env) {
|
protected LockState acquireLock(MasterProcedureEnv env) {
|
||||||
return env.getProcedureScheduler().waitPeerExclusiveLock(this, peerId)
|
if (env.getProcedureScheduler().waitPeerExclusiveLock(this, peerId)) {
|
||||||
? LockState.LOCK_EVENT_WAIT
|
return LockState.LOCK_EVENT_WAIT;
|
||||||
: LockState.LOCK_ACQUIRED;
|
}
|
||||||
|
locked = true;
|
||||||
|
return LockState.LOCK_ACQUIRED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void releaseLock(MasterProcedureEnv env) {
|
protected void releaseLock(MasterProcedureEnv env) {
|
||||||
|
locked = false;
|
||||||
env.getProcedureScheduler().wakePeerExclusiveLock(this, peerId);
|
env.getProcedureScheduler().wakePeerExclusiveLock(this, peerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean holdLock(MasterProcedureEnv env) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasLock(MasterProcedureEnv env) {
|
||||||
|
return locked;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void rollbackState(MasterProcedureEnv env, PeerModificationState state)
|
protected void rollbackState(MasterProcedureEnv env, PeerModificationState state)
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user