/** * Initialize the region assignment snapshot by scanning the hbase:meta table * @throws IOException */ public void initialize() throws IOException { LOG.info("Start to scan the hbase:meta for the current region assignment " + "snappshot"); // TODO: at some point this code could live in the MetaReader Visitor v = new Visitor() { @Override public boolean visit(Result result) throws IOException { try { if (result == null || result.isEmpty()) return true; Pair<HRegionInfo, ServerName> regionAndServer = HRegionInfo.getHRegionInfoAndServerName(result); HRegionInfo hri = regionAndServer.getFirst(); if (hri == null) return true; if (hri.getTable() == null) return true; if (disabledTables.contains(hri.getTable())) { return true; } // Are we to include split parents in the list? if (excludeOfflinedSplitParents && hri.isSplit()) return true; // Add the current assignment to the snapshot addAssignment(hri, regionAndServer.getSecond()); addRegion(hri); // the code below is to handle favored nodes byte[] favoredNodes = result.getValue(HConstants.CATALOG_FAMILY, FavoredNodeAssignmentHelper.FAVOREDNODES_QUALIFIER); if (favoredNodes == null) return true; // Add the favored nodes into assignment plan ServerName[] favoredServerList = FavoredNodeAssignmentHelper.getFavoredNodesList(favoredNodes); // Add the favored nodes into assignment plan existingAssignmentPlan.updateFavoredNodesMap(hri, Arrays.asList(favoredServerList)); return true; } catch (RuntimeException e) { LOG.error("Catche remote exception " + e.getMessage() + " when processing" + result); throw e; } } }; // Scan hbase:meta to pick up user regions MetaReader.fullScan(tracker, v); //regionToRegionServerMap = regions; LOG.info("Finished to scan the hbase:meta for the current region assignment" + "snapshot"); }