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);