|
@@ -41,6 +41,7 @@ import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfoUnderConstruction;
|
|
import org.apache.hadoop.hdfs.server.common.Storage;
|
|
import org.apache.hadoop.hdfs.server.common.Storage;
|
|
import org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.LogHeaderCorruptException;
|
|
import org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.LogHeaderCorruptException;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AddCloseOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AddCloseOp;
|
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AllocateBlockIdOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AllowSnapshotOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AllowSnapshotOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.BlockListUpdatingOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.BlockListUpdatingOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.CancelDelegationTokenOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.CancelDelegationTokenOp;
|
|
@@ -57,6 +58,8 @@ import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenameOldOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenameOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenameOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenameSnapshotOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenameSnapshotOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenewDelegationTokenOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.RenewDelegationTokenOp;
|
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetGenstampV1Op;
|
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetGenstampV2Op;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetNSQuotaOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetNSQuotaOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetOwnerOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetOwnerOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetPermissionsOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetPermissionsOp;
|
|
@@ -66,9 +69,6 @@ import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SymlinkOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.TimesOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.TimesOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.UpdateBlocksOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.UpdateBlocksOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.UpdateMasterKeyOp;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.UpdateMasterKeyOp;
|
|
-import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AllocateBlockIdOp;
|
|
|
|
-import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetGenstampV1Op;
|
|
|
|
-import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetGenstampV2Op;
|
|
|
|
import org.apache.hadoop.hdfs.server.namenode.INode.BlocksMapUpdateInfo;
|
|
import org.apache.hadoop.hdfs.server.namenode.INode.BlocksMapUpdateInfo;
|
|
import org.apache.hadoop.hdfs.server.namenode.LeaseManager.Lease;
|
|
import org.apache.hadoop.hdfs.server.namenode.LeaseManager.Lease;
|
|
import org.apache.hadoop.hdfs.server.namenode.startupprogress.Phase;
|
|
import org.apache.hadoop.hdfs.server.namenode.startupprogress.Phase;
|
|
@@ -76,7 +76,6 @@ import org.apache.hadoop.hdfs.server.namenode.startupprogress.StartupProgress;
|
|
import org.apache.hadoop.hdfs.server.namenode.startupprogress.StartupProgress.Counter;
|
|
import org.apache.hadoop.hdfs.server.namenode.startupprogress.StartupProgress.Counter;
|
|
import org.apache.hadoop.hdfs.server.namenode.startupprogress.Step;
|
|
import org.apache.hadoop.hdfs.server.namenode.startupprogress.Step;
|
|
import org.apache.hadoop.hdfs.util.Holder;
|
|
import org.apache.hadoop.hdfs.util.Holder;
|
|
-import org.apache.hadoop.util.StringUtils;
|
|
|
|
|
|
|
|
import com.google.common.base.Joiner;
|
|
import com.google.common.base.Joiner;
|
|
|
|
|
|
@@ -661,8 +660,12 @@ public class FSEditLogLoader {
|
|
throw new IOException("Trying to remove more than one block from file "
|
|
throw new IOException("Trying to remove more than one block from file "
|
|
+ path);
|
|
+ path);
|
|
}
|
|
}
|
|
- fsDir.unprotectedRemoveBlock(path,
|
|
|
|
- (INodeFileUnderConstruction)file, oldBlocks[oldBlocks.length - 1]);
|
|
|
|
|
|
+ Block oldBlock = oldBlocks[oldBlocks.length - 1];
|
|
|
|
+ boolean removed = fsDir.unprotectedRemoveBlock(path,
|
|
|
|
+ (INodeFileUnderConstruction) file, oldBlock);
|
|
|
|
+ if (!removed && !(op instanceof UpdateBlocksOp)) {
|
|
|
|
+ throw new IOException("Trying to delete non-existant block " + oldBlock);
|
|
|
|
+ }
|
|
} else if (newBlocks.length > oldBlocks.length) {
|
|
} else if (newBlocks.length > oldBlocks.length) {
|
|
// We're adding blocks
|
|
// We're adding blocks
|
|
for (int i = oldBlocks.length; i < newBlocks.length; i++) {
|
|
for (int i = oldBlocks.length; i < newBlocks.length; i++) {
|