HDFS-5474. Deletesnapshot can make Namenode in safemode on NN restarts. Contributed by Sathish.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1541685 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jing Zhao 2013-11-13 19:59:55 +00:00
parent 4a0f804d5e
commit ced740e580
2 changed files with 8 additions and 4 deletions

View File

@ -541,6 +541,9 @@ Release 2.3.0 - UNRELEASED
HDFS-5425. Renaming underconstruction file with snapshots can make NN failure on HDFS-5425. Renaming underconstruction file with snapshots can make NN failure on
restart. (jing9 and Vinay) restart. (jing9 and Vinay)
HDFS-5474. Deletesnapshot can make Namenode in safemode on NN restarts.
(Sathish via jing9)
Release 2.2.1 - UNRELEASED Release 2.2.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -6961,6 +6961,7 @@ void deleteSnapshot(String snapshotRoot, String snapshotName)
return; // Return previous response return; // Return previous response
} }
boolean success = false; boolean success = false;
BlocksMapUpdateInfo collectedBlocks = new BlocksMapUpdateInfo();
writeLock(); writeLock();
try { try {
checkOperation(OperationCategory.WRITE); checkOperation(OperationCategory.WRITE);
@ -6969,7 +6970,6 @@ void deleteSnapshot(String snapshotRoot, String snapshotName)
checkOwner(pc, snapshotRoot); checkOwner(pc, snapshotRoot);
} }
BlocksMapUpdateInfo collectedBlocks = new BlocksMapUpdateInfo();
List<INode> removedINodes = new ChunkedArrayList<INode>(); List<INode> removedINodes = new ChunkedArrayList<INode>();
dir.writeLock(); dir.writeLock();
try { try {
@ -6980,8 +6980,6 @@ void deleteSnapshot(String snapshotRoot, String snapshotName)
dir.writeUnlock(); dir.writeUnlock();
} }
removedINodes.clear(); removedINodes.clear();
this.removeBlocks(collectedBlocks);
collectedBlocks.clear();
getEditLog().logDeleteSnapshot(snapshotRoot, snapshotName, getEditLog().logDeleteSnapshot(snapshotRoot, snapshotName,
cacheEntry != null); cacheEntry != null);
success = true; success = true;
@ -6991,6 +6989,9 @@ void deleteSnapshot(String snapshotRoot, String snapshotName)
} }
getEditLog().logSync(); getEditLog().logSync();
removeBlocks(collectedBlocks);
collectedBlocks.clear();
if (auditLog.isInfoEnabled() && isExternalInvocation()) { if (auditLog.isInfoEnabled() && isExternalInvocation()) {
String rootPath = Snapshot.getSnapshotPath(snapshotRoot, snapshotName); String rootPath = Snapshot.getSnapshotPath(snapshotRoot, snapshotName);
logAuditEvent(true, "deleteSnapshot", rootPath, null, null); logAuditEvent(true, "deleteSnapshot", rootPath, null, null);