HDFS-13868. WebHDFS: GETSNAPSHOTDIFF API NPE when param "snapshotname" is given but "oldsnapshotname" is not. Contributed by Pranay Singh.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/28ceb34a Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/28ceb34a Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/28ceb34a Branch: refs/heads/YARN-7402 Commit: 28ceb34a725cd06d28fb51361c49bb45464f5368 Parents: e435e12 Author: Wei-Chiu Chuang <[email protected]> Authored: Wed Sep 19 03:11:29 2018 -0700 Committer: Wei-Chiu Chuang <[email protected]> Committed: Wed Sep 19 03:12:20 2018 -0700 ---------------------------------------------------------------------- .../src/main/java/org/apache/hadoop/hdfs/DFSClient.java | 4 ++++ .../namenode/snapshot/DirectorySnapshottableFeature.java | 2 +- .../hdfs/server/namenode/snapshot/TestSnapshotDiffReport.java | 6 ++++++ .../src/test/java/org/apache/hadoop/hdfs/web/TestWebHDFS.java | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/28ceb34a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java index f4d11b9..38072b2 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java @@ -2158,6 +2158,10 @@ public class DFSClient implements java.io.Closeable, RemotePeerFactory, String fromSnapshot, String toSnapshot) throws IOException { checkOpen(); try (TraceScope ignored = tracer.newScope("getSnapshotDiffReport")) { + Preconditions.checkArgument(fromSnapshot != null, + "null fromSnapshot"); + Preconditions.checkArgument(toSnapshot != null, + "null toSnapshot"); return namenode .getSnapshotDiffReport(snapshotDir, fromSnapshot, toSnapshot); } catch (RemoteException re) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/28ceb34a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectorySnapshottableFeature.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectorySnapshottableFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectorySnapshottableFeature.java index d3083cf..15aa22a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectorySnapshottableFeature.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectorySnapshottableFeature.java @@ -277,7 +277,7 @@ public class DirectorySnapshottableFeature extends DirectoryWithSnapshotFeature Snapshot fromSnapshot = getSnapshotByName(snapshotRootDir, from); Snapshot toSnapshot = getSnapshotByName(snapshotRootDir, to); // if the start point is equal to the end point, return null - if (from.equals(to)) { + if (from != null && from.equals(to)) { return null; } SnapshotDiffInfo diffs = new SnapshotDiffInfo(snapshotRootDir, http://git-wip-us.apache.org/repos/asf/hadoop/blob/28ceb34a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/TestSnapshotDiffReport.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/TestSnapshotDiffReport.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/TestSnapshotDiffReport.java index 4625988..18ec3c5 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/TestSnapshotDiffReport.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/TestSnapshotDiffReport.java @@ -230,6 +230,12 @@ public class TestSnapshotDiffReport { LOG.info(report.toString()); assertEquals(0, report.getDiffList().size()); + try { + report = hdfs.getSnapshotDiffReport(subsubsub1, null, "s2"); + fail("Expect exception when providing null fromSnapshot "); + } catch (IllegalArgumentException e) { + GenericTestUtils.assertExceptionContains("null fromSnapshot", e); + } report = hdfs.getSnapshotDiffReport(subsubsub1, "s0", "s2"); LOG.info(report.toString()); assertEquals(0, report.getDiffList().size()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/28ceb34a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHDFS.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHDFS.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHDFS.java index 5d33220..a766de6 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHDFS.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHDFS.java @@ -743,6 +743,12 @@ public class TestWebHDFS { Assert.assertTrue(diffReport.getDiffList().contains(entry3)); Assert.assertTrue(diffReport.getDiffList().contains(entry4)); Assert.assertEquals(diffReport.getDiffList().size(), 5); + + // Test with fromSnapshot and toSnapshot as null. + diffReport = webHdfs.getSnapshotDiffReport(foo, null, "s2"); + Assert.assertEquals(diffReport.getDiffList().size(), 0); + diffReport = webHdfs.getSnapshotDiffReport(foo, "s1", null); + Assert.assertEquals(diffReport.getDiffList().size(), 5); } finally { if (cluster != null) { cluster.shutdown(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
