@Test public void testMetaMigration() throws Exception { LOG.info("Starting testMetaWithLegacyHRI"); final byte [] FAMILY = Bytes.toBytes("family"); HTableDescriptor htd = new HTableDescriptor("testMetaMigration"); HColumnDescriptor hcd = new HColumnDescriptor(FAMILY); htd.addFamily(hcd); Configuration conf = TEST_UTIL.getConfiguration(); createMultiRegionsWithLegacyHRI(conf, htd, FAMILY, new byte[][]{ HConstants.EMPTY_START_ROW, Bytes.toBytes("region_a"), Bytes.toBytes("region_b")}); CatalogTracker ct = TEST_UTIL.getMiniHBaseCluster().getMaster().getCatalogTracker(); // Erase the current version of root meta for this test. undoVersionInMeta(); MetaReader.fullScanMetaAndPrint(ct); LOG.info("Meta Print completed.testUpdatesOnMetaWithLegacyHRI"); Set<HTableDescriptor> htds = MetaMigrationRemovingHTD.updateMetaWithNewRegionInfo( TEST_UTIL.getHBaseCluster().getMaster()); MetaReader.fullScanMetaAndPrint(ct); // Should be one entry only and it should be for the table we just added. assertEquals(1, htds.size()); assertTrue(htds.contains(htd)); // Assert that the flag in ROOT is updated to reflect the correct status boolean metaUpdated = MetaMigrationRemovingHTD.isMetaHRIUpdated( TEST_UTIL.getMiniHBaseCluster().getMaster()); assertEquals(true, metaUpdated); }
/** * This test assumes a master crash/failure during the meta migration process * and attempts to continue the meta migration process when a new master takes over. * When a master dies during the meta migration we will have some rows of * META.CatalogFamily updated with new HRI, (i.e HRI with out HTD) and some * still hanging with legacy HRI. (i.e HRI with HTD). When the backup master/ or * fresh start of master attempts the migration it will encouter some rows of META * already updated with new HRI and some still legacy. This test will simulate this * scenario and validates that the migration process can safely skip the updated * rows and migrate any pending rows at startup. * @throws Exception */ @Test public void testMasterCrashDuringMetaMigration() throws Exception { final byte[] FAMILY = Bytes.toBytes("family"); HTableDescriptor htd = new HTableDescriptor("testMasterCrashDuringMetaMigration"); HColumnDescriptor hcd = new HColumnDescriptor(FAMILY); htd.addFamily(hcd); Configuration conf = TEST_UTIL.getConfiguration(); // Create 10 New regions. createMultiRegionsWithNewHRI(conf, htd, FAMILY, 10); // Create 10 Legacy regions. createMultiRegionsWithLegacyHRI(conf, htd, FAMILY, 10); CatalogTracker ct = TEST_UTIL.getMiniHBaseCluster().getMaster().getCatalogTracker(); // Erase the current version of root meta for this test. undoVersionInMeta(); MetaMigrationRemovingHTD.updateRootWithMetaMigrationStatus(ct); //MetaReader.fullScanMetaAndPrint(ct); LOG.info("Meta Print completed.testUpdatesOnMetaWithLegacyHRI"); Set<HTableDescriptor> htds = MetaMigrationRemovingHTD.updateMetaWithNewRegionInfo( TEST_UTIL.getHBaseCluster().getMaster()); assertEquals(1, htds.size()); assertTrue(htds.contains(htd)); // Assert that the flag in ROOT is updated to reflect the correct status boolean metaUpdated = MetaMigrationRemovingHTD. isMetaHRIUpdated(TEST_UTIL.getMiniHBaseCluster().getMaster()); assertEquals(true, metaUpdated); LOG.info("END testMetaWithLegacyHRI"); }
@Test public void testMetaUpdatedFlagInROOT() throws Exception { boolean metaUpdated = MetaMigrationRemovingHTD. isMetaHRIUpdated(TEST_UTIL.getMiniHBaseCluster().getMaster()); assertEquals(true, metaUpdated); }