Skip to content

Instantly share code, notes, and snippets.

@gustavoanatoly
Created January 28, 2013 13:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gustavoanatoly/4655579 to your computer and use it in GitHub Desktop.
Save gustavoanatoly/4655579 to your computer and use it in GitHub Desktop.
Check if AssignmentManager does not use drained region servers.
@Test
public void testAssignmentManagementDoesNotUseDrainedServers()
throws KeeperException, Exception {
HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
waitForAllRegionsOnline();
ServerManager serverManager = master.getServerManager();
AssignmentManager assignmentManager = master.getAssignmentManager();
HRegionServer drainedRS0 = TEST_UTIL.getHBaseCluster().getRegionServer(0);
HRegionServer drainedRS3 = TEST_UTIL.getHBaseCluster().getRegionServer(3);
setDrainingServer(drainedRS0);
setDrainingServer(drainedRS3);
waitSyncMasterAndAssignmentManagementServerList();
List<HRegionInfo> regionRS0List = ProtobufUtil.getOnlineRegions(drainedRS0);
List<HRegionInfo> regionRS3List = ProtobufUtil.getOnlineRegions(drainedRS3);
assignmentManager.assign(regionRS0List);
assignmentManager.assign(regionRS3List);
assertFalse(serverManager.createDestinationServersList().contains(drainedRS0));
assertFalse(serverManager.createDestinationServersList().contains(drainedRS0));
Map<HRegionInfo, ServerName> regionAssignmentList =
assignmentManager.getRegionStates().getRegionAssignments();
assertFalse(regionAssignmentList.containsValue(drainedRS0.getServerName()));
assertFalse(regionAssignmentList.containsValue(drainedRS3.getServerName()));
}
/**
* Synchronize server list on Master and Assignment
* Management, verifying if server manager and
* assignment region list contains drained server,
* if both not contains drained servers, is synchronized.
* @throws InterruptedException
*/
private static void waitSyncMasterAndAssignmentManagementServerList() throws InterruptedException {
HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
ServerManager serverManager = master.getServerManager();
AssignmentManager assignmentManager = master.getAssignmentManager();
List<ServerName> drainedServerList = serverManager.getDrainingServersList();
Map<HRegionInfo, ServerName> assignmentRegionList =
assignmentManager.getRegionStates().getRegionAssignments();
if (!drainedServerList.isEmpty()) {
for (ServerName drainedServer : drainedServerList) {
while (serverManager.createDestinationServersList().contains(drainedServer) ||
assignmentRegionList.containsValue(drainedServer)) {
Thread.sleep(1);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment