void _chore() { final RegionServerSpaceQuotaManager quotaManager = rsServices.getRegionServerSpaceQuotaManager(); // Get the HRegionInfo for each online region HashSet<RegionInfo> onlineRegionInfos = getOnlineRegionInfos(rsServices.getRegions()); RegionSizeStore store = quotaManager.getRegionSizeStore(); // Remove all sizes for non-online regions removeNonOnlineRegions(store, onlineRegionInfos); rsServices.reportRegionSizesForQuotas(store); }
@Test public void testRemovableOfNonOnlineRegions() { final Configuration conf = getDefaultHBaseConfiguration(); final HRegionServer rs = mockRegionServer(conf); RegionSizeReportingChore chore = new RegionSizeReportingChore(rs); RegionInfo infoA = RegionInfoBuilder.newBuilder(TableName.valueOf("T1")) .setStartKey(Bytes.toBytes("a")).setEndKey(Bytes.toBytes("b")).build(); RegionInfo infoB = RegionInfoBuilder.newBuilder(TableName.valueOf("T1")) .setStartKey(Bytes.toBytes("b")).setEndKey(Bytes.toBytes("d")).build(); RegionInfo infoC = RegionInfoBuilder.newBuilder(TableName.valueOf("T1")) .setStartKey(Bytes.toBytes("c")).setEndKey(Bytes.toBytes("d")).build(); RegionSizeStore store = new RegionSizeStoreImpl(); store.put(infoA, 1024L); store.put(infoB, 1024L); store.put(infoC, 1024L); // If there are no online regions, all entries should be removed. chore.removeNonOnlineRegions(store, Collections.<RegionInfo> emptySet()); assertTrue(store.isEmpty()); store.put(infoA, 1024L); store.put(infoB, 1024L); store.put(infoC, 1024L); // Remove a single region chore.removeNonOnlineRegions(store, new HashSet<>(Arrays.asList(infoA, infoC))); assertEquals(2, store.size()); assertNotNull(store.getRegionSize(infoA)); assertNotNull(store.getRegionSize(infoC)); }