Repository: hadoop Updated Branches: refs/heads/YARN-1197 e258bd4b4 -> f35a94517 (forced update)
HDFS-8917. Cleanup BlockInfoUnderConstruction from comments and tests. Contributed by Zhe Zhang. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/4e14f798 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/4e14f798 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/4e14f798 Branch: refs/heads/YARN-1197 Commit: 4e14f7982a6e57bf08deb3b266806c2b779a157d Parents: 3aac475 Author: Jing Zhao <ji...@apache.org> Authored: Wed Aug 19 15:11:37 2015 -0700 Committer: Jing Zhao <ji...@apache.org> Committed: Wed Aug 19 15:11:37 2015 -0700 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 + .../hdfs/server/blockmanagement/BlockInfo.java | 1 - .../blockmanagement/BlockInfoContiguous.java | 3 +- .../server/blockmanagement/BlockManager.java | 2 +- .../BlockUnderConstructionFeature.java | 4 +- .../namenode/FileUnderConstructionFeature.java | 2 +- .../hadoop/hdfs/server/namenode/INodeFile.java | 2 +- .../org/apache/hadoop/hdfs/TestFileAppend.java | 4 +- .../TestBlockInfoUnderConstruction.java | 80 -------------------- .../TestBlockUnderConstructionFeature.java | 80 ++++++++++++++++++++ .../namenode/snapshot/SnapshotTestHelper.java | 4 +- 11 files changed, 93 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index b7fbc23..080f0d4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -816,6 +816,9 @@ Release 2.8.0 - UNRELEASED HDFS-8803. Move DfsClientConf to hdfs-client. (Mingliang Liu via wheat9) + HDFS-8917. Cleanup BlockInfoUnderConstruction from comments and tests. + (Zhe Zhang via jing9) + OPTIMIZATIONS HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java index 94dac35..659be56 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java @@ -78,7 +78,6 @@ public abstract class BlockInfo extends Block /** * Copy construction. - * This is used to convert BlockInfoUnderConstruction * @param from BlockInfo to copy from. */ protected BlockInfo(BlockInfo from) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoContiguous.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoContiguous.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoContiguous.java index eff89a8..42934c3 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoContiguous.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoContiguous.java @@ -37,8 +37,7 @@ public class BlockInfoContiguous extends BlockInfo { /** * Copy construction. - * This is used to convert BlockReplicationInfoUnderConstruction - * @param from BlockReplicationInfo to copy from. + * @param from BlockInfoContiguous to copy from. */ protected BlockInfoContiguous(BlockInfoContiguous from) { super(from); http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java index aad7fec..f2d0515 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java @@ -2236,7 +2236,7 @@ public class BlockManager implements BlockStatsMXBean { * is fully replicated.</li> * <li>If the reported replica is for a block currently marked "under * construction" in the NN, then it should be added to the - * BlockInfoUnderConstruction's list of replicas.</li> + * BlockUnderConstructionFeature's list of replicas.</li> * </ol> * * @param storageInfo DatanodeStorageInfo that sent the report. http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockUnderConstructionFeature.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockUnderConstructionFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockUnderConstructionFeature.java index a555cd6..de51b2f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockUnderConstructionFeature.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockUnderConstructionFeature.java @@ -151,7 +151,7 @@ public class BlockUnderConstructionFeature { public BlockUnderConstructionFeature(Block block, BlockUCState state, DatanodeStorageInfo[] targets) { assert getBlockUCState() != BlockUCState.COMPLETE : - "BlockInfoUnderConstruction cannot be in COMPLETE state"; + "BlockUnderConstructionFeature cannot be in COMPLETE state"; this.blockUCState = state; setExpectedLocations(block.getGenerationStamp(), targets); } @@ -241,7 +241,7 @@ public class BlockUnderConstructionFeature { blockRecoveryId = recoveryId; if (replicas.size() == 0) { NameNode.blockStateChangeLog.warn("BLOCK*" - + " BlockInfoUnderConstruction.initLeaseRecovery:" + + " BlockUnderConstructionFeature.initLeaseRecovery:" + " No blocks found, lease removed."); } boolean allLiveReplicasTriedAsPrimary = true; http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FileUnderConstructionFeature.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FileUnderConstructionFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FileUnderConstructionFeature.java index 26ee8f6..81ec255 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FileUnderConstructionFeature.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FileUnderConstructionFeature.java @@ -62,7 +62,7 @@ public class FileUnderConstructionFeature implements INode.Feature { + f.getFullPathName() + " is null when updating its length"; assert !lastBlock.isComplete() : "The last block for path " + f.getFullPathName() - + " is not a BlockInfoUnderConstruction when updating its length"; + + " is not under-construction when updating its length"; lastBlock.setNumBytes(lastBlockLength); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java index 823164d..5dd5bb1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java @@ -693,7 +693,7 @@ public class INodeFile extends INodeWithAdditionalFields return 0; } final int last = blocks.length - 1; - //check if the last block is BlockInfoUnderConstruction + //check if the last block is under-construction long size = blocks[last].getNumBytes(); if (!blocks[last].isComplete()) { if (!includesLastUcBlock) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileAppend.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileAppend.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileAppend.java index 402c944..85d92c9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileAppend.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileAppend.java @@ -331,7 +331,7 @@ public class TestFileAppend{ //1st append does not add any data so that the last block remains full //and the last block in INodeFileUnderConstruction is a BlockInfo - //but not BlockInfoUnderConstruction. + //but does not have a BlockUnderConstructionFeature. fs2.append(p); //2nd append should get AlreadyBeingCreatedException @@ -369,7 +369,7 @@ public class TestFileAppend{ //1st append does not add any data so that the last block remains full //and the last block in INodeFileUnderConstruction is a BlockInfo - //but not BlockInfoUnderConstruction. + //but does not have a BlockUnderConstructionFeature. ((DistributedFileSystem) fs2).append(p, EnumSet.of(CreateFlag.APPEND, CreateFlag.NEW_BLOCK), 4096, null); http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockInfoUnderConstruction.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockInfoUnderConstruction.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockInfoUnderConstruction.java deleted file mode 100644 index c347472..0000000 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockInfoUnderConstruction.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hdfs.server.blockmanagement; - -import static org.junit.Assert.assertEquals; - -import org.apache.hadoop.hdfs.DFSTestUtil; -import org.apache.hadoop.hdfs.protocol.Block; -import org.apache.hadoop.hdfs.server.common.GenerationStamp; -import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.BlockUCState; -import org.junit.Test; - -/** - * This class provides tests for BlockInfoUnderConstruction class - */ -public class TestBlockInfoUnderConstruction { - @Test - public void testInitializeBlockRecovery() throws Exception { - DatanodeStorageInfo s1 = DFSTestUtil.createDatanodeStorageInfo("10.10.1.1", "s1"); - DatanodeDescriptor dd1 = s1.getDatanodeDescriptor(); - DatanodeStorageInfo s2 = DFSTestUtil.createDatanodeStorageInfo("10.10.1.2", "s2"); - DatanodeDescriptor dd2 = s2.getDatanodeDescriptor(); - DatanodeStorageInfo s3 = DFSTestUtil.createDatanodeStorageInfo("10.10.1.3", "s3"); - DatanodeDescriptor dd3 = s3.getDatanodeDescriptor(); - - dd1.isAlive = dd2.isAlive = dd3.isAlive = true; - BlockInfoContiguous blockInfo = new BlockInfoContiguous( - new Block(0, 0, GenerationStamp.LAST_RESERVED_STAMP), (short) 3); - blockInfo.convertToBlockUnderConstruction(BlockUCState.UNDER_CONSTRUCTION, - new DatanodeStorageInfo[] {s1, s2, s3}); - - // Recovery attempt #1. - DFSTestUtil.resetLastUpdatesWithOffset(dd1, -3 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd3, -2 * 1000); - blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 1); - BlockInfo[] blockInfoRecovery = dd2.getLeaseRecoveryCommand(1); - assertEquals(blockInfoRecovery[0], blockInfo); - - // Recovery attempt #2. - DFSTestUtil.resetLastUpdatesWithOffset(dd1, -2 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd3, -3 * 1000); - blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 2); - blockInfoRecovery = dd1.getLeaseRecoveryCommand(1); - assertEquals(blockInfoRecovery[0], blockInfo); - - // Recovery attempt #3. - DFSTestUtil.resetLastUpdatesWithOffset(dd1, -2 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd3, -3 * 1000); - blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 3); - blockInfoRecovery = dd3.getLeaseRecoveryCommand(1); - assertEquals(blockInfoRecovery[0], blockInfo); - - // Recovery attempt #4. - // Reset everything. And again pick DN with most recent heart beat. - DFSTestUtil.resetLastUpdatesWithOffset(dd1, -2 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); - DFSTestUtil.resetLastUpdatesWithOffset(dd3, 0); - blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 3); - blockInfoRecovery = dd3.getLeaseRecoveryCommand(1); - assertEquals(blockInfoRecovery[0], blockInfo); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockUnderConstructionFeature.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockUnderConstructionFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockUnderConstructionFeature.java new file mode 100644 index 0000000..b47aac0 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockUnderConstructionFeature.java @@ -0,0 +1,80 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.server.blockmanagement; + +import static org.junit.Assert.assertEquals; + +import org.apache.hadoop.hdfs.DFSTestUtil; +import org.apache.hadoop.hdfs.protocol.Block; +import org.apache.hadoop.hdfs.server.common.GenerationStamp; +import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.BlockUCState; +import org.junit.Test; + +/** + * This class provides tests for {@link BlockUnderConstructionFeature} class + */ +public class TestBlockUnderConstructionFeature { + @Test + public void testInitializeBlockRecovery() throws Exception { + DatanodeStorageInfo s1 = DFSTestUtil.createDatanodeStorageInfo("10.10.1.1", "s1"); + DatanodeDescriptor dd1 = s1.getDatanodeDescriptor(); + DatanodeStorageInfo s2 = DFSTestUtil.createDatanodeStorageInfo("10.10.1.2", "s2"); + DatanodeDescriptor dd2 = s2.getDatanodeDescriptor(); + DatanodeStorageInfo s3 = DFSTestUtil.createDatanodeStorageInfo("10.10.1.3", "s3"); + DatanodeDescriptor dd3 = s3.getDatanodeDescriptor(); + + dd1.isAlive = dd2.isAlive = dd3.isAlive = true; + BlockInfoContiguous blockInfo = new BlockInfoContiguous( + new Block(0, 0, GenerationStamp.LAST_RESERVED_STAMP), (short) 3); + blockInfo.convertToBlockUnderConstruction(BlockUCState.UNDER_CONSTRUCTION, + new DatanodeStorageInfo[] {s1, s2, s3}); + + // Recovery attempt #1. + DFSTestUtil.resetLastUpdatesWithOffset(dd1, -3 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd3, -2 * 1000); + blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 1); + BlockInfo[] blockInfoRecovery = dd2.getLeaseRecoveryCommand(1); + assertEquals(blockInfoRecovery[0], blockInfo); + + // Recovery attempt #2. + DFSTestUtil.resetLastUpdatesWithOffset(dd1, -2 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd3, -3 * 1000); + blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 2); + blockInfoRecovery = dd1.getLeaseRecoveryCommand(1); + assertEquals(blockInfoRecovery[0], blockInfo); + + // Recovery attempt #3. + DFSTestUtil.resetLastUpdatesWithOffset(dd1, -2 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd3, -3 * 1000); + blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 3); + blockInfoRecovery = dd3.getLeaseRecoveryCommand(1); + assertEquals(blockInfoRecovery[0], blockInfo); + + // Recovery attempt #4. + // Reset everything. And again pick DN with most recent heart beat. + DFSTestUtil.resetLastUpdatesWithOffset(dd1, -2 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd2, -1 * 1000); + DFSTestUtil.resetLastUpdatesWithOffset(dd3, 0); + blockInfo.getUnderConstructionFeature().initializeBlockRecovery(blockInfo, 3); + blockInfoRecovery = dd3.getLeaseRecoveryCommand(1); + assertEquals(blockInfoRecovery[0], blockInfo); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/4e14f798/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/SnapshotTestHelper.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/SnapshotTestHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/SnapshotTestHelper.java index b670922..29d2272 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/SnapshotTestHelper.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/snapshot/SnapshotTestHelper.java @@ -227,8 +227,8 @@ public class SnapshotTestHelper { line2 = line2.replaceAll("Quota\\[.*\\]", "Quota[]"); } - // skip the specific fields of BlockInfoUnderConstruction when the node - // is an INodeFileSnapshot or an INodeFileUnderConstructionSnapshot + // skip the specific fields of BlockUnderConstructionFeature when the + // node is an INodeFileSnapshot or INodeFileUnderConstructionSnapshot if (line1.contains("(INodeFileSnapshot)") || line1.contains("(INodeFileUnderConstructionSnapshot)")) { line1 = line1.replaceAll(