You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2016/11/04 20:54:41 UTC

[2/3] hbase git commit: HBASE-16892 Use TableName instead of String in SnapshotDescription

HBASE-16892 Use TableName instead of String in SnapshotDescription


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

Branch: refs/heads/master
Commit: 00ea7aeafe6f0070dedf86a296eefd5d3c453077
Parents: efe0a0e
Author: Matteo Bertozzi <ma...@cloudera.com>
Authored: Fri Nov 4 13:18:10 2016 -0700
Committer: Matteo Bertozzi <ma...@cloudera.com>
Committed: Fri Nov 4 13:18:10 2016 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/client/HBaseAdmin.java  | 49 ++++------------
 .../hbase/client/SnapshotDescription.java       | 61 +++++++++++++++++---
 .../hbase/shaded/protobuf/ProtobufUtil.java     |  9 +--
 .../hbase/client/TestSnapshotFromAdmin.java     | 19 ++++--
 .../hbase/tmpl/master/MasterStatusTmpl.jamon    |  2 +-
 .../hadoop/hbase/snapshot/CreateSnapshot.java   |  4 +-
 .../hadoop/hbase/snapshot/SnapshotInfo.java     | 30 ++++------
 .../resources/hbase-webapps/master/snapshot.jsp |  2 +-
 .../hbase/client/TestSnapshotFromClient.java    |  2 +-
 .../master/cleaner/TestSnapshotFromMaster.java  | 24 ++++----
 .../hbase/snapshot/SnapshotTestingUtils.java    | 12 ++--
 .../snapshot/TestFlushSnapshotFromClient.java   | 10 ++--
 12 files changed, 124 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index f4008fd..4e195d1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -2338,14 +2338,15 @@ public class HBaseAdmin implements Admin {
   public void snapshot(final String snapshotName, final TableName tableName,
       SnapshotType type)
       throws IOException, SnapshotCreationException, IllegalArgumentException {
-    snapshot(new SnapshotDescription(snapshotName, tableName.getNameAsString(), type));
+    snapshot(new SnapshotDescription(snapshotName, tableName, type));
   }
 
   @Override
   public void snapshot(SnapshotDescription snapshotDesc)
       throws IOException, SnapshotCreationException, IllegalArgumentException {
     // actually take the snapshot
-    HBaseProtos.SnapshotDescription snapshot = createHBaseProtosSnapshotDesc(snapshotDesc);
+    HBaseProtos.SnapshotDescription snapshot =
+      ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc);
     SnapshotResponse response = asyncSnapshot(snapshot);
     final IsSnapshotDoneRequest request =
         IsSnapshotDoneRequest.newBuilder().setSnapshot(snapshot).build();
@@ -2387,31 +2388,7 @@ public class HBaseAdmin implements Admin {
   @Override
   public void takeSnapshotAsync(SnapshotDescription snapshotDesc) throws IOException,
       SnapshotCreationException {
-    HBaseProtos.SnapshotDescription snapshot = createHBaseProtosSnapshotDesc(snapshotDesc);
-    asyncSnapshot(snapshot);
-  }
-
-  private HBaseProtos.SnapshotDescription
-      createHBaseProtosSnapshotDesc(SnapshotDescription snapshotDesc) {
-    HBaseProtos.SnapshotDescription.Builder builder = HBaseProtos.SnapshotDescription.newBuilder();
-    if (snapshotDesc.getTable() != null) {
-      builder.setTable(snapshotDesc.getTable());
-    }
-    if (snapshotDesc.getName() != null) {
-      builder.setName(snapshotDesc.getName());
-    }
-    if (snapshotDesc.getOwner() != null) {
-      builder.setOwner(snapshotDesc.getOwner());
-    }
-    if (snapshotDesc.getCreationTime() != -1) {
-      builder.setCreationTime(snapshotDesc.getCreationTime());
-    }
-    if (snapshotDesc.getVersion() != -1) {
-      builder.setVersion(snapshotDesc.getVersion());
-    }
-    builder.setType(ProtobufUtil.createProtosSnapShotDescType(snapshotDesc.getType()));
-    HBaseProtos.SnapshotDescription snapshot = builder.build();
-    return snapshot;
+    asyncSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc));
   }
 
   private SnapshotResponse asyncSnapshot(HBaseProtos.SnapshotDescription snapshot)
@@ -2432,7 +2409,8 @@ public class HBaseAdmin implements Admin {
   @Override
   public boolean isSnapshotFinished(final SnapshotDescription snapshotDesc)
       throws IOException, HBaseSnapshotException, UnknownSnapshotException {
-    final HBaseProtos.SnapshotDescription snapshot = createHBaseProtosSnapshotDesc(snapshotDesc);
+    final HBaseProtos.SnapshotDescription snapshot =
+        ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc);
     return executeCallable(new MasterCallable<IsSnapshotDoneResponse>(getConnection(),
         getRpcControllerFactory()) {
       @Override
@@ -2475,7 +2453,7 @@ public class HBaseAdmin implements Admin {
     TableName tableName = null;
     for (SnapshotDescription snapshotInfo: listSnapshots()) {
       if (snapshotInfo.getName().equals(snapshotName)) {
-        tableName = TableName.valueOf(snapshotInfo.getTable());
+        tableName = snapshotInfo.getTableName();
         break;
       }
     }
@@ -2729,8 +2707,7 @@ public class HBaseAdmin implements Admin {
       }
     });
 
-    return new RestoreSnapshotFuture(
-      this, snapshot, TableName.valueOf(snapshot.getTable()), response);
+    return new RestoreSnapshotFuture(this, snapshot, tableName, response);
   }
 
   private static class RestoreSnapshotFuture extends TableFuture<Void> {
@@ -2772,9 +2749,7 @@ public class HBaseAdmin implements Admin {
             .getSnapshotsList();
         List<SnapshotDescription> result = new ArrayList<SnapshotDescription>(snapshotsList.size());
         for (HBaseProtos.SnapshotDescription snapshot : snapshotsList) {
-          result.add(new SnapshotDescription(snapshot.getName(), snapshot.getTable(),
-              ProtobufUtil.createSnapshotType(snapshot.getType()), snapshot.getOwner(),
-              snapshot.getCreationTime(), snapshot.getVersion()));
+          result.add(ProtobufUtil.createSnapshotDesc(snapshot));
         }
         return result;
       }
@@ -2814,7 +2789,7 @@ public class HBaseAdmin implements Admin {
 
     List<TableName> listOfTableNames = Arrays.asList(tableNames);
     for (SnapshotDescription snapshot : snapshots) {
-      if (listOfTableNames.contains(TableName.valueOf(snapshot.getTable()))) {
+      if (listOfTableNames.contains(snapshot.getTableName())) {
         tableSnapshots.add(snapshot);
       }
     }
@@ -2857,7 +2832,7 @@ public class HBaseAdmin implements Admin {
         internalDeleteSnapshot(snapshot);
       } catch (IOException ex) {
         LOG.info(
-          "Failed to delete snapshot " + snapshot.getName() + " for table " + snapshot.getTable(),
+          "Failed to delete snapshot " + snapshot.getName() + " for table " + snapshot.getTableNameAsString(),
           ex);
       }
     }
@@ -2868,7 +2843,7 @@ public class HBaseAdmin implements Admin {
       @Override
       protected Void rpcCall() throws Exception {
         this.master.deleteSnapshot(getRpcController(), DeleteSnapshotRequest.newBuilder()
-          .setSnapshot(createHBaseProtosSnapshotDesc(snapshot)).build());
+          .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build());
         return null;
       }
     });

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-client/src/main/java/org/apache/hadoop/hbase/client/SnapshotDescription.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/SnapshotDescription.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/SnapshotDescription.java
index f737825..b9b6b6c 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/SnapshotDescription.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/SnapshotDescription.java
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 package org.apache.hadoop.hbase.client;
+
+import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceStability;
 
@@ -25,31 +27,64 @@ import org.apache.hadoop.hbase.classification.InterfaceStability;
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
 public class SnapshotDescription {
-  private String name;
-  private String table;
-  private SnapshotType snapShotType = SnapshotType.DISABLED;
-  private String owner;
-  private long creationTime = -1L;
-  private int version = -1;
+  private final String name;
+  private final TableName table;
+  private final SnapshotType snapShotType;
+  private final String owner;
+  private final long creationTime;
+  private final int version;
 
   public SnapshotDescription(String name) {
-    this(name, null);
+    this(name, (TableName)null);
   }
 
+  /**
+   * @deprecated Use the version with the TableName instance instead
+   */
+  @Deprecated
   public SnapshotDescription(String name, String table) {
+    this(name, TableName.valueOf(table));
+  }
+
+  public SnapshotDescription(String name, TableName table) {
     this(name, table, SnapshotType.DISABLED, null);
   }
 
+  /**
+   * @deprecated Use the version with the TableName instance instead
+   */
+  @Deprecated
   public SnapshotDescription(String name, String table, SnapshotType type) {
+    this(name, TableName.valueOf(table), type);
+  }
+
+  public SnapshotDescription(String name, TableName table, SnapshotType type) {
     this(name, table, type, null);
   }
 
+  /**
+   * @deprecated Use the version with the TableName instance instead
+   */
+  @Deprecated
   public SnapshotDescription(String name, String table, SnapshotType type, String owner) {
+    this(name, TableName.valueOf(table), type, owner);
+  }
+
+  public SnapshotDescription(String name, TableName table, SnapshotType type, String owner) {
     this(name, table, type, owner, -1, -1);
   }
 
+  /**
+   * @deprecated Use the version with the TableName instance instead
+   */
+  @Deprecated
   public SnapshotDescription(String name, String table, SnapshotType type, String owner,
       long creationTime, int version) {
+    this(name, TableName.valueOf(table), type, owner, creationTime, version);
+  }
+
+  public SnapshotDescription(String name, TableName table, SnapshotType type, String owner,
+      long creationTime, int version) {
     this.name = name;
     this.table = table;
     this.snapShotType = type;
@@ -62,7 +97,19 @@ public class SnapshotDescription {
     return this.name;
   }
 
+  /**
+   * @deprecated Use getTableName() or getTableNameAsString() instead.
+   */
+  @Deprecated
   public String getTable() {
+    return getTableNameAsString();
+  }
+
+  public String getTableNameAsString() {
+    return this.table.getNameAsString();
+  }
+
+  public TableName getTableName() {
     return this.table;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
index 94efa37..2758c26 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
@@ -2871,8 +2871,8 @@ public final class ProtobufUtil {
   public static HBaseProtos.SnapshotDescription
       createHBaseProtosSnapshotDesc(SnapshotDescription snapshotDesc) {
     HBaseProtos.SnapshotDescription.Builder builder = HBaseProtos.SnapshotDescription.newBuilder();
-    if (snapshotDesc.getTable() != null) {
-      builder.setTable(snapshotDesc.getTable());
+    if (snapshotDesc.getTableName() != null) {
+      builder.setTable(snapshotDesc.getTableNameAsString());
     }
     if (snapshotDesc.getName() != null) {
       builder.setName(snapshotDesc.getName());
@@ -2900,7 +2900,8 @@ public final class ProtobufUtil {
    */
   public static SnapshotDescription
       createSnapshotDesc(HBaseProtos.SnapshotDescription snapshotDesc) {
-    return new SnapshotDescription(snapshotDesc.getName(), snapshotDesc.getTable(),
+    return new SnapshotDescription(snapshotDesc.getName(),
+        snapshotDesc.hasTable() ? TableName.valueOf(snapshotDesc.getTable()) : null,
         createSnapshotType(snapshotDesc.getType()), snapshotDesc.getOwner(),
         snapshotDesc.getCreationTime(), snapshotDesc.getVersion());
   }
@@ -3176,7 +3177,7 @@ public final class ProtobufUtil {
    * has a serialized {@link ServerName} in it.
    * @return Returns null if <code>data</code> is null else converts passed data
    * to a ServerName instance.
-   * @throws DeserializationException 
+   * @throws DeserializationException
    */
   public static ServerName parseServerNameFrom(final byte [] data) throws DeserializationException {
     if (data == null || data.length <= 0) return null;

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.java
index ccb5206..6d3d142 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.java
@@ -147,10 +147,10 @@ public class TestSnapshotFromAdmin {
     failSnapshotStart(admin, new SnapshotDescription("snap$hot"));
     failSnapshotStart(admin, new SnapshotDescription("snap:hot"));
     // check the table name also get verified
-    failSnapshotStart(admin, new SnapshotDescription("snapshot", ".table"));
-    failSnapshotStart(admin, new SnapshotDescription("snapshot", "-table"));
-    failSnapshotStart(admin, new SnapshotDescription("snapshot", "table fails"));
-    failSnapshotStart(admin, new SnapshotDescription("snapshot", "tab%le"));
+    failSnapshotDescriptorCreation("snapshot", ".table");
+    failSnapshotDescriptorCreation("snapshot", "-table");
+    failSnapshotDescriptorCreation("snapshot", "table fails");
+    failSnapshotDescriptorCreation("snapshot", "tab%le");
 
     // mock the master connection
     MasterKeepAliveConnection master = Mockito.mock(MasterKeepAliveConnection.class);
@@ -165,7 +165,7 @@ public class TestSnapshotFromAdmin {
           Mockito.any(IsSnapshotDoneRequest.class))).thenReturn(doneResponse);
 
       // make sure that we can use valid names
-    admin.snapshot(new SnapshotDescription("snapshot", "table"));
+    admin.snapshot(new SnapshotDescription("snapshot", TableName.valueOf("table")));
   }
 
   private void failSnapshotStart(Admin admin, SnapshotDescription snapshot)
@@ -177,4 +177,13 @@ public class TestSnapshotFromAdmin {
       LOG.debug("Correctly failed to start snapshot:" + e.getMessage());
     }
   }
+
+  private void failSnapshotDescriptorCreation(final String snapshotName, final String tableName) {
+    try {
+      new SnapshotDescription(snapshotName, tableName);
+      fail("SnapshotDescription should not have succeed with name:" + snapshotName);
+    } catch (IllegalArgumentException e) {
+      LOG.debug("Correctly failed to create SnapshotDescription:" + e.getMessage());
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
index e967083..36d5112 100644
--- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
+++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
@@ -486,7 +486,7 @@ AssignmentManager assignmentManager = master.getAssignmentManager();
     </tr>
     <%for SnapshotDescription snapshotDesc : snapshots%>
     <%java>
-        TableName snapshotTable = TableName.valueOf(snapshotDesc.getTable());
+        TableName snapshotTable = snapshotDesc.getTableName();
     </%java>
     <tr>
         <td><a href="snapshot.jsp?name=<% snapshotDesc.getName() %>"><% snapshotDesc.getName() %></a> </td>

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
index a65be93..f04bd63 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
@@ -34,7 +34,7 @@ import java.util.Arrays;
  * This is a command line class that will snapshot a given table.
  */
 public class CreateSnapshot extends AbstractHBaseTool {
-    private String tableName = null;
+    private TableName tableName = null;
     private String snapshotName = null;
     private String snapshotType = null;
 
@@ -53,7 +53,7 @@ public class CreateSnapshot extends AbstractHBaseTool {
 
     @Override
     protected void processOptions(CommandLine cmd) {
-        this.tableName = cmd.getOptionValue('t');
+        this.tableName = TableName.valueOf(cmd.getOptionValue('t'));
         this.snapshotName = cmd.getOptionValue('n');
         this.snapshotType = cmd.getOptionValue('s');
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
index ac309ec..cd20274 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
@@ -142,7 +142,7 @@ public final class SnapshotInfo extends Configured implements Tool {
         final SnapshotDescription snapshot)
     {
       this.snapshot = ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot);
-      this.snapshotTable = TableName.valueOf(snapshot.getTable());
+      this.snapshotTable = snapshot.getTableName();
       this.conf = conf;
       this.fs = fs;
     }
@@ -158,9 +158,7 @@ public final class SnapshotInfo extends Configured implements Tool {
 
     /** @return the snapshot descriptor */
     public SnapshotDescription getSnapshotDescription() {
-      return new SnapshotDescription(this.snapshot.getName(), this.snapshot.getTable(),
-          ProtobufUtil.createSnapshotType(this.snapshot.getType()), this.snapshot.getOwner(),
-          this.snapshot.getCreationTime(), this.snapshot.getVersion());
+      return ProtobufUtil.createSnapshotDesc(this.snapshot);
     }
 
     /** @return true if the snapshot is corrupted */
@@ -399,7 +397,7 @@ public final class SnapshotInfo extends Configured implements Tool {
         System.out.printf("%-20s | %20s | %s%n",
                           desc.getName(),
                           df.format(new Date(desc.getCreationTime())),
-                          desc.getTable());
+                          desc.getTableNameAsString());
       }
       return 0;
     }
@@ -485,9 +483,7 @@ public final class SnapshotInfo extends Configured implements Tool {
     // Collect information about hfiles and logs in the snapshot
     final HBaseProtos.SnapshotDescription snapshotDesc = snapshotManifest.getSnapshotDescription();
     final String table = snapshotDesc.getTable();
-    SnapshotDescription desc = new SnapshotDescription(snapshotDesc.getName(),
-        snapshotDesc.getTable(), ProtobufUtil.createSnapshotType(snapshotDesc.getType()),
-        snapshotDesc.getOwner(), snapshotDesc.getCreationTime(), snapshotDesc.getVersion());
+    final SnapshotDescription desc = ProtobufUtil.createSnapshotDesc(snapshotDesc);
     final SnapshotStats stats = new SnapshotStats(this.getConf(), this.fs, desc);
     SnapshotReferenceUtil.concurrentVisitReferencedFiles(getConf(), fs, snapshotManifest,
         "SnapshotInfo",
@@ -566,9 +562,8 @@ public final class SnapshotInfo extends Configured implements Tool {
    */
   public static SnapshotStats getSnapshotStats(final Configuration conf,
       final SnapshotDescription snapshot) throws IOException {
-    HBaseProtos.SnapshotDescription snapshotDesc = ProtobufUtil.createHBaseProtosSnapshotDesc(
-        snapshot);
-
+    HBaseProtos.SnapshotDescription snapshotDesc =
+      ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot);
     return getSnapshotStats(conf, snapshotDesc, null);
   }
 
@@ -616,9 +611,7 @@ public final class SnapshotInfo extends Configured implements Tool {
     for (FileStatus snapshotDirStat: snapshots) {
       HBaseProtos.SnapshotDescription snapshotDesc =
           SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDirStat.getPath());
-      snapshotLists.add(new SnapshotDescription(snapshotDesc.getName(),
-          snapshotDesc.getTable(), ProtobufUtil.createSnapshotType(snapshotDesc.getType()),
-          snapshotDesc.getOwner(), snapshotDesc.getCreationTime(), snapshotDesc.getVersion()));
+      snapshotLists.add(ProtobufUtil.createSnapshotDesc(snapshotDesc));
     }
     return snapshotLists;
   }
@@ -639,8 +632,8 @@ public final class SnapshotInfo extends Configured implements Tool {
       final ConcurrentHashMap<Path, Integer> filesMap,
       final AtomicLong uniqueHFilesArchiveSize, final AtomicLong uniqueHFilesSize,
       final AtomicLong uniqueHFilesMobSize) throws IOException {
-    HBaseProtos.SnapshotDescription snapshotDesc = ProtobufUtil.createHBaseProtosSnapshotDesc(
-        snapshot);
+    HBaseProtos.SnapshotDescription snapshotDesc =
+        ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot);
     Path rootDir = FSUtils.getRootDir(conf);
     final FileSystem fs = FileSystem.get(rootDir.toUri(), conf);
 
@@ -651,9 +644,8 @@ public final class SnapshotInfo extends Configured implements Tool {
           @Override public void storeFile(final HRegionInfo regionInfo, final String family,
               final SnapshotRegionManifest.StoreFile storeFile) throws IOException {
             if (!storeFile.hasReference()) {
-              HFileLink link = HFileLink
-                  .build(conf, TableName.valueOf(snapshot.getTable()), regionInfo.getEncodedName(),
-                      family, storeFile.getName());
+              HFileLink link = HFileLink.build(conf, snapshot.getTableName(),
+                  regionInfo.getEncodedName(), family, storeFile.getName());
               long size;
               Integer count;
               Path p;

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp b/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp
index 6bb1aa3..90f639b 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp
@@ -41,7 +41,7 @@
       if (snapshotName.equals(snapshotDesc.getName())) {
         snapshot = snapshotDesc;
         stats = SnapshotInfo.getSnapshotStats(conf, snapshot);
-        snapshotTable = TableName.valueOf(snapshot.getTable());
+        snapshotTable = snapshot.getTableName();
         tableExists = admin.tableExists(snapshotTable);
         break;
       }

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java
index 4b56f88..2de3528 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java
@@ -212,7 +212,7 @@ public class TestSnapshotFromClient {
     final String SNAPSHOT_NAME = "offlineTableSnapshot";
     byte[] snapshot = Bytes.toBytes(SNAPSHOT_NAME);
 
-    admin.snapshot(new SnapshotDescription(SNAPSHOT_NAME, STRING_TABLE_NAME,
+    admin.snapshot(new SnapshotDescription(SNAPSHOT_NAME, TABLE_NAME,
         SnapshotType.DISABLED, null, -1, SnapshotManifestV1.DESCRIPTOR_VERSION));
     LOG.debug("Snapshot completed.");
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/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 2cae2ac..0aeec0a 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
@@ -206,9 +206,7 @@ public class TestSnapshotFromMaster {
 
     // then create a snapshot to the fs and make sure that we can find it when checking done
     snapshotName = "completed";
-    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);
-    desc = desc.toBuilder().setName(snapshotName).build();
-    SnapshotDescriptionUtils.writeSnapshotInfo(desc, snapshotDir, fs);
+    desc = createSnapshot(snapshotName);
 
     builder.setSnapshot(desc);
     response = master.getMasterRpcServices().isSnapshotDone(null, builder.build());
@@ -225,9 +223,7 @@ public class TestSnapshotFromMaster {
 
     // write one snapshot to the fs
     String snapshotName = "completed";
-    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);
-    SnapshotDescription snapshot = SnapshotDescription.newBuilder().setName(snapshotName).build();
-    SnapshotDescriptionUtils.writeSnapshotInfo(snapshot, snapshotDir, fs);
+    SnapshotDescription snapshot = createSnapshot(snapshotName);
 
     // check that we get one snapshot
     response = master.getMasterRpcServices().getCompletedSnapshots(null, request);
@@ -238,9 +234,7 @@ public class TestSnapshotFromMaster {
 
     // write a second snapshot
     snapshotName = "completed_two";
-    snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);
-    snapshot = SnapshotDescription.newBuilder().setName(snapshotName).build();
-    SnapshotDescriptionUtils.writeSnapshotInfo(snapshot, snapshotDir, fs);
+    snapshot = createSnapshot(snapshotName);
     expected.add(snapshot);
 
     // check that we get one snapshot
@@ -266,8 +260,7 @@ public class TestSnapshotFromMaster {
     }
 
     // write one snapshot to the fs
-    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);
-    SnapshotDescriptionUtils.writeSnapshotInfo(snapshot, snapshotDir, fs);
+    createSnapshot(snapshotName);
 
     // then delete the existing snapshot,which shouldn't cause an exception to be thrown
     master.getMasterRpcServices().deleteSnapshot(null, request);
@@ -405,4 +398,13 @@ public class TestSnapshotFromMaster {
   private static void ensureHFileCleanersRun() {
     UTIL.getHBaseCluster().getMaster().getHFileCleaner().chore();
   }
+
+  private SnapshotDescription createSnapshot(final String snapshotName) throws IOException {
+    SnapshotTestingUtils.SnapshotMock snapshotMock =
+      new SnapshotTestingUtils.SnapshotMock(UTIL.getConfiguration(), fs, rootDir);
+    SnapshotTestingUtils.SnapshotMock.SnapshotBuilder builder =
+      snapshotMock.createSnapshotV2(snapshotName, "test", 0);
+    builder.commit();
+    return builder.getSnapshotDescription();
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/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 f56ecd8..4ebc74f 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
@@ -114,8 +114,7 @@ public final class SnapshotTestingUtils {
 
     List<SnapshotDescription> returnedSnapshots = new ArrayList<SnapshotDescription>();
     for (SnapshotDescription sd : snapshots) {
-      if (snapshotName.equals(sd.getName()) &&
-          tableName.equals(TableName.valueOf(sd.getTable()))) {
+      if (snapshotName.equals(sd.getName()) && tableName.equals(sd.getTableName())) {
         returnedSnapshots.add(sd);
       }
     }
@@ -129,8 +128,7 @@ public final class SnapshotTestingUtils {
    */
   public static void assertOneSnapshotThatMatches(Admin admin,
       HBaseProtos.SnapshotDescription snapshot) throws IOException {
-    assertOneSnapshotThatMatches(admin, snapshot.getName(),
-        TableName.valueOf(snapshot.getTable()));
+    assertOneSnapshotThatMatches(admin, snapshot.getName(), TableName.valueOf(snapshot.getTable()));
   }
 
   /**
@@ -145,7 +143,7 @@ public final class SnapshotTestingUtils {
 
     assertEquals("Should only have 1 snapshot", 1, snapshots.size());
     assertEquals(snapshotName, snapshots.get(0).getName());
-    assertEquals(tableName, TableName.valueOf(snapshots.get(0).getTable()));
+    assertEquals(tableName, snapshots.get(0).getTableName());
 
     return snapshots;
   }
@@ -271,7 +269,7 @@ public final class SnapshotTestingUtils {
    * @param snapshot: the snapshot to check
    * @param sleep: amount to sleep between checks to see if the snapshot is done
    * @throws ServiceException if the snapshot fails
-   * @throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException 
+   * @throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException
    */
   public static void waitForSnapshotToComplete(HMaster master,
       HBaseProtos.SnapshotDescription snapshot, long sleep)
@@ -301,7 +299,7 @@ public final class SnapshotTestingUtils {
     CorruptedSnapshotException lastEx = null;
     while (tries++ < numTries) {
       try {
-        admin.snapshot(new SnapshotDescription(snapshotName, tableName,
+        admin.snapshot(new SnapshotDescription(snapshotName, TableName.valueOf(tableName),
             SnapshotType.valueOf(type.toString())));
         return;
       } catch (CorruptedSnapshotException cse) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/00ea7aea/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 521524f..fc8a399 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
@@ -282,7 +282,7 @@ public class TestFlushSnapshotFromClient {
 
     // take the snapshot async
     admin.takeSnapshotAsync(
-      new SnapshotDescription("asyncSnapshot", TABLE_NAME.getNameAsString(),
+      new SnapshotDescription("asyncSnapshot", TABLE_NAME,
         ProtobufUtil.createSnapshotType(HBaseProtos.SnapshotDescription.Type.FLUSH)));
 
     // constantly loop, looking for the snapshot to complete
@@ -456,10 +456,10 @@ public class TestFlushSnapshotFromClient {
       HBaseProtos.SnapshotDescription.Builder builder =
           HBaseProtos.SnapshotDescription.newBuilder();
       if(i %2 ==0) {
-        descs[i] = new SnapshotDescription("ss" + i, TABLE_NAME.getNameAsString(),
+        descs[i] = new SnapshotDescription("ss" + i, TABLE_NAME,
           ProtobufUtil.createSnapshotType(HBaseProtos.SnapshotDescription.Type.FLUSH));
       } else {
-        descs[i] = new SnapshotDescription("ss" + i, TABLE2_NAME.getNameAsString(),
+        descs[i] = new SnapshotDescription("ss" + i, TABLE2_NAME,
           ProtobufUtil.createSnapshotType(HBaseProtos.SnapshotDescription.Type.FLUSH));
       }
     }
@@ -504,9 +504,9 @@ public class TestFlushSnapshotFromClient {
     int t1SnapshotsCount = 0;
     int t2SnapshotsCount = 0;
     for (SnapshotDescription ss : taken) {
-      if (TableName.valueOf(ss.getTable()).equals(TABLE_NAME)) {
+      if (ss.getTableName().equals(TABLE_NAME)) {
         t1SnapshotsCount++;
-      } else if (TableName.valueOf(ss.getTable()).equals(TABLE2_NAME)) {
+      } else if (ss.getTableName().equals(TABLE2_NAME)) {
         t2SnapshotsCount++;
       }
     }