Repository: hbase
Updated Branches:
  refs/heads/branch-1 066f3f754 -> 569fe82ac
  refs/heads/master 094d65e6f -> 4b91a6425


HBASE-14714 some cleanup to snapshot code


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4b91a642
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4b91a642
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4b91a642

Branch: refs/heads/master
Commit: 4b91a6425eadc3578ec291496bbf7fde9742f96a
Parents: 094d65e
Author: Matteo Bertozzi <matteo.berto...@cloudera.com>
Authored: Thu Oct 29 13:48:59 2015 -0700
Committer: Matteo Bertozzi <matteo.berto...@cloudera.com>
Committed: Thu Oct 29 13:48:59 2015 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/HTableDescriptor.java   | 15 +++-
 .../hbase/client/TableSnapshotScanner.java      | 39 +++------
 .../hadoop/hbase/master/MasterFileSystem.java   |  4 +
 .../hbase/master/snapshot/SnapshotManager.java  |  5 +-
 .../hbase/snapshot/RestoreSnapshotHelper.java   | 66 ++++++--------
 .../hadoop/hbase/snapshot/SnapshotManifest.java | 90 +++++++++-----------
 .../master/cleaner/TestSnapshotFromMaster.java  | 14 +--
 .../hadoop/hbase/mob/TestCachedMobFile.java     |  2 -
 .../apache/hadoop/hbase/mob/TestMobFile.java    |  1 -
 .../hbase/snapshot/MobSnapshotTestingUtils.java | 19 -----
 .../hbase/snapshot/SnapshotTestingUtils.java    | 30 +++----
 .../snapshot/TestFlushSnapshotFromClient.java   | 44 +++-------
 .../TestRestoreFlushSnapshotFromClient.java     |  5 +-
 .../snapshot/TestRestoreSnapshotHelper.java     | 11 +--
 14 files changed, 133 insertions(+), 212 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
index f3d7312..1bd4e07 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
@@ -355,8 +355,21 @@ public class HTableDescriptor implements 
Comparable<HTableDescriptor> {
    * @param desc The descriptor.
    */
   public HTableDescriptor(final HTableDescriptor desc) {
+    this(desc.name, desc);
+  }
+
+  /**
+   * Construct a table descriptor by cloning the descriptor passed as a 
parameter
+   * but using a different table name.
+   * <p>
+   * Makes a deep copy of the supplied descriptor.
+   * Can make a modifiable descriptor from an UnmodifyableHTableDescriptor.
+   * @param name Table name.
+   * @param desc The descriptor.
+   */
+  public HTableDescriptor(final TableName name, final HTableDescriptor desc) {
     super();
-    setName(desc.name);
+    setName(name);
     setMetaFlags(this.name);
     for (HColumnDescriptor c: desc.families.values()) {
       this.families.put(c.getName(), new HColumnDescriptor(c));

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
index f817e70..4601ae4 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
@@ -34,11 +34,7 @@ import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceStability;
-import 
org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
-import 
org.apache.hadoop.hbase.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;
 import org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper;
-import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;
-import org.apache.hadoop.hbase.snapshot.SnapshotManifest;
 import org.apache.hadoop.hbase.util.FSUtils;
 
 /**
@@ -49,8 +45,8 @@ import org.apache.hadoop.hbase.util.FSUtils;
  * <p>
  * This also allows one to run the scan from an
  * online or offline hbase cluster. The snapshot files can be exported by 
using the
- * {@link org.apache.hadoop.hbase.snapshot.ExportSnapshot} tool, 
- * to a pure-hdfs cluster, and this scanner can be used to 
+ * {@link org.apache.hadoop.hbase.snapshot.ExportSnapshot} tool,
+ * to a pure-hdfs cluster, and this scanner can be used to
  * run the scan directly over the snapshot files. The snapshot should not be 
deleted while there
  * are open scanners reading from snapshot files.
  *
@@ -125,23 +121,14 @@ public class TableSnapshotScanner extends 
AbstractClientScanner {
   }
 
   private void init() throws IOException {
-    Path snapshotDir = 
SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);
-    SnapshotDescription snapshotDesc = 
SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir);
-    SnapshotManifest manifest = SnapshotManifest.open(conf, fs, snapshotDir, 
snapshotDesc);
-
-    // load table descriptor
-    htd = manifest.getTableDescriptor();
-
-    List<SnapshotRegionManifest> regionManifests = 
manifest.getRegionManifests();
-    if (regionManifests == null) {
-      throw new IllegalArgumentException("Snapshot seems empty");
-    }
-
-    regions = new ArrayList<HRegionInfo>(regionManifests.size());
-    for (SnapshotRegionManifest regionManifest : regionManifests) {
-      // load region descriptor
-      HRegionInfo hri = HRegionInfo.convert(regionManifest.getRegionInfo());
-
+    final RestoreSnapshotHelper.RestoreMetaChanges meta =
+      RestoreSnapshotHelper.copySnapshotForScanner(
+        conf, fs, rootDir, restoreDir, snapshotName);
+    final List<HRegionInfo> restoredRegions = meta.getRegionsToAdd();
+
+    htd = meta.getTableDescriptor();
+    regions = new ArrayList<HRegionInfo>(restoredRegions.size());
+    for (HRegionInfo hri: restoredRegions) {
       if (CellUtil.overlappingKeys(scan.getStartRow(), scan.getStopRow(),
           hri.getStartKey(), hri.getEndKey())) {
         regions.add(hri);
@@ -150,11 +137,7 @@ public class TableSnapshotScanner extends 
AbstractClientScanner {
 
     // sort for regions according to startKey.
     Collections.sort(regions);
-
     initScanMetrics(scan);
-
-    RestoreSnapshotHelper.copySnapshotForScanner(conf, fs,
-      rootDir, restoreDir, snapshotName);
   }
 
   @Override
@@ -184,7 +167,7 @@ public class TableSnapshotScanner extends 
AbstractClientScanner {
         if (result == null) {
           currentRegionScanner.close();
           currentRegionScanner = null;
-        }        
+        }
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
index 9ec49c2..43ae2f8 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
@@ -612,4 +612,8 @@ public class MasterFileSystem {
   public RecoveryMode getLogRecoveryMode() {
     return this.splitLogManager.getRecoveryMode();
   }
+
+  public void logFileSystemState(Log log) throws IOException {
+    FSUtils.logFileSystemState(fs, rootdir, log);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
index d367d6e..d430493 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
@@ -70,7 +70,6 @@ import org.apache.hadoop.hbase.security.User;
 import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;
 import org.apache.hadoop.hbase.snapshot.HBaseSnapshotException;
 import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException;
-import org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper;
 import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;
 import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;
 import org.apache.hadoop.hbase.snapshot.SnapshotDoesNotExistException;
@@ -741,7 +740,7 @@ public class SnapshotManager extends MasterProcedureManager 
implements Stoppable
         cpHost.postRestoreSnapshot(reqSnapshot, snapshotTableDesc);
       }
     } else {
-      HTableDescriptor htd = 
RestoreSnapshotHelper.cloneTableSchema(snapshotTableDesc, tableName);
+      HTableDescriptor htd = new HTableDescriptor(tableName, 
snapshotTableDesc);
       if (cpHost != null) {
         cpHost.preCloneSnapshot(reqSnapshot, htd);
       }
@@ -761,7 +760,7 @@ public class SnapshotManager extends MasterProcedureManager 
implements Stoppable
       }
     }
   }
-  
+
   private void checkAndUpdateNamespaceQuota(SnapshotManifest manifest, 
TableName tableName)
       throws IOException {
     if (this.master.getMasterQuotaManager().isQuotaEnabled()) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
index 81e653d..0f14f70 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -40,7 +41,6 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.backup.HFileArchiver;
@@ -183,7 +183,7 @@ public class RestoreSnapshotHelper {
       return null;
     }
 
-    RestoreMetaChanges metaChanges = new RestoreMetaChanges(parentsMap);
+    RestoreMetaChanges metaChanges = new RestoreMetaChanges(tableDesc, 
parentsMap);
 
     // Take a copy of the manifest.keySet() since we are going to modify
     // this instance, by removing the regions already present in the restore 
dir.
@@ -259,13 +259,19 @@ public class RestoreSnapshotHelper {
    */
   public static class RestoreMetaChanges {
     private final Map<String, Pair<String, String> > parentsMap;
+    private final HTableDescriptor htd;
 
     private List<HRegionInfo> regionsToRestore = null;
     private List<HRegionInfo> regionsToRemove = null;
     private List<HRegionInfo> regionsToAdd = null;
 
-    RestoreMetaChanges(final Map<String, Pair<String, String> > parentsMap) {
+    RestoreMetaChanges(HTableDescriptor htd, Map<String, Pair<String, String> 
> parentsMap) {
       this.parentsMap = parentsMap;
+      this.htd = htd;
+    }
+
+    public HTableDescriptor getTableDescriptor() {
+      return htd;
     }
 
     /**
@@ -527,13 +533,12 @@ public class RestoreSnapshotHelper {
    * @return The set of files in the specified family directory.
    */
   private Set<String> getTableRegionFamilyFiles(final Path familyDir) throws 
IOException {
-    Set<String> familyFiles = new HashSet<String>();
-
     FileStatus[] hfiles = FSUtils.listStatus(fs, familyDir);
-    if (hfiles == null) return familyFiles;
+    if (hfiles == null) return Collections.emptySet();
 
-    for (FileStatus hfileRef: hfiles) {
-      String hfileName = hfileRef.getPath().getName();
+    Set<String> familyFiles = new HashSet<String>(hfiles.length);
+    for (int i = 0; i < hfiles.length; ++i) {
+      String hfileName = hfiles[i].getPath().getName();
       familyFiles.add(hfileName);
     }
 
@@ -685,7 +690,7 @@ public class RestoreSnapshotHelper {
     Path refPath =
         StoreFileInfo.getReferredToFile(new Path(new Path(new Path(new 
Path(snapshotTable
             .getNamespaceAsString(), snapshotTable.getQualifierAsString()), 
regionInfo
-            .getEncodedName()), familyDir.getName()), hfileName));    
+            .getEncodedName()), familyDir.getName()), hfileName));
     String snapshotRegionName = refPath.getParent().getParent().getName();
     String fileName = refPath.getName();
 
@@ -744,7 +749,11 @@ public class RestoreSnapshotHelper {
    * @return the new HRegion instance
    */
   public HRegionInfo cloneRegionInfo(final HRegionInfo snapshotRegionInfo) {
-    HRegionInfo regionInfo = new HRegionInfo(tableDesc.getTableName(),
+    return cloneRegionInfo(tableDesc.getTableName(), snapshotRegionInfo);
+  }
+
+  public static HRegionInfo cloneRegionInfo(TableName tableName, HRegionInfo 
snapshotRegionInfo) {
+    HRegionInfo regionInfo = new HRegionInfo(tableName,
                       snapshotRegionInfo.getStartKey(), 
snapshotRegionInfo.getEndKey(),
                       snapshotRegionInfo.isSplit(), 
snapshotRegionInfo.getRegionId());
     regionInfo.setOffline(snapshotRegionInfo.isOffline());
@@ -759,9 +768,9 @@ public class RestoreSnapshotHelper {
     FileStatus[] regionDirs = FSUtils.listStatus(fs, tableDir, new 
FSUtils.RegionDirFilter(fs));
     if (regionDirs == null) return null;
 
-    List<HRegionInfo> regions = new LinkedList<HRegionInfo>();
-    for (FileStatus regionDir: regionDirs) {
-      HRegionInfo hri = HRegionFileSystem.loadRegionInfoFileContent(fs, 
regionDir.getPath());
+    List<HRegionInfo> regions = new ArrayList<HRegionInfo>(regionDirs.length);
+    for (int i = 0; i < regionDirs.length; ++i) {
+      HRegionInfo hri = HRegionFileSystem.loadRegionInfoFileContent(fs, 
regionDirs[i].getPath());
       regions.add(hri);
     }
     LOG.debug("found " + regions.size() + " regions for table=" +
@@ -770,30 +779,6 @@ public class RestoreSnapshotHelper {
   }
 
   /**
-   * Create a new table descriptor cloning the snapshot table schema.
-   *
-   * @param snapshotTableDescriptor
-   * @param tableName
-   * @return cloned table descriptor
-   * @throws IOException
-   */
-  public static HTableDescriptor cloneTableSchema(final HTableDescriptor 
snapshotTableDescriptor,
-      final TableName tableName) throws IOException {
-    HTableDescriptor htd = new HTableDescriptor(tableName);
-    for (HColumnDescriptor hcd: snapshotTableDescriptor.getColumnFamilies()) {
-      htd.addFamily(hcd);
-    }
-    for (Map.Entry<Bytes, Bytes> e:
-        snapshotTableDescriptor.getValues().entrySet()) {
-      htd.setValue(e.getKey(), e.getValue());
-    }
-    for (Map.Entry<String, String> e: 
snapshotTableDescriptor.getConfiguration().entrySet()) {
-      htd.setConfiguration(e.getKey(), e.getValue());
-    }
-    return htd;
-  }
-
-  /**
    * Copy the snapshot files for a snapshot scanner, discards meta changes.
    * @param conf
    * @param fs
@@ -802,8 +787,8 @@ public class RestoreSnapshotHelper {
    * @param snapshotName
    * @throws IOException
    */
-  public static void copySnapshotForScanner(Configuration conf, FileSystem fs, 
Path rootDir,
-      Path restoreDir, String snapshotName) throws IOException {
+  public static RestoreMetaChanges copySnapshotForScanner(Configuration conf, 
FileSystem fs,
+      Path rootDir, Path restoreDir, String snapshotName) throws IOException {
     // ensure that restore dir is not under root dir
     if 
(!restoreDir.getFileSystem(conf).getUri().equals(rootDir.getFileSystem(conf).getUri()))
 {
       throw new IllegalArgumentException("Filesystems for restore directory 
and HBase root " +
@@ -826,11 +811,12 @@ public class RestoreSnapshotHelper {
     // in the base hbase root dir.
     RestoreSnapshotHelper helper = new RestoreSnapshotHelper(conf, fs,
       manifest, manifest.getTableDescriptor(), restoreDir, monitor, status, 
false);
-    helper.restoreHdfsRegions(); // TODO: parallelize.
+    RestoreMetaChanges metaChanges = helper.restoreHdfsRegions(); // TODO: 
parallelize.
 
     if (LOG.isDebugEnabled()) {
       LOG.debug("Restored table dir:" + restoreDir);
       FSUtils.logFileSystemState(fs, restoreDir, LOG);
     }
+    return metaChanges;
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java
index ca004db..d3b9812 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java
@@ -176,33 +176,16 @@ public final class SnapshotManifest {
       monitor.rethrowException();
 
       Path storePath = MobUtils.getMobFamilyPath(mobRegionPath, 
hcd.getNameAsString());
-      if (!fs.exists(storePath)) {
-        continue;
-      }
-      FileStatus[] stats = fs.listStatus(storePath);
-      if (stats == null) {
+      List<StoreFileInfo> storeFiles = getStoreFiles(storePath);
+      if (storeFiles == null) {
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("No mob files under family: " + hcd.getNameAsString());
+        }
         continue;
       }
-      List<StoreFileInfo> storeFiles = new ArrayList<StoreFileInfo>();
-      for (FileStatus stat : stats) {
-        storeFiles.add(new StoreFileInfo(conf, fs, stat));
-      }
-      if (LOG.isDebugEnabled()) {
-        LOG.debug("Adding snapshot references for " + storeFiles + " mob 
files");
-      }
 
-      // 2.2. iterate through all the mob files and create "references".
-      for (int i = 0, sz = storeFiles.size(); i < sz; i++) {
-        StoreFileInfo storeFile = storeFiles.get(i);
-        monitor.rethrowException();
+      addReferenceFiles(visitor, regionData, familyData, storeFiles, true);
 
-        // create "reference" to this store file.
-        if (LOG.isDebugEnabled()) {
-          LOG.debug("Adding reference for mob file (" + (i + 1) + "/" + sz + 
"): "
-            + storeFile.getPath());
-        }
-        visitor.storeFile(regionData, familyData, storeFile);
-      }
       visitor.familyClose(regionData, familyData);
     }
     visitor.regionClose(regionData);
@@ -286,20 +269,11 @@ public final class SnapshotManifest {
           if (isMobRegion) {
             Path regionPath = MobUtils.getMobRegionPath(conf, 
regionInfo.getTable());
             Path storePath = MobUtils.getMobFamilyPath(regionPath, familyName);
-            if (!fs.exists(storePath)) {
-              continue;
-            }
-            FileStatus[] stats = fs.listStatus(storePath);
-            if (stats == null) {
-              continue;
-            }
-            storeFiles = new ArrayList<StoreFileInfo>();
-            for (FileStatus stat : stats) {
-              storeFiles.add(new StoreFileInfo(conf, fs, stat));
-            }
+            storeFiles = getStoreFiles(storePath);
           } else {
             storeFiles = regionFs.getStoreFiles(familyName);
           }
+
           if (storeFiles == null) {
             if (LOG.isDebugEnabled()) {
               LOG.debug("No files under family: " + familyName);
@@ -308,21 +282,9 @@ public final class SnapshotManifest {
           }
 
           // 2.1. build the snapshot reference for the store
-          if (LOG.isDebugEnabled()) {
-            LOG.debug("Adding snapshot references for " + storeFiles  + " 
hfiles");
-          }
-
-          // 2.2. iterate through all the store's files and create 
"references".
-          int i = 0;
-          int sz = storeFiles.size();
-          for (StoreFileInfo storeFile: storeFiles) {
-            monitor.rethrowException();
+          // iterate through all the store's files and create "references".
+          addReferenceFiles(visitor, regionData, familyData, storeFiles, 
false);
 
-            // create "reference" to this store file.
-            LOG.debug("Adding reference for file (" + (++i) + "/" + sz + "): "
-                + storeFile.getPath());
-            visitor.storeFile(regionData, familyData, storeFile);
-          }
           visitor.familyClose(regionData, familyData);
         }
       }
@@ -335,6 +297,38 @@ public final class SnapshotManifest {
     }
   }
 
+  private List<StoreFileInfo> getStoreFiles(Path storeDir) throws IOException {
+    FileStatus[] stats = FSUtils.listStatus(fs, storeDir);
+    if (stats == null) return null;
+
+    ArrayList<StoreFileInfo> storeFiles = new 
ArrayList<StoreFileInfo>(stats.length);
+    for (int i = 0; i < stats.length; ++i) {
+      storeFiles.add(new StoreFileInfo(conf, fs, stats[i]));
+    }
+    return storeFiles;
+  }
+
+  private void addReferenceFiles(RegionVisitor visitor, Object regionData, 
Object familyData,
+      Collection<StoreFileInfo> storeFiles, boolean isMob) throws IOException {
+    final String fileType = isMob ? "mob file" : "hfile";
+
+    if (LOG.isDebugEnabled()) {
+      LOG.debug(String.format("Adding snapshot references for %s %ss", 
storeFiles, fileType));
+    }
+
+    int i = 0;
+    int sz = storeFiles.size();
+    for (StoreFileInfo storeFile: storeFiles) {
+      monitor.rethrowException();
+
+      LOG.debug(String.format("Adding reference for %s (%d/%d): %s",
+          fileType, ++i, sz, storeFile.getPath()));
+
+      // create "reference" to this store file.
+      visitor.storeFile(regionData, familyData, storeFile);
+    }
+  }
+
   /**
    * Load the information in the SnapshotManifest. Called by 
SnapshotManifest.open()
    *

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java
index 687b6ae..20b0642 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java
@@ -22,9 +22,7 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -380,17 +378,7 @@ public class TestSnapshotFromMaster {
   private final Collection<String> getArchivedHFiles(Path archiveDir, Path 
rootDir,
       FileSystem fs, TableName tableName) throws IOException {
     Path tableArchive = FSUtils.getTableDir(archiveDir, tableName);
-    Path[] archivedHFiles = SnapshotTestingUtils.listHFiles(fs, tableArchive);
-    List<String> files = new ArrayList<String>(archivedHFiles.length);
-    LOG.debug("Have archived hfiles: " + tableArchive);
-    for (Path file : archivedHFiles) {
-      LOG.debug(file);
-      files.add(file.getName());
-    }
-    // sort the archived files
-
-    Collections.sort(files);
-    return files;
+    return SnapshotTestingUtils.listHFileNames(fs, tableArchive);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestCachedMobFile.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestCachedMobFile.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestCachedMobFile.java
index 4bb525d..7eb63d1 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestCachedMobFile.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestCachedMobFile.java
@@ -26,7 +26,6 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.KeyValue.Type;
@@ -36,7 +35,6 @@ import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;
 import org.apache.hadoop.hbase.regionserver.StoreFile;
 import org.apache.hadoop.hbase.testclassification.SmallTests;
 import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.FSUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFile.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFile.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFile.java
index e2dced9..7523ca5 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFile.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFile.java
@@ -37,7 +37,6 @@ import org.apache.hadoop.hbase.regionserver.StoreFile;
 import org.apache.hadoop.hbase.regionserver.StoreFileScanner;
 import org.apache.hadoop.hbase.testclassification.SmallTests;
 import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.FSUtils;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java
index a278244..51b44ce 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java
@@ -88,25 +88,6 @@ public class MobSnapshotTestingUtils {
   /**
    * Return the number of rows in the given table.
    */
-  public static int countMobRows(final Table table) throws IOException {
-    Scan scan = new Scan();
-    ResultScanner results = table.getScanner(scan);
-    int count = 0;
-    for (Result res : results) {
-      count++;
-      List<Cell> cells = res.listCells();
-      for (Cell cell : cells) {
-        // Verify the value
-        Assert.assertTrue(CellUtil.cloneValue(cell).length > 0);
-      }
-    }
-    results.close();
-    return count;
-  }
-
-  /**
-   * Return the number of rows in the given table.
-   */
   public static int countMobRows(final Table table, final byte[]... families)
       throws IOException {
     Scan scan = new Scan();

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java
index 39c8f21..96e3990 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java
@@ -22,7 +22,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -149,6 +149,14 @@ public class SnapshotTestingUtils {
         tableName);
   }
 
+  public static void confirmSnapshotValid(HBaseTestingUtility testUtil,
+      SnapshotDescription snapshotDescriptor, TableName tableName, byte[] 
family)
+      throws IOException {
+    MasterFileSystem mfs = 
testUtil.getHBaseCluster().getMaster().getMasterFileSystem();
+    confirmSnapshotValid(snapshotDescriptor, tableName, family,
+        mfs.getRootDir(), testUtil.getHBaseAdmin(), mfs.getFileSystem());
+  }
+
   /**
    * Confirm that the snapshot contains references to all the files that should
    * be in the snapshot.
@@ -335,28 +343,18 @@ public class SnapshotTestingUtils {
    * @return array of the current HFiles in the table (could be a zero-length 
array)
    * @throws IOException on unexecpted error reading the FS
    */
-  public static Path[] listHFiles(final FileSystem fs, final Path tableDir)
+  public static ArrayList<String> listHFileNames(final FileSystem fs, final 
Path tableDir)
       throws IOException {
-    final ArrayList<Path> hfiles = new ArrayList<Path>();
+    final ArrayList<String> hfiles = new ArrayList<String>();
     FSVisitor.visitTableStoreFiles(fs, tableDir, new 
FSVisitor.StoreFileVisitor() {
       @Override
       public void storeFile(final String region, final String family, final 
String hfileName)
           throws IOException {
-        hfiles.add(new Path(tableDir, new Path(region, new Path(family, 
hfileName))));
+        hfiles.add(hfileName);
       }
     });
-    return hfiles.toArray(new Path[hfiles.size()]);
-  }
-
-  public static String[] listHFileNames(final FileSystem fs, final Path 
tableDir)
-      throws IOException {
-    Path[] files = listHFiles(fs, tableDir);
-    String[] names = new String[files.length];
-    for (int i = 0; i < files.length; ++i) {
-      names[i] = files[i].getName();
-    }
-    Arrays.sort(names);
-    return names;
+    Collections.sort(hfiles);
+    return hfiles;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java
index b30bcc9..dbf2f0d 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java
@@ -48,7 +48,6 @@ import 
org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
 import org.apache.hadoop.hbase.testclassification.LargeTests;
 import org.apache.hadoop.hbase.testclassification.RegionServerTests;
 import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.FSUtils;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -138,8 +137,7 @@ public class TestFlushSnapshotFromClient {
     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, 
TEST_FAM);
 
     LOG.debug("FS state before snapshot:");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-        FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
     // take a snapshot of the enabled table
     String snapshotString = "offlineTableSnapshot";
@@ -152,14 +150,10 @@ public class TestFlushSnapshotFromClient {
       snapshot, TABLE_NAME);
 
     // make sure its a valid snapshot
-    FileSystem fs = 
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();
-    Path rootDir = 
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();
     LOG.debug("FS state after snapshot:");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-        FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
-    SnapshotTestingUtils.confirmSnapshotValid(snapshots.get(0), TABLE_NAME, 
TEST_FAM, rootDir,
-        admin, fs);
+    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), 
TABLE_NAME, TEST_FAM);
   }
 
    /**
@@ -177,8 +171,7 @@ public class TestFlushSnapshotFromClient {
     UTIL.loadTable(table, TEST_FAM);
 
     LOG.debug("FS state before snapshot:");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-        FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
     // take a snapshot of the enabled table
     String snapshotString = "skipFlushTableSnapshot";
@@ -191,14 +184,10 @@ public class TestFlushSnapshotFromClient {
         snapshot, TABLE_NAME);
 
     // make sure its a valid snapshot
-    FileSystem fs = 
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();
-    Path rootDir = 
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();
     LOG.debug("FS state after snapshot:");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-        FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
-    SnapshotTestingUtils.confirmSnapshotValid(snapshots.get(0), TABLE_NAME, 
TEST_FAM, rootDir,
-        admin, fs);
+    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), 
TABLE_NAME, TEST_FAM);
 
     admin.deleteSnapshot(snapshot);
     snapshots = admin.listSnapshots();
@@ -220,8 +209,7 @@ public class TestFlushSnapshotFromClient {
     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, 
TEST_FAM);
 
     LOG.debug("FS state before snapshot:");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-        FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
     // take a snapshot of the enabled table
     String snapshotString = "offlineTableSnapshot";
@@ -239,14 +227,10 @@ public class TestFlushSnapshotFromClient {
       snapshot, TABLE_NAME);
 
     // make sure its a valid snapshot
-    FileSystem fs = 
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();
-    Path rootDir = 
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();
     LOG.debug("FS state after snapshot:");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-        FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
-    SnapshotTestingUtils.confirmSnapshotValid(snapshots.get(0), TABLE_NAME, 
TEST_FAM, rootDir,
-        admin, fs);
+    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), 
TABLE_NAME, TEST_FAM);
   }
 
   @Test (timeout=300000)
@@ -293,8 +277,8 @@ public class TestFlushSnapshotFromClient {
     HMaster master = UTIL.getMiniHBaseCluster().getMaster();
     SnapshotTestingUtils.waitForSnapshotToComplete(master, snapshot, 200);
     LOG.info(" === Async Snapshot Completed ===");
-    FSUtils.logFileSystemState(UTIL.getTestFileSystem(),
-      FSUtils.getRootDir(UTIL.getConfiguration()), LOG);
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+
     // make sure we get the snapshot
     SnapshotTestingUtils.assertOneSnapshotThatMatches(admin, snapshot);
   }
@@ -494,7 +478,7 @@ public class TestFlushSnapshotFromClient {
     }
 
     // dump for debugging
-    logFSTree(FSUtils.getRootDir(UTIL.getConfiguration()));
+    
UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
 
     List<SnapshotDescription> taken = admin.listSnapshots();
     int takenSize = taken.size();
@@ -518,10 +502,6 @@ public class TestFlushSnapshotFromClient {
     UTIL.deleteTable(TABLE2_NAME);
   }
 
-  private void logFSTree(Path root) throws IOException {
-    FSUtils.logFileSystemState(UTIL.getDFSCluster().getFileSystem(), root, 
LOG);
-  }
-
   private void waitRegionsAfterMerge(final long numRegionsAfterMerge)
       throws IOException, InterruptedException {
     Admin admin = UTIL.getHBaseAdmin();

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.java
index 99ece6c..877ee21 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.java
@@ -27,14 +27,12 @@ import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.Table;
-import org.apache.hadoop.hbase.master.MasterFileSystem;
 import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;
 import 
org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
 import 
org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager;
 import org.apache.hadoop.hbase.testclassification.LargeTests;
 import org.apache.hadoop.hbase.testclassification.RegionServerTests;
 import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.FSUtils;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -208,8 +206,7 @@ public class TestRestoreFlushSnapshotFromClient {
   //  Helpers
   // ==========================================================================
   private void logFSTree() throws IOException {
-    MasterFileSystem mfs = 
UTIL.getMiniHBaseCluster().getMaster().getMasterFileSystem();
-    FSUtils.logFileSystemState(mfs.getFileSystem(), mfs.getRootDir(), LOG);
+    
UTIL.getMiniHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
   }
 
   protected void verifyRowCount(final HBaseTestingUtility util, final 
TableName tableName,

http://git-wip-us.apache.org/repos/asf/hbase/blob/4b91a642/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java
index 0b28cb2..a251c1c 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -124,12 +125,12 @@ public class TestRestoreSnapshotHelper {
 
   private void verifyRestore(final Path rootDir, final HTableDescriptor 
sourceHtd,
       final HTableDescriptor htdClone) throws IOException {
-    String[] files = SnapshotTestingUtils.listHFileNames(fs,
+    List<String> files = SnapshotTestingUtils.listHFileNames(fs,
       FSUtils.getTableDir(rootDir, htdClone.getTableName()));
-    assertEquals(12, files.length);
-    for (int i = 0; i < files.length; i += 2) {
-      String linkFile = files[i];
-      String refFile = files[i+1];
+    assertEquals(12, files.size());
+    for (int i = 0; i < files.size(); i += 2) {
+      String linkFile = files.get(i);
+      String refFile = files.get(i+1);
       assertTrue(linkFile + " should be a HFileLink", 
HFileLink.isHFileLink(linkFile));
       assertTrue(refFile + " should be a Referene", 
StoreFileInfo.isReference(refFile));
       assertEquals(sourceHtd.getTableName(), 
HFileLink.getReferencedTableName(linkFile));

Reply via email to