Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 725819C55 for ; Fri, 22 Jun 2012 19:50:18 +0000 (UTC) Received: (qmail 7914 invoked by uid 500); 22 Jun 2012 19:50:18 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 7876 invoked by uid 500); 22 Jun 2012 19:50:18 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 7869 invoked by uid 99); 22 Jun 2012 19:50:18 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Jun 2012 19:50:18 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Jun 2012 19:50:15 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 3550F23888CD for ; Fri, 22 Jun 2012 19:49:54 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1353008 - in /hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util: HBaseFsck.java hbck/OfflineMetaRepair.java Date: Fri, 22 Jun 2012 19:49:53 -0000 To: commits@hbase.apache.org From: tedyu@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120622194954.3550F23888CD@eris.apache.org> Author: tedyu Date: Fri Jun 22 19:49:53 2012 New Revision: 1353008 URL: http://svn.apache.org/viewvc?rev=1353008&view=rev Log: HBASE-6236 Offline meta repair fails if the HBase base mount point is on a different cluster/volume than its parent in a ViewFS or similar FS (Aditya) Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java?rev=1353008&r1=1353007&r2=1353008&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java Fri Jun 22 19:49:53 2012 @@ -150,6 +150,9 @@ public class HBaseFsck { private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2; private static final int DEFAULT_MAX_MERGE = 5; + private static final String DEFAULT_SIDELINE_DIR = ".hbcktmp-" + + System.currentTimeMillis(); + /********************** * Internal resources **********************/ @@ -160,7 +163,6 @@ public class HBaseFsck { private HBaseAdmin admin; private HTable meta; private ScheduledThreadPoolExecutor executor; // threads to retrieve data from regionservers - private long startMillis = System.currentTimeMillis(); /*********** * Options @@ -181,6 +183,7 @@ public class HBaseFsck { private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE; // maximum number of overlapping regions to sideline private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions + private Path sidelineDir = null; private boolean rerun = false; // if we tried to fix something, rerun hbck private static boolean summary = false; // if we want to print less output @@ -817,7 +820,7 @@ public class HBaseFsck { // we can rebuild, move old root and meta out of the way and start LOG.info("HDFS regioninfo's seems good. Sidelining old .META."); - sidelineOldRootAndMeta(); + Path backupDir = sidelineOldRootAndMeta(); LOG.info("Creating new .META."); HRegion meta = createNewRootAndMeta(); @@ -832,6 +835,7 @@ public class HBaseFsck { meta.put(puts.toArray(new Put[0])); HRegion.closeHRegion(meta); LOG.info("Success! .META. table rebuilt."); + LOG.info("Old -ROOT- and .META. are moved into " + backupDir); return true; } @@ -855,11 +859,11 @@ public class HBaseFsck { } private Path getSidelineDir() throws IOException { - Path hbaseDir = FSUtils.getRootDir(conf); - Path hbckDir = new Path(hbaseDir.getParent(), "hbck"); - Path backupDir = new Path(hbckDir, hbaseDir.getName() + "-" - + startMillis); - return backupDir; + if (sidelineDir == null) { + Path hbaseDir = FSUtils.getRootDir(conf); + sidelineDir = new Path(hbaseDir, DEFAULT_SIDELINE_DIR); + } + return sidelineDir; } /** @@ -957,8 +961,7 @@ public class HBaseFsck { // put current -ROOT- and .META. aside. Path hbaseDir = new Path(conf.get(HConstants.HBASE_DIR)); FileSystem fs = hbaseDir.getFileSystem(conf); - Path backupDir = new Path(hbaseDir.getParent(), hbaseDir.getName() + "-" - + startMillis); + Path backupDir = getSidelineDir(); fs.mkdirs(backupDir); sidelineTable(fs, HConstants.ROOT_TABLE_NAME, hbaseDir, backupDir); @@ -2986,6 +2989,14 @@ public class HBaseFsck { timelag = seconds * 1000; // convert to milliseconds } + /** + * + * @param sidelineDir - HDFS path to sideline data + */ + public void setSidelineDir(String sidelineDir) { + this.sidelineDir = new Path(sidelineDir); + } + protected static void printUsageAndExit() { System.err.println("Usage: fsck [opts] {only tables}"); System.err.println(" where [opts] are:"); Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java?rev=1353008&r1=1353007&r2=1353008&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java Fri Jun 22 19:49:53 2012 @@ -51,6 +51,8 @@ public class OfflineMetaRepair { System.err .println(" -details Display full report of all regions."); System.err.println(" -base Base Hbase Data directory"); + System.err + .println(" -sidelineDir HDFS path to backup existing meta and root."); System.err.println(" -fix Auto fix as many problems as possible"); System.err.println(" -fixHoles Auto fix as region holes"); Runtime.getRuntime().exit(-2); @@ -85,6 +87,9 @@ public class OfflineMetaRepair { conf.set(HConstants.HBASE_DIR, path); conf.set("fs.defaultFS", conf.get(HConstants.HBASE_DIR)); conf.set("fs.default.name", conf.get(HConstants.HBASE_DIR)); + } else if (cmd.equals("-sidelineDir")) { + i++; + fsck.setSidelineDir(args[i]); } else if (cmd.equals("-fixHoles")) { fixHoles = true; } else if (cmd.equals("-fix")) {