From a00cef6079d40223c5db6a8bac74cf74766208d9 Mon Sep 17 00:00:00 2001 From: Erik Krogen Date: Tue, 2 May 2017 17:56:19 -0700 Subject: [PATCH] HDFS-11717. Add unit test for HDFS-11709 StandbyCheckpointer should handle non-existing legacyOivImageDir gracefully. Contributed by Erik Krogen. (cherry picked from commit d9014bda93760f223789d2ec9f5e35f40de157d4) (cherry picked from commit 9d6b873d3c249aa76420ab03ceefc6180295915f) --- .../namenode/ha/StandbyCheckpointer.java | 2 +- .../namenode/ha/TestStandbyCheckpoints.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java index 5c09043c3f6..c5c2ef3c3f5 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java @@ -193,7 +193,7 @@ public class StandbyCheckpointer { try { img.saveLegacyOIVImage(namesystem, outputDir, canceler); } catch (IOException ioe) { - LOG.error("Exception encountered while saving legacy OIV image; " + LOG.warn("Exception encountered while saving legacy OIV image; " + "continuing with other checkpointing steps", ioe); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestStandbyCheckpoints.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestStandbyCheckpoints.java index 3d56408b9fd..720f558743f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestStandbyCheckpoints.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestStandbyCheckpoints.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hdfs.DFSConfigKeys; import org.apache.hadoop.hdfs.DFSTestUtil; @@ -484,6 +485,25 @@ public class TestStandbyCheckpoints { t.join(); } + /** + * Test that checkpointing is still successful even if an issue + * was encountered while writing the legacy OIV image. + */ + @Test(timeout=300000) + public void testCheckpointSucceedsWithLegacyOIVException() throws Exception { + // Delete the OIV image dir to cause an IOException while saving + FileUtil.fullyDelete(tmpOivImgDir); + + doEdits(0, 10); + HATestUtil.waitForStandbyToCatchUp(nn0, nn1); + // Once the standby catches up, it should notice that it needs to + // do a checkpoint and save one to its local directories. + HATestUtil.waitForCheckpoint(cluster, 1, ImmutableList.of(12)); + + // It should also upload it back to the active. + HATestUtil.waitForCheckpoint(cluster, 0, ImmutableList.of(12)); + } + private void doEdits(int start, int stop) throws IOException { for (int i = start; i < stop; i++) { Path p = new Path("/test" + i);