@Test public void testListLocksTable() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(2); queue.waitTableExclusiveLock(procedure, TableName.valueOf("ns2", "table2")); List<LockedResource> locks = queue.getLocks(); assertEquals(2, locks.size()); LockedResource namespaceResource = locks.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns2"); assertSharedLock(namespaceResource, 1); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableResource = locks.get(1); assertLockResource(tableResource, LockedResourceType.TABLE, "ns2:table2"); assertExclusiveLock(tableResource, procedure); assertTrue(tableResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksNamespace() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(1); queue.waitNamespaceExclusiveLock(procedure, "ns1"); List<LockedResource> locks = queue.getLocks(); assertEquals(2, locks.size()); LockedResource namespaceResource = locks.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns1"); assertExclusiveLock(namespaceResource, procedure); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableResource = locks.get(1); assertLockResource(tableResource, LockedResourceType.TABLE, TableProcedureInterface.DUMMY_NAMESPACE_TABLE_NAME.getNameAsString()); assertSharedLock(tableResource, 1); assertTrue(tableResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksRegion() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(3); RegionInfo regionInfo = RegionInfoBuilder.newBuilder(TableName.valueOf("ns3", "table3")).build(); queue.waitRegion(procedure, regionInfo); List<LockedResource> resources = queue.getLocks(); assertEquals(3, resources.size()); LockedResource namespaceResource = resources.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns3"); assertSharedLock(namespaceResource, 1); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableResource = resources.get(1); assertLockResource(tableResource, LockedResourceType.TABLE, "ns3:table3"); assertSharedLock(tableResource, 1); assertTrue(tableResource.getWaitingProcedures().isEmpty()); LockedResource regionResource = resources.get(2); assertLockResource(regionResource, LockedResourceType.REGION, regionInfo.getEncodedName()); assertExclusiveLock(regionResource, procedure); assertTrue(regionResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksServer() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(0); queue.waitServerExclusiveLock(procedure, ServerName.valueOf("server1,1234,0")); List<LockedResource> resources = queue.getLocks(); assertEquals(1, resources.size()); LockedResource serverResource = resources.get(0); assertLockResource(serverResource, LockedResourceType.SERVER, "server1,1234,0"); assertExclusiveLock(serverResource, procedure); assertTrue(serverResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksWaiting() throws Exception { LockProcedure procedure1 = createExclusiveLockProcedure(1); queue.waitTableExclusiveLock(procedure1, TableName.valueOf("ns4", "table4")); LockProcedure procedure2 = createSharedLockProcedure(2); queue.waitTableSharedLock(procedure2, TableName.valueOf("ns4", "table4")); LockProcedure procedure3 = createExclusiveLockProcedure(3); queue.waitTableExclusiveLock(procedure3, TableName.valueOf("ns4", "table4")); List<LockedResource> resources = queue.getLocks(); assertEquals(2, resources.size()); LockedResource namespaceResource = resources.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns4"); assertSharedLock(namespaceResource, 1); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableLock = resources.get(1); assertLockResource(tableLock, LockedResourceType.TABLE, "ns4:table4"); assertExclusiveLock(tableLock, procedure1); List<Procedure<?>> waitingProcedures = tableLock.getWaitingProcedures(); assertEquals(2, waitingProcedures.size()); LockProcedure waitingProcedure2 = (LockProcedure) waitingProcedures.get(0); assertEquals(LockType.SHARED, waitingProcedure2.getType()); assertEquals(procedure2, waitingProcedure2); LockProcedure waitingProcedure3 = (LockProcedure) waitingProcedures.get(1); assertEquals(LockType.EXCLUSIVE, waitingProcedure3.getType()); assertEquals(procedure3, waitingProcedure3); }
@Test public void testListLocksPeer() throws Exception { String peerId = "1"; LockProcedure procedure = createExclusiveLockProcedure(4); queue.waitPeerExclusiveLock(procedure, peerId); List<LockedResource> locks = queue.getLocks(); assertEquals(1, locks.size()); LockedResource resource = locks.get(0); assertLockResource(resource, LockedResourceType.PEER, peerId); assertExclusiveLock(resource, procedure); assertTrue(resource.getWaitingProcedures().isEmpty()); // Try to acquire the exclusive lock again with same procedure assertFalse(queue.waitPeerExclusiveLock(procedure, peerId)); // Try to acquire the exclusive lock again with new procedure LockProcedure procedure2 = createExclusiveLockProcedure(5); assertTrue(queue.waitPeerExclusiveLock(procedure2, peerId)); // Same peerId, still only has 1 LockedResource locks = queue.getLocks(); assertEquals(1, locks.size()); resource = locks.get(0); assertLockResource(resource, LockedResourceType.PEER, peerId); // LockedResource owner still is the origin procedure assertExclusiveLock(resource, procedure); // The new procedure should in the waiting list assertEquals(1, resource.getWaitingProcedures().size()); }
public static LockServiceProtos.LockedResource convertToProtoLockedResource( LockedResource lockedResource) throws IOException { LockServiceProtos.LockedResource.Builder builder = LockServiceProtos.LockedResource.newBuilder(); builder .setResourceType(convertToProtoResourceType(lockedResource.getResourceType())) .setResourceName(lockedResource.getResourceName()) .setLockType(convertToProtoLockType(lockedResource.getLockType())); Procedure<?> exclusiveLockOwnerProcedure = lockedResource.getExclusiveLockOwnerProcedure(); if (exclusiveLockOwnerProcedure != null) { ProcedureProtos.Procedure exclusiveLockOwnerProcedureProto = convertToProtoProcedure(exclusiveLockOwnerProcedure); builder.setExclusiveLockOwnerProcedure(exclusiveLockOwnerProcedureProto); } builder.setSharedLockCount(lockedResource.getSharedLockCount()); for (Procedure<?> waitingProcedure : lockedResource.getWaitingProcedures()) { ProcedureProtos.Procedure waitingProcedureProto = convertToProtoProcedure(waitingProcedure); builder.addWaitingProcedures(waitingProcedureProto); } return builder.build(); }
List<Procedure<?>> waitingProcedures = lockedResource.getWaitingProcedures();
@Test public void testListLocksTable() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(2); queue.waitTableExclusiveLock(procedure, TableName.valueOf("ns2", "table2")); List<LockedResource> locks = queue.getLocks(); assertEquals(2, locks.size()); LockedResource namespaceResource = locks.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns2"); assertSharedLock(namespaceResource, 1); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableResource = locks.get(1); assertLockResource(tableResource, LockedResourceType.TABLE, "ns2:table2"); assertExclusiveLock(tableResource, procedure); assertTrue(tableResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksNamespace() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(1); queue.waitNamespaceExclusiveLock(procedure, "ns1"); List<LockedResource> locks = queue.getLocks(); assertEquals(2, locks.size()); LockedResource namespaceResource = locks.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns1"); assertExclusiveLock(namespaceResource, procedure); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableResource = locks.get(1); assertLockResource(tableResource, LockedResourceType.TABLE, TableName.NAMESPACE_TABLE_NAME.getNameAsString()); assertSharedLock(tableResource, 1); assertTrue(tableResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksRegion() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(3); RegionInfo regionInfo = RegionInfoBuilder.newBuilder(TableName.valueOf("ns3", "table3")).build(); queue.waitRegion(procedure, regionInfo); List<LockedResource> resources = queue.getLocks(); assertEquals(3, resources.size()); LockedResource namespaceResource = resources.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns3"); assertSharedLock(namespaceResource, 1); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableResource = resources.get(1); assertLockResource(tableResource, LockedResourceType.TABLE, "ns3:table3"); assertSharedLock(tableResource, 1); assertTrue(tableResource.getWaitingProcedures().isEmpty()); LockedResource regionResource = resources.get(2); assertLockResource(regionResource, LockedResourceType.REGION, regionInfo.getEncodedName()); assertExclusiveLock(regionResource, procedure); assertTrue(regionResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksServer() throws Exception { LockProcedure procedure = createExclusiveLockProcedure(0); queue.waitServerExclusiveLock(procedure, ServerName.valueOf("server1,1234,0")); List<LockedResource> resources = queue.getLocks(); assertEquals(1, resources.size()); LockedResource serverResource = resources.get(0); assertLockResource(serverResource, LockedResourceType.SERVER, "server1,1234,0"); assertExclusiveLock(serverResource, procedure); assertTrue(serverResource.getWaitingProcedures().isEmpty()); }
@Test public void testListLocksWaiting() throws Exception { LockProcedure procedure1 = createExclusiveLockProcedure(1); queue.waitTableExclusiveLock(procedure1, TableName.valueOf("ns4", "table4")); LockProcedure procedure2 = createSharedLockProcedure(2); queue.waitTableSharedLock(procedure2, TableName.valueOf("ns4", "table4")); LockProcedure procedure3 = createExclusiveLockProcedure(3); queue.waitTableExclusiveLock(procedure3, TableName.valueOf("ns4", "table4")); List<LockedResource> resources = queue.getLocks(); assertEquals(2, resources.size()); LockedResource namespaceResource = resources.get(0); assertLockResource(namespaceResource, LockedResourceType.NAMESPACE, "ns4"); assertSharedLock(namespaceResource, 1); assertTrue(namespaceResource.getWaitingProcedures().isEmpty()); LockedResource tableLock = resources.get(1); assertLockResource(tableLock, LockedResourceType.TABLE, "ns4:table4"); assertExclusiveLock(tableLock, procedure1); List<Procedure<?>> waitingProcedures = tableLock.getWaitingProcedures(); assertEquals(2, waitingProcedures.size()); LockProcedure waitingProcedure2 = (LockProcedure) waitingProcedures.get(0); assertEquals(LockType.SHARED, waitingProcedure2.getType()); assertEquals(procedure2, waitingProcedure2); LockProcedure waitingProcedure3 = (LockProcedure) waitingProcedures.get(1); assertEquals(LockType.EXCLUSIVE, waitingProcedure3.getType()); assertEquals(procedure3, waitingProcedure3); }
@Test public void testListLocksPeer() throws Exception { String peerId = "1"; LockProcedure procedure = createExclusiveLockProcedure(4); queue.waitPeerExclusiveLock(procedure, peerId); List<LockedResource> locks = queue.getLocks(); assertEquals(1, locks.size()); LockedResource resource = locks.get(0); assertLockResource(resource, LockedResourceType.PEER, peerId); assertExclusiveLock(resource, procedure); assertTrue(resource.getWaitingProcedures().isEmpty()); // Try to acquire the exclusive lock again with same procedure assertFalse(queue.waitPeerExclusiveLock(procedure, peerId)); // Try to acquire the exclusive lock again with new procedure LockProcedure procedure2 = createExclusiveLockProcedure(5); assertTrue(queue.waitPeerExclusiveLock(procedure2, peerId)); // Same peerId, still only has 1 LockedResource locks = queue.getLocks(); assertEquals(1, locks.size()); resource = locks.get(0); assertLockResource(resource, LockedResourceType.PEER, peerId); // LockedResource owner still is the origin procedure assertExclusiveLock(resource, procedure); // The new procedure should in the waiting list assertEquals(1, resource.getWaitingProcedures().size()); }
public static LockServiceProtos.LockedResource convertToProtoLockedResource( LockedResource lockedResource) throws IOException { LockServiceProtos.LockedResource.Builder builder = LockServiceProtos.LockedResource.newBuilder(); builder .setResourceType(convertToProtoResourceType(lockedResource.getResourceType())) .setResourceName(lockedResource.getResourceName()) .setLockType(convertToProtoLockType(lockedResource.getLockType())); Procedure<?> exclusiveLockOwnerProcedure = lockedResource.getExclusiveLockOwnerProcedure(); if (exclusiveLockOwnerProcedure != null) { ProcedureProtos.Procedure exclusiveLockOwnerProcedureProto = convertToProtoProcedure(exclusiveLockOwnerProcedure); builder.setExclusiveLockOwnerProcedure(exclusiveLockOwnerProcedureProto); } builder.setSharedLockCount(lockedResource.getSharedLockCount()); for (Procedure<?> waitingProcedure : lockedResource.getWaitingProcedures()) { ProcedureProtos.Procedure waitingProcedureProto = convertToProtoProcedure(waitingProcedure); builder.addWaitingProcedures(waitingProcedureProto); } return builder.build(); } }
public static LockServiceProtos.LockedResource convertToProtoLockedResource( LockedResource lockedResource) throws IOException { LockServiceProtos.LockedResource.Builder builder = LockServiceProtos.LockedResource.newBuilder(); builder .setResourceType(convertToProtoResourceType(lockedResource.getResourceType())) .setResourceName(lockedResource.getResourceName()) .setLockType(convertToProtoLockType(lockedResource.getLockType())); Procedure<?> exclusiveLockOwnerProcedure = lockedResource.getExclusiveLockOwnerProcedure(); if (exclusiveLockOwnerProcedure != null) { ProcedureProtos.Procedure exclusiveLockOwnerProcedureProto = convertToProtoProcedure(exclusiveLockOwnerProcedure); builder.setExclusiveLockOwnerProcedure(exclusiveLockOwnerProcedureProto); } builder.setSharedLockCount(lockedResource.getSharedLockCount()); for (Procedure<?> waitingProcedure : lockedResource.getWaitingProcedures()) { ProcedureProtos.Procedure waitingProcedureProto = convertToProtoProcedure(waitingProcedure); builder.addWaitingProcedures(waitingProcedureProto); } return builder.build(); }