From 87f40d16c98f64de197be2e844f6aaa573bc84de Mon Sep 17 00:00:00 2001 From: Pankaj Date: Fri, 9 Oct 2015 10:30:58 +0800 Subject: [PATCH] HBASE-14578, URISyntaxException during snapshot restore --- .../hbase/snapshot/RestoreSnapshotHelper.java | 2 +- .../master/snapshot/TestSnapshotFileCache.java | 4 +-- .../hbase/snapshot/SnapshotTestingUtils.java | 16 ++++++----- .../hbase/snapshot/TestRestoreSnapshotHelper.java | 33 +++++++++++++++++++++- 4 files changed, 44 insertions(+), 11 deletions(-) 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 0c5b21f..95c5216 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 @@ -608,7 +608,7 @@ public class RestoreSnapshotHelper { // Extract the referred information (hfile name and parent region) Path refPath = StoreFileInfo.getReferredToFile(new Path(new Path(new Path( - snapshotTable.getNameAsString(), regionInfo.getEncodedName()), familyDir.getName()), + snapshotManifest.getSnapshotDir(), regionInfo.getEncodedName()), familyDir.getName()), hfileName)); String snapshotRegionName = refPath.getParent().getParent().getName(); String fileName = refPath.getName(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.java index 4bb2cbe..69a4211 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.java @@ -258,7 +258,7 @@ public class TestSnapshotFileCache { private SnapshotMock.SnapshotBuilder createAndTestSnapshotV1(final SnapshotFileCache cache, final String name, final boolean tmp, final boolean removeOnExit) throws IOException { SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir); - SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV1(name); + SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV1(name, name); createAndTestSnapshot(cache, builder, tmp, removeOnExit); return builder; } @@ -266,7 +266,7 @@ public class TestSnapshotFileCache { private void createAndTestSnapshotV2(final SnapshotFileCache cache, final String name, final boolean tmp, final boolean removeOnExit) throws IOException { SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir); - SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2(name); + SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2(name, name); createAndTestSnapshot(cache, builder, tmp, removeOnExit); } 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 072e044..9261b78 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 @@ -540,17 +540,19 @@ public class SnapshotTestingUtils { this.rootDir = rootDir; } - public SnapshotBuilder createSnapshotV1(final String snapshotName) throws IOException { - return createSnapshot(snapshotName, SnapshotManifestV1.DESCRIPTOR_VERSION); + public SnapshotBuilder createSnapshotV1(final String snapshotName, final String tableName) + throws IOException { + return createSnapshot(snapshotName, tableName, SnapshotManifestV1.DESCRIPTOR_VERSION); } - public SnapshotBuilder createSnapshotV2(final String snapshotName) throws IOException { - return createSnapshot(snapshotName, SnapshotManifestV2.DESCRIPTOR_VERSION); + public SnapshotBuilder createSnapshotV2(final String snapshotName, final String tableName) + throws IOException { + return createSnapshot(snapshotName, tableName, SnapshotManifestV2.DESCRIPTOR_VERSION); } - private SnapshotBuilder createSnapshot(final String snapshotName, final int version) - throws IOException { - HTableDescriptor htd = createHtd(snapshotName); + private SnapshotBuilder createSnapshot(final String snapshotName, final String tableName, + final int version) throws IOException { + HTableDescriptor htd = createHtd(tableName); htd.addFamily(new HColumnDescriptor(TEST_FAMILY)); RegionData[] regions = createTable(htd, TEST_NUM_REGIONS); 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 e3b5d2c..440ea1e 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 @@ -80,7 +80,38 @@ public class TestRestoreSnapshotHelper { // Test Rolling-Upgrade like Snapshot. // half machines writing using v1 and the others using v2 format. SnapshotMock snapshotMock = new SnapshotMock(TEST_UTIL.getConfiguration(), fs, rootDir); - SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2("snapshot"); + SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2("snapshot", "snapshot"); + builder.addRegionV1(); + builder.addRegionV2(); + builder.addRegionV2(); + builder.addRegionV1(); + Path snapshotDir = builder.commit(); + HTableDescriptor htd = builder.getTableDescriptor(); + SnapshotDescription desc = builder.getSnapshotDescription(); + + // Test clone a snapshot + HTableDescriptor htdClone = snapshotMock.createHtd("testtb-clone"); + testRestore(snapshotDir, desc, htdClone); + verifyRestore(rootDir, htd, htdClone); + + // Test clone a clone ("link to link") + SnapshotDescription cloneDesc = SnapshotDescription.newBuilder() + .setName("cloneSnapshot") + .setTable("testtb-clone") + .build(); + Path cloneDir = FSUtils.getTableDir(rootDir, htdClone.getTableName()); + HTableDescriptor htdClone2 = snapshotMock.createHtd("testtb-clone2"); + testRestore(cloneDir, cloneDesc, htdClone2); + verifyRestore(rootDir, htd, htdClone2); + } + + @Test + public void testRestoreWithNamespace() throws IOException { + // Test Rolling-Upgrade like Snapshot. + // half machines writing using v1 and the others using v2 format. + SnapshotMock snapshotMock = new SnapshotMock(TEST_UTIL.getConfiguration(), fs, rootDir); + SnapshotMock.SnapshotBuilder builder = + snapshotMock.createSnapshotV2("snapshot", "namespace1:snapshot"); builder.addRegionV1(); builder.addRegionV2(); builder.addRegionV2(); -- 1.9.2.msysgit.0