HBASE-8199 Eliminate exception for ExportSnapshot against the null table snapshot (Julian Zhou)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1461340 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0d8c61cd88
commit
3fadf1075b
|
@ -628,10 +628,14 @@ public final class ExportSnapshot extends Configured implements Tool {
|
||||||
// The snapshot references must be copied before the files otherwise the files gets removed
|
// The snapshot references must be copied before the files otherwise the files gets removed
|
||||||
// by the HFileArchiver, since they have no references.
|
// by the HFileArchiver, since they have no references.
|
||||||
try {
|
try {
|
||||||
|
if (files.size() == 0) {
|
||||||
|
LOG.warn("There are 0 store file to be copied. There may be no data in the table.");
|
||||||
|
} else {
|
||||||
if (!runCopyJob(inputRoot, outputRoot, files, verifyChecksum,
|
if (!runCopyJob(inputRoot, outputRoot, files, verifyChecksum,
|
||||||
filesUser, filesGroup, filesMode, mappers)) {
|
filesUser, filesGroup, filesMode, mappers)) {
|
||||||
throw new ExportSnapshotException("Snapshot export failed!");
|
throw new ExportSnapshotException("Snapshot export failed!");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Step 3 - Rename fs2:/.snapshot/.tmp/<snapshot> fs2:/.snapshot/<snapshot>
|
// Step 3 - Rename fs2:/.snapshot/.tmp/<snapshot> fs2:/.snapshot/<snapshot>
|
||||||
if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {
|
if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {
|
||||||
|
|
|
@ -39,6 +39,7 @@ import org.apache.hadoop.fs.FileStatus;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.hbase.HBaseTestingUtility;
|
import org.apache.hadoop.hbase.HBaseTestingUtility;
|
||||||
import org.apache.hadoop.hbase.HColumnDescriptor;
|
import org.apache.hadoop.hbase.HColumnDescriptor;
|
||||||
|
import org.apache.hadoop.hbase.HRegionInfo;
|
||||||
import org.apache.hadoop.hbase.HTableDescriptor;
|
import org.apache.hadoop.hbase.HTableDescriptor;
|
||||||
import org.apache.hadoop.hbase.KeyValue;
|
import org.apache.hadoop.hbase.KeyValue;
|
||||||
import org.apache.hadoop.hbase.MediumTests;
|
import org.apache.hadoop.hbase.MediumTests;
|
||||||
|
@ -70,6 +71,7 @@ public class TestExportSnapshot {
|
||||||
|
|
||||||
private final static byte[] FAMILY = Bytes.toBytes("cf");
|
private final static byte[] FAMILY = Bytes.toBytes("cf");
|
||||||
|
|
||||||
|
private byte[] emptySnapshotName;
|
||||||
private byte[] snapshotName;
|
private byte[] snapshotName;
|
||||||
private byte[] tableName;
|
private byte[] tableName;
|
||||||
private HBaseAdmin admin;
|
private HBaseAdmin admin;
|
||||||
|
@ -99,11 +101,19 @@ public class TestExportSnapshot {
|
||||||
long tid = System.currentTimeMillis();
|
long tid = System.currentTimeMillis();
|
||||||
tableName = Bytes.toBytes("testtb-" + tid);
|
tableName = Bytes.toBytes("testtb-" + tid);
|
||||||
snapshotName = Bytes.toBytes("snaptb0-" + tid);
|
snapshotName = Bytes.toBytes("snaptb0-" + tid);
|
||||||
|
emptySnapshotName = Bytes.toBytes("emptySnaptb0-" + tid);
|
||||||
|
|
||||||
// create Table
|
// create Table
|
||||||
HTableDescriptor htd = new HTableDescriptor(tableName);
|
HTableDescriptor htd = new HTableDescriptor(tableName);
|
||||||
htd.addFamily(new HColumnDescriptor(FAMILY));
|
htd.addFamily(new HColumnDescriptor(FAMILY));
|
||||||
admin.createTable(htd, null);
|
admin.createTable(htd, null);
|
||||||
|
|
||||||
|
// Take an empty snapshot
|
||||||
|
admin.disableTable(tableName);
|
||||||
|
admin.snapshot(emptySnapshotName, tableName);
|
||||||
|
admin.enableTable(tableName);
|
||||||
|
|
||||||
|
// Add some rows
|
||||||
HTable table = new HTable(TEST_UTIL.getConfiguration(), tableName);
|
HTable table = new HTable(TEST_UTIL.getConfiguration(), tableName);
|
||||||
TEST_UTIL.loadTable(table, FAMILY);
|
TEST_UTIL.loadTable(table, FAMILY);
|
||||||
|
|
||||||
|
@ -115,7 +125,11 @@ public class TestExportSnapshot {
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void tearDown() throws Exception {
|
public void tearDown() throws Exception {
|
||||||
this.admin.close();
|
admin.disableTable(tableName);
|
||||||
|
admin.deleteSnapshot(snapshotName);
|
||||||
|
admin.deleteSnapshot(emptySnapshotName);
|
||||||
|
admin.deleteTable(tableName);
|
||||||
|
admin.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -160,6 +174,19 @@ public class TestExportSnapshot {
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testExportFileSystemState() throws Exception {
|
public void testExportFileSystemState() throws Exception {
|
||||||
|
testExportFileSystemState(tableName, snapshotName, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmptyExportFileSystemState() throws Exception {
|
||||||
|
testExportFileSystemState(tableName, emptySnapshotName, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test ExportSnapshot
|
||||||
|
*/
|
||||||
|
private void testExportFileSystemState(final byte[] tableName, final byte[] snapshotName,
|
||||||
|
int filesExpected) throws Exception {
|
||||||
Path copyDir = TEST_UTIL.getDataTestDir("export-" + System.currentTimeMillis());
|
Path copyDir = TEST_UTIL.getDataTestDir("export-" + System.currentTimeMillis());
|
||||||
URI hdfsUri = FileSystem.get(TEST_UTIL.getConfiguration()).getUri();
|
URI hdfsUri = FileSystem.get(TEST_UTIL.getConfiguration()).getUri();
|
||||||
FileSystem fs = FileSystem.get(copyDir.toUri(), new Configuration());
|
FileSystem fs = FileSystem.get(copyDir.toUri(), new Configuration());
|
||||||
|
@ -174,7 +201,7 @@ public class TestExportSnapshot {
|
||||||
|
|
||||||
// Verify File-System state
|
// Verify File-System state
|
||||||
FileStatus[] rootFiles = fs.listStatus(copyDir);
|
FileStatus[] rootFiles = fs.listStatus(copyDir);
|
||||||
assertEquals(2, rootFiles.length);
|
assertEquals(filesExpected, rootFiles.length);
|
||||||
for (FileStatus fileStatus: rootFiles) {
|
for (FileStatus fileStatus: rootFiles) {
|
||||||
String name = fileStatus.getPath().getName();
|
String name = fileStatus.getPath().getName();
|
||||||
assertTrue(fileStatus.isDir());
|
assertTrue(fileStatus.isDir());
|
||||||
|
@ -254,4 +281,3 @@ public class TestExportSnapshot {
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue