You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ha...@apache.org on 2022/03/16 12:25:44 UTC
[hbase] 03/03: HBASE-26720 ExportSnapshot should validate the source snapshot before copying files (#4216)
This is an automated email from the ASF dual-hosted git repository.
haxiaolin pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git
commit 9043cb90d0d440a78af313bcc7b8b0d94660286d
Author: xicm <36...@users.noreply.github.com>
AuthorDate: Wed Mar 16 20:03:28 2022 +0800
HBASE-26720 ExportSnapshot should validate the source snapshot before copying files (#4216)
Signed-off-by: Andrew Purtell <ap...@apache.org>
Signed-off-by: Xiaolin Ha <ha...@apache.org>
---
.../org/apache/hadoop/hbase/snapshot/ExportSnapshot.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
index da6d83a..26e9dcc 100644
--- a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
+++ b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
@@ -141,6 +141,8 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
"Do not verify checksum, use name+length only.");
static final Option NO_TARGET_VERIFY = new Option(null, "no-target-verify", false,
"Do not verify the integrity of the exported snapshot.");
+ static final Option NO_SOURCE_VERIFY = new Option(null, "no-source-verify", false,
+ "Do not verify the source of the snapshot.");
static final Option OVERWRITE = new Option(null, "overwrite", false,
"Rewrite the snapshot manifest if already exists.");
static final Option CHUSER = new Option(null, "chuser", true,
@@ -911,6 +913,7 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
}
private boolean verifyTarget = true;
+ private boolean verifySource = true;
private boolean verifyChecksum = true;
private String snapshotName = null;
private String targetName = null;
@@ -942,6 +945,7 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
// And verifyChecksum and verifyTarget with values read from old args in processOldArgs(...).
verifyChecksum = !cmd.hasOption(Options.NO_CHECKSUM_VERIFY.getLongOpt());
verifyTarget = !cmd.hasOption(Options.NO_TARGET_VERIFY.getLongOpt());
+ verifySource = !cmd.hasOption(Options.NO_SOURCE_VERIFY.getLongOpt());
}
/**
@@ -992,6 +996,13 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
LOG.debug("outputFs={}, outputRoot={}, skipTmp={}, initialOutputSnapshotDir={}",
outputFs, outputRoot.toString(), skipTmp, initialOutputSnapshotDir);
+ // Verify snapshot source before copying files
+ if (verifySource) {
+ LOG.info("Verify snapshot source, inputFs={}, inputRoot={}, snapshotDir={}.",
+ inputFs.getUri(), inputRoot, snapshotDir);
+ verifySnapshot(srcConf, inputFs, inputRoot, snapshotDir);
+ }
+
// Find the necessary directory which need to change owner and group
Path needSetOwnerDir = SnapshotDescriptionUtils.getSnapshotRootDir(outputRoot);
if (outputFs.exists(needSetOwnerDir)) {
@@ -1142,6 +1153,7 @@ public class ExportSnapshot extends AbstractHBaseTool implements Tool {
addOption(Options.TARGET_NAME);
addOption(Options.NO_CHECKSUM_VERIFY);
addOption(Options.NO_TARGET_VERIFY);
+ addOption(Options.NO_SOURCE_VERIFY);
addOption(Options.OVERWRITE);
addOption(Options.CHUSER);
addOption(Options.CHGROUP);