diff --git src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java index c7ce684..94ffeb6 100644 --- src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java +++ src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.io.InterruptedIOException; import java.net.ConnectException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.apache.commons.logging.Log; @@ -358,25 +357,6 @@ public class MetaEditor { } } - /** - * Deletes daughters references in offlined split parent. - * @param catalogTracker - * @param parent Parent row we're to remove daughter reference from - * @throws NotAllMetaRegionsOnlineException - * @throws IOException - */ - public static void deleteDaughtersReferencesInParent(CatalogTracker catalogTracker, - final HRegionInfo parent) - throws NotAllMetaRegionsOnlineException, IOException { - Delete delete = new Delete(parent.getRegionName()); - delete.deleteColumns(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER); - delete.deleteColumns(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER); - deleteFromMetaTable(catalogTracker, delete); - LOG.info("Deleted daughters references, qualifier=" + Bytes.toStringBinary(HConstants.SPLITA_QUALIFIER) + - " and qualifier=" + Bytes.toStringBinary(HConstants.SPLITB_QUALIFIER) + - ", from parent " + parent.getRegionNameAsString()); - } - public static HRegionInfo getHRegionInfo( Result data) throws IOException { byte [] bytes = diff --git src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java index 1f1bc2b..80531cc 100644 --- src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java +++ src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java @@ -403,32 +403,36 @@ public class MetaScanner { * seen by this scanner as well, so we block until they are added to the META table. Even * though we are waiting for META entries, ACID semantics in HBase indicates that this * scanner might not see the new rows. So we manually query the daughter rows */ - HRegionInfo splitA = Writables.getHRegionInfo(rowResult.getValue(HConstants.CATALOG_FAMILY, + HRegionInfo splitA = Writables.getHRegionInfoOrNull(rowResult.getValue(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER)); - HRegionInfo splitB = Writables.getHRegionInfo(rowResult.getValue(HConstants.CATALOG_FAMILY, + HRegionInfo splitB = Writables.getHRegionInfoOrNull(rowResult.getValue(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER)); HTable metaTable = getMetaTable(); long start = System.currentTimeMillis(); - Result resultA = getRegionResultBlocking(metaTable, blockingTimeout, - splitA.getRegionName()); - if (resultA != null) { - processRow(resultA); - daughterRegions.add(splitA.getRegionName()); - } else { - throw new RegionOfflineException("Split daughter region " + - splitA.getRegionNameAsString() + " cannot be found in META."); + if (splitA != null) { + Result resultA = getRegionResultBlocking(metaTable, blockingTimeout, + splitA.getRegionName()); + if (resultA != null) { + processRow(resultA); + daughterRegions.add(splitA.getRegionName()); + } else { + throw new RegionOfflineException("Split daughter region " + + splitA.getRegionNameAsString() + " cannot be found in META."); + } } long rem = blockingTimeout - (System.currentTimeMillis() - start); - Result resultB = getRegionResultBlocking(metaTable, rem, - splitB.getRegionName()); - if (resultB != null) { - processRow(resultB); - daughterRegions.add(splitB.getRegionName()); - } else { - throw new RegionOfflineException("Split daughter region " + - splitB.getRegionNameAsString() + " cannot be found in META."); + if (splitB != null) { + Result resultB = getRegionResultBlocking(metaTable, rem, + splitB.getRegionName()); + if (resultB != null) { + processRow(resultB); + daughterRegions.add(splitB.getRegionName()); + } else { + throw new RegionOfflineException("Split daughter region " + + splitB.getRegionNameAsString() + " cannot be found in META."); + } } } @@ -437,9 +441,7 @@ public class MetaScanner { private Result getRegionResultBlocking(HTable metaTable, long timeout, byte[] regionName) throws IOException { - if (LOG.isDebugEnabled()) { - LOG.debug("blocking until region is in META: " + Bytes.toStringBinary(regionName)); - } + boolean logged = false; long start = System.currentTimeMillis(); while (System.currentTimeMillis() - start < timeout) { Get get = new Get(regionName); @@ -450,6 +452,12 @@ public class MetaScanner { return result; } try { + if (!logged) { + if (LOG.isDebugEnabled()) { + LOG.debug("blocking until region is in META: " + Bytes.toStringBinary(regionName)); + } + logged = true; + } Thread.sleep(10); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); diff --git src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java index 94ff5bc..ee72ce2 100644 --- src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java +++ src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java @@ -235,8 +235,6 @@ class CatalogJanitor extends Chore { if (hasNoReferences(a) && hasNoReferences(b)) { LOG.debug("Deleting region " + parent.getRegionNameAsString() + " because daughter splits no longer hold references"); - // wipe out daughter references from parent region in meta - removeDaughtersFromParent(parent); // This latter regionOffline should not be necessary but is done for now // until we let go of regionserver to master heartbeats. See HBASE-3368. @@ -279,16 +277,6 @@ class CatalogJanitor extends Chore { } /** - * Remove mention of daughters from parent row. - * @param parent - * @throws IOException - */ - private void removeDaughtersFromParent(final HRegionInfo parent) - throws IOException { - MetaEditor.deleteDaughtersReferencesInParent(this.server.getCatalogTracker(), parent); - } - - /** * Checks if a daughter region -- either splitA or splitB -- still holds * references to parent. * @param parent Parent region name.