use of org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest in project hbase by apache.
the class TestEntityLocks method testEntityLock.
/**
* Test basic lock function - requestLock, await, unlock.
* @throws Exception
*/
@Test
public void testEntityLock() throws Exception {
final long procId = 100;
// in ms
final long workerSleepTime = 200;
EntityLock lock = admin.namespaceLock("namespace", "description", null);
lock.setTestingSleepTime(workerSleepTime);
when(master.requestLock(any(), any())).thenReturn(LockResponse.newBuilder().setProcId(procId).build());
when(master.lockHeartbeat(any(), any())).thenReturn(UNLOCKED_RESPONSE, UNLOCKED_RESPONSE, UNLOCKED_RESPONSE, LOCKED_RESPONSE);
lock.requestLock();
// we return unlock response 3 times, so actual wait time should be around 2 * workerSleepTime
lock.await(4 * workerSleepTime, TimeUnit.MILLISECONDS);
assertTrue(lock.isLocked());
lock.unlock();
assertTrue(!lock.getWorker().isAlive());
assertFalse(lock.isLocked());
// check LockRequest in requestLock()
verify(master, times(1)).requestLock(any(), lockReqArgCaptor.capture());
LockRequest request = lockReqArgCaptor.getValue();
assertEquals("namespace", request.getNamespace());
assertEquals("description", request.getDescription());
assertEquals(LockType.EXCLUSIVE, request.getLockType());
assertEquals(0, request.getRegionInfoCount());
// check LockHeartbeatRequest in lockHeartbeat()
verify(master, atLeastOnce()).lockHeartbeat(any(), lockHeartbeatReqArgCaptor.capture());
for (LockHeartbeatRequest req : lockHeartbeatReqArgCaptor.getAllValues()) {
assertEquals(procId, req.getProcId());
}
}
use of org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest in project hbase by apache.
the class TestLockProcedure method testRemoteNamespaceLockRecovery.
@Test
public void testRemoteNamespaceLockRecovery() throws Exception {
LockRequest lock = getNamespaceLock(namespace, testMethodName);
testRemoteLockRecovery(lock);
}
use of org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest in project hbase by apache.
the class TestLockProcedure method testTimeout.
@Test
public void testTimeout() throws Exception {
LockRequest lock = getNamespaceLock(namespace, testMethodName);
final long procId = queueLock(lock);
assertTrue(awaitForLocked(procId, 2000));
Thread.sleep(HEARTBEAT_TIMEOUT / 2);
sendHeartbeatAndCheckLocked(procId, true);
Thread.sleep(HEARTBEAT_TIMEOUT / 2);
sendHeartbeatAndCheckLocked(procId, true);
Thread.sleep(4 * HEARTBEAT_TIMEOUT);
sendHeartbeatAndCheckLocked(procId, false);
ProcedureTestingUtility.waitProcedure(procExec, procId);
ProcedureTestingUtility.assertProcNotFailed(procExec, procId);
}
use of org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest in project hbase by apache.
the class TestLockProcedure method testMultipleLocks.
@Test
public void testMultipleLocks() throws Exception {
LockRequest nsLock = getNamespaceLock(namespace, testMethodName);
LockRequest tableLock1 = getTableExclusiveLock(tableName1, testMethodName);
LockRequest tableLock2 = getTableExclusiveLock(tableName2, testMethodName);
LockRequest regionsLock1 = getRegionLock(tableRegions1, testMethodName);
LockRequest regionsLock2 = getRegionLock(tableRegions2, testMethodName);
// Acquire namespace lock, then queue other locks.
long nsProcId = queueLock(nsLock);
assertTrue(awaitForLocked(nsProcId, 2000));
long start = EnvironmentEdgeManager.currentTime();
sendHeartbeatAndCheckLocked(nsProcId, true);
long table1ProcId = queueLock(tableLock1);
long table2ProcId = queueLock(tableLock2);
long regions1ProcId = queueLock(regionsLock1);
long regions2ProcId = queueLock(regionsLock2);
// Assert tables & region locks are waiting because of namespace lock.
long now = EnvironmentEdgeManager.currentTime();
// leave extra 10 msec in case more than half the HEARTBEAT_TIMEOUT has passed
Thread.sleep(Math.min(HEARTBEAT_TIMEOUT / 2, Math.max(HEARTBEAT_TIMEOUT - (now - start) - 10, 0)));
sendHeartbeatAndCheckLocked(nsProcId, true);
sendHeartbeatAndCheckLocked(table1ProcId, false);
sendHeartbeatAndCheckLocked(table2ProcId, false);
sendHeartbeatAndCheckLocked(regions1ProcId, false);
sendHeartbeatAndCheckLocked(regions2ProcId, false);
// Release namespace lock and assert tables locks are acquired but not region lock
releaseLock(nsProcId);
assertTrue(awaitForLocked(table1ProcId, 2000));
assertTrue(awaitForLocked(table2ProcId, 2000));
sendHeartbeatAndCheckLocked(regions1ProcId, false);
sendHeartbeatAndCheckLocked(regions2ProcId, false);
// Release table1 lock and assert region lock is acquired.
releaseLock(table1ProcId);
sendHeartbeatAndCheckLocked(table1ProcId, false);
assertTrue(awaitForLocked(regions1ProcId, 2000));
sendHeartbeatAndCheckLocked(table2ProcId, true);
sendHeartbeatAndCheckLocked(regions2ProcId, false);
// Release table2 lock and assert region lock is acquired.
releaseLock(table2ProcId);
sendHeartbeatAndCheckLocked(table2ProcId, false);
assertTrue(awaitForLocked(regions2ProcId, 2000));
sendHeartbeatAndCheckLocked(regions1ProcId, true);
sendHeartbeatAndCheckLocked(regions2ProcId, true);
// Release region locks.
releaseLock(regions1ProcId);
releaseLock(regions2ProcId);
sendHeartbeatAndCheckLocked(regions1ProcId, false);
sendHeartbeatAndCheckLocked(regions2ProcId, false);
ProcedureTestingUtility.waitAllProcedures(procExec);
ProcedureTestingUtility.assertProcNotFailed(procExec, nsProcId);
ProcedureTestingUtility.assertProcNotFailed(procExec, table1ProcId);
ProcedureTestingUtility.assertProcNotFailed(procExec, table2ProcId);
ProcedureTestingUtility.assertProcNotFailed(procExec, regions1ProcId);
ProcedureTestingUtility.assertProcNotFailed(procExec, regions2ProcId);
}
use of org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest in project hbase by apache.
the class TestLockProcedure method testAbort.
@Test
public void testAbort() throws Exception {
LockRequest lock = getTableExclusiveLock(tableName1, testMethodName);
final long procId = queueLock(lock);
assertTrue(awaitForLocked(procId, 2000));
assertTrue(procExec.abort(procId));
sendHeartbeatAndCheckLocked(procId, false);
ProcedureTestingUtility.waitProcedure(procExec, procId);
ProcedureTestingUtility.assertProcNotFailed(procExec, procId);
}
Aggregations