Created
April 1, 2013 01:35
-
-
Save gustavoanatoly/5282776 to your computer and use it in GitHub Desktop.
Unit Test, to verify if AM doesn't use a drained server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* This is an unit test, to verify if Assignment Manager | |
* doesn't use a drained server, comparing number of online region | |
* on initial state of the cluster is equal after to put a server | |
* into a drained list. | |
* | |
* @throws ServiceException | |
* @throws InterruptedException | |
* @throws IOException | |
* @throws KeeperException | |
*/ | |
@Test | |
public void testAssignmentManagerDoesntUseDrainingServer() throws ServiceException, InterruptedException, IOException, KeeperException { | |
HMaster hMaster = TEST_UTIL.getMiniHBaseCluster().getMaster(); | |
Collection<ServerName> servers = TEST_UTIL.getMiniHBaseCluster().getInitialClusterStatus().getServers(); | |
Long sizeServedRegions = TEST_UTIL.getMiniHBaseCluster().countServedRegions(); | |
LOG.info("Regions served: " + sizeServedRegions); | |
AssignmentManager am = hMaster.getAssignmentManager(); | |
int sizeRegionAssignments = am.getRegionStates().getRegionAssignments().size(); | |
LOG.info("Size Assigned Regions: " + sizeRegionAssignments); | |
int randomIndexServer = new Random().nextInt(servers.size()); | |
ServerName drainedServer = (ServerName) servers.toArray()[randomIndexServer]; | |
LOG.info("Putting Server on Drained List: " + hMaster.getServerManager().addServerToDrainList(drainedServer)); | |
HRegionInfo hri = new HRegionInfo(Bytes.toBytes("table"), | |
HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW, true); | |
LOG.info("Avaible Servers: " + hMaster.getServerManager().createDestinationServersList().size()); | |
Map<HRegionInfo, ServerName> bulkRegion = new HashMap<HRegionInfo, ServerName>(); | |
bulkRegion.put(hri, drainedServer); | |
am.assign(bulkRegion); | |
am.getRegionStates().waitForAssignment(hri); | |
LOG.info("Creating plan to Drained Server: " + drainedServer.toString()); | |
RegionPlan planToDrainedServer = new RegionPlan(hri, null, drainedServer); | |
am.addPlan(hri.getEncodedName(), planToDrainedServer); | |
am.assign(hri, true); | |
am.getRegionStates().waitForAssignment(hri); | |
LOG.info("Creating plan to migrate region online to drained server."); | |
Map<HRegionInfo, ServerName> regionAssignments = am.getRegionStates().getRegionAssignments(); | |
int indexAssignedRegionServer = new Random().nextInt(regionAssignments.size()); | |
HRegionInfo hriAssigned = (HRegionInfo) regionAssignments.keySet().toArray()[indexAssignedRegionServer]; | |
ServerName serverHriAssigned = regionAssignments.get(hriAssigned); | |
RegionPlan planFromOnlineToDrainedServer = new RegionPlan(hriAssigned, serverHriAssigned, drainedServer); | |
am.addPlan(hriAssigned.getEncodedName(), planFromOnlineToDrainedServer); | |
am.assign(hriAssigned, true); | |
am.waitForAssignment(hriAssigned); | |
ServerName drainedRegionServer = am.getRegionStates().getRegionServerOfRegion(hri); | |
List<ServerName> destServerList = hMaster.getServerManager().createDestinationServersList(); | |
LOG.info("Server is not in destination Server List"); | |
assertFalse(destServerList.contains(drainedRegionServer)); | |
int finalSizeRegionAssignment = am.getRegionStates().getRegionAssignments().size(); | |
assertEquals(sizeRegionAssignments, finalSizeRegionAssignment); | |
LOG.info("Initial size assigned regions: " + sizeRegionAssignments); | |
LOG.info("Final size assigned regions: " + finalSizeRegionAssignment); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment