|
@@ -39,6 +39,7 @@ import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo;
|
|
import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfoUnderConstruction;
|
|
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.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;
|
|
@@ -55,6 +56,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;
|
|
@@ -64,9 +67,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;
|
|
@@ -74,7 +74,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;
|
|
|
|
|
|
@@ -659,8 +658,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++) {
|