[ https://issues.apache.org/jira/browse/HBASE-27698?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rajeshbabu Chintaguntla updated HBASE-27698: -------------------------------------------- Fix Version/s: 2.6.0 2.5.5 2.4.18 > Migrate meta locations from zookeeper to master data may not always possible > if we migrate from 1.x HBase > --------------------------------------------------------------------------------------------------------- > > Key: HBASE-27698 > URL: https://issues.apache.org/jira/browse/HBASE-27698 > Project: HBase > Issue Type: Bug > Components: migration > Affects Versions: 2.5.0 > Reporter: Rajeshbabu Chintaguntla > Assignee: Rajeshbabu Chintaguntla > Priority: Major > Fix For: 2.6.0, 2.5.5, 2.4.18 > > > In HBase 1.x versions meta server location from zookeeper will be removed > when the server stopped. In such cases migrating to 2.5.x branches may not > create any meta entries in master data. So in case if we could not find the > meta location from zookeeper we can get meta location from wal directories > with .meta extension and add to master data. > {noformat} > private void tryMigrateMetaLocationsFromZooKeeper() throws IOException, > KeeperException { > // try migrate data from zookeeper > try (ResultScanner scanner = > masterRegion.getScanner(new > Scan().addFamily(HConstants.CATALOG_FAMILY))) { > if (scanner.next() != null) { > // notice that all replicas for a region are in the same row, so the > migration can be > // done with in a one row put, which means if we have data in catalog > family then we can > // make sure that the migration is done. > LOG.info("The {} family in master local region already has data in > it, skip migrating...", > HConstants.CATALOG_FAMILY_STR); > return; > } > } > // start migrating > byte[] row = > CatalogFamilyFormat.getMetaKeyForRegion(RegionInfoBuilder.FIRST_META_REGIONINFO); > Put put = new Put(row); > List<String> metaReplicaNodes = zooKeeper.getMetaReplicaNodes(); > StringBuilder info = new StringBuilder("Migrating meta locations:"); > for (String metaReplicaNode : metaReplicaNodes) { > int replicaId = > zooKeeper.getZNodePaths().getMetaReplicaIdFromZNode(metaReplicaNode); > RegionState state = MetaTableLocator.getMetaRegionState(zooKeeper, > replicaId); > info.append(" ").append(state); > put.setTimestamp(state.getStamp()); > MetaTableAccessor.addRegionInfo(put, state.getRegion()); > if (state.getServerName() != null) { > MetaTableAccessor.addLocation(put, state.getServerName(), > HConstants.NO_SEQNUM, replicaId); > } > > put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY).setRow(put.getRow()) > .setFamily(HConstants.CATALOG_FAMILY) > > .setQualifier(RegionStateStore.getStateColumn(replicaId)).setTimestamp(put.getTimestamp()) > > .setType(Cell.Type.Put).setValue(Bytes.toBytes(state.getState().name())).build()); > } > if (!put.isEmpty()) { > LOG.info(info.toString()); > masterRegion.update(r -> r.put(put)); > } else { > LOG.info("No meta location available on zookeeper, skip migrating..."); > } > } > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)