Merge r1601199 from trunk: HDFS-6500. Snapshot shouldn't be removed silently after renaming to an existing snapshot. (Contributed by Nicholas SZE)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1601200 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Junping Du 2014-06-08 07:17:46 +00:00
parent d5379b29a2
commit d678a9ecf9
3 changed files with 16 additions and 2 deletions

View File

@ -333,6 +333,9 @@ Release 2.5.0 - UNRELEASED
HDFS-6497. Make TestAvailableSpaceVolumeChoosingPolicy deterministic HDFS-6497. Make TestAvailableSpaceVolumeChoosingPolicy deterministic
(cmccabe) (cmccabe)
HDFS-6500. Snapshot shouldn't be removed silently after renaming to an
existing snapshot. (Nicholas SZE via junping_du)
Release 2.4.1 - UNRELEASED Release 2.4.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -234,7 +234,7 @@ public class INodeDirectorySnapshottable extends INodeDirectory {
* name does not exist or a snapshot with the new name already * name does not exist or a snapshot with the new name already
* exists * exists
*/ */
public void renameSnapshot(String path, String oldName, String newName) void renameSnapshot(String path, String oldName, String newName)
throws SnapshotException { throws SnapshotException {
if (newName.equals(oldName)) { if (newName.equals(oldName)) {
return; return;
@ -246,7 +246,7 @@ public class INodeDirectorySnapshottable extends INodeDirectory {
} else { } else {
final byte[] newNameBytes = DFSUtil.string2Bytes(newName); final byte[] newNameBytes = DFSUtil.string2Bytes(newName);
int indexOfNew = searchSnapshot(newNameBytes); int indexOfNew = searchSnapshot(newNameBytes);
if (indexOfNew > 0) { if (indexOfNew >= 0) {
throw new SnapshotException("The snapshot " + newName throw new SnapshotException("The snapshot " + newName
+ " already exists for directory " + path); + " already exists for directory " + path);
} }

View File

@ -186,6 +186,17 @@ public class TestSnapshotCommands {
FsShellRun("-ls /sub1/.snapshot", 0, "/sub1/.snapshot/sn.rename"); FsShellRun("-ls /sub1/.snapshot", 0, "/sub1/.snapshot/sn.rename");
FsShellRun("-ls /sub1/.snapshot/sn.rename", 0, "/sub1/.snapshot/sn.rename/sub1sub1"); FsShellRun("-ls /sub1/.snapshot/sn.rename", 0, "/sub1/.snapshot/sn.rename/sub1sub1");
FsShellRun("-ls /sub1/.snapshot/sn.rename", 0, "/sub1/.snapshot/sn.rename/sub1sub2"); FsShellRun("-ls /sub1/.snapshot/sn.rename", 0, "/sub1/.snapshot/sn.rename/sub1sub2");
//try renaming from a non-existing snapshot
FsShellRun("-renameSnapshot /sub1 sn.nonexist sn.rename", 1,
"renameSnapshot: The snapshot sn.nonexist does not exist for directory /sub1");
//try renaming to existing snapshots
FsShellRun("-createSnapshot /sub1 sn.new");
FsShellRun("-renameSnapshot /sub1 sn.new sn.rename", 1,
"renameSnapshot: The snapshot sn.rename already exists for directory /sub1");
FsShellRun("-renameSnapshot /sub1 sn.rename sn.new", 1,
"renameSnapshot: The snapshot sn.new already exists for directory /sub1");
} }
@Test @Test