getMergedRegionsAndSplitParents(); + " in merged region " + e.getKey().getShortNameToLog()); } else { if (cleanMergeRegion(e.getKey(), regionA, regionB)) { result++; cleanParent(e.getKey(), e.getValue())) { result++; } else {
@Override protected boolean initialChore() { try { if (this.enabled.get()) scan(); } catch (IOException e) { LOG.warn("Failed initial scan of catalog table", e); return false; } return true; }
Pair<Boolean, Boolean> a = checkDaughterInFs(parent, daughters.getFirst()); Pair<Boolean, Boolean> b = checkDaughterInFs(parent, daughters.getSecond()); if (hasNoReferences(a) && hasNoReferences(b)) { String daughterA = daughters.getFirst() != null? daughters.getFirst().getShortNameToLog(): "null";
createReferences(this.masterServices, td, parent, splita, Bytes.toBytes("ccc"), false); assertFalse(janitor.cleanParent(parent, regions.get(parent))); assertTrue(janitor.cleanParent(splitb, regions.get(splitb))); assertFalse(janitor.cleanParent(splita, regions.get(splita))); assertTrue(janitor.cleanParent(splita, regions.get(splita))); assertTrue(janitor.cleanParent(parent, regions.get(parent)));
boolean result = false; HRegionInfo a_region = getDaughterRegionInfo(rowContent, HConstants.SPLITA_QUALIFIER); HRegionInfo b_region = getDaughterRegionInfo(rowContent, HConstants.SPLITB_QUALIFIER); Pair<Boolean, Boolean> a = checkDaughterInFs(parent, a_region, HConstants.SPLITA_QUALIFIER); Pair<Boolean, Boolean> b = checkDaughterInFs(parent, b_region, HConstants.SPLITB_QUALIFIER); if (hasNoReferences(a) && hasNoReferences(b)) { LOG.debug("Deleting region " + parent.getRegionNameAsString() + " because daughter splits no longer hold references"); removeDaughtersFromParent(parent);
CatalogJanitor spy = spy(this.janitor); doReturn(new Triple<>(10, mergedRegions, splitParents)).when(spy). getMergedRegionsAndSplitParents(); assertEquals(0, spy.scan()); assertEquals(2, spy.scan());
Pair<Integer, Map<HRegionInfo, Result>> pair = getSplitParents(); int count = pair.getFirst(); Map<HRegionInfo, Result> splitParents = pair.getSecond(); HashSet<String> parentNotCleaned = new HashSet<String>(); //regions whose parents are still around for (Map.Entry<HRegionInfo, Result> e : splitParents.entrySet()) { if (!parentNotCleaned.contains(e.getKey().getEncodedName()) && cleanParent(e.getKey(), e.getValue())) { cleaned++; } else { parentNotCleaned.add(getDaughterRegionInfo( e.getValue(), HConstants.SPLITA_QUALIFIER).getEncodedName()); parentNotCleaned.add(getDaughterRegionInfo( e.getValue(), HConstants.SPLITB_QUALIFIER).getEncodedName());
@Before public void setup() throws IOException, KeeperException { setRootDirAndCleanIt(HTU, this.name.getMethodName()); NavigableMap<ServerName, SortedSet<byte []>> regionsToRegionServers = new ConcurrentSkipListMap<ServerName, SortedSet<byte []>>(); this.masterServices = new MockMasterServices(HTU.getConfiguration(), regionsToRegionServers); this.masterServices.start(10, null); this.janitor = new CatalogJanitor(masterServices); }
TableDescriptor parentDescriptor = getTableDescriptor(parent.getTable()); try { regionFs = HRegionFileSystem.openRegionFromFileSystem(
/** * Switch for the background CatalogJanitor thread. * Used for testing. The thread will continue to run. It will just be a noop * if disabled. * @param b If false, the catalog janitor won't do anything. */ public void setCatalogJanitorEnabled(final boolean b) { this.catalogJanitorChore.setEnabled(b); }
/** * Scans hbase:meta and returns a number of scanned rows, and a map of merged * regions, and an ordered map of split parents. * @return triple of scanned rows, map of merged regions and map of split * parent regioninfos * @throws IOException */ Triple<Integer, Map<RegionInfo, Result>, Map<RegionInfo, Result>> getMergedRegionsAndSplitParents() throws IOException { return getMergedRegionsAndSplitParents(null); }
@After public void teardown() { this.janitor.cancel(true); this.masterServices.stop("DONE"); }
boolean regionAHasMergeQualifier = !catalogJanitor.cleanMergeQualifier(regionsToMerge[0]); if (regionAHasMergeQualifier || !catalogJanitor.cleanMergeQualifier(regionsToMerge[1])) { String msg = "Skip merging regions " + RegionInfo.getShortNameToLog(regionsToMerge) + ", because region "
assertFalse(this.janitor.cleanParent(parent, r)); ProcedureTestingUtility.waitAllProcedures(masterServices.getMasterProcedureExecutor()); assertTrue(fs.exists(parentdir)); assertTrue(this.janitor.cleanParent(parent, r));
CatalogJanitor spy = spy(this.janitor); doReturn(new Triple<>(10, mergedRegions, splitParents)).when(spy). getMergedRegionsAndSplitParents(); assertEquals(0, spy.scan()); assertEquals(2, spy.scan());
this.normalizerChore = new RegionNormalizerChore(this); getChoreService().scheduleChore(normalizerChore); this.catalogJanitorChore = new CatalogJanitor(this); getChoreService().scheduleChore(catalogJanitorChore); this.serverManager.startChore();
Path rootdir = this.services.getMasterFileSystem().getRootDir(); Path tabledir = FSUtils.getTableDir(rootdir, mergedRegion.getTable()); TableDescriptor htd = getTableDescriptor(mergedRegion.getTable()); HRegionFileSystem regionFs = null; try {
@Override public EnableCatalogJanitorResponse enableCatalogJanitor(RpcController c, EnableCatalogJanitorRequest req) throws ServiceException { rpcPreCheck("enableCatalogJanitor"); return EnableCatalogJanitorResponse.newBuilder().setPrevValue( master.catalogJanitorChore.setEnabled(req.getEnable())).build(); }
/** * Scans hbase:meta and returns a number of scanned rows, and a map of merged * regions, and an ordered map of split parents. * @return triple of scanned rows, map of merged regions and map of split * parent regioninfos * @throws IOException */ Triple<Integer, Map<HRegionInfo, Result>, Map<HRegionInfo, Result>> getMergedRegionsAndSplitParents() throws IOException { return getMergedRegionsAndSplitParents(null); }
@After public void teardown() { this.janitor.cancel(true); this.masterServices.stop("DONE"); }