[
https://issues.apache.org/jira/browse/HDFS-668?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12766660#action_12766660
]
Tsz Wo (Nicholas), SZE commented on HDFS-668:
---------------------------------------------
- In BlocksMap,
{code}
+ * Update the old block with the new block.
+ *
+ * The new block has a newer generation stamp so it requires remove
+ * the old entry first and reinsert the new entry
+ *
+ * @return the removed stored block in the map
+ */
+ BlockInfo updateBlock(Block oldBlock, Block newBlock) {
+ BlockInfo blockInfo = map.remove(oldBlock);
+ blockInfo.setGenerationStamp(newBlock.getGenerationStamp());
+ blockInfo.setNumBytes(newBlock.getNumBytes());
+ map.put(blockInfo, blockInfo);
+ return blockInfo;
+ }
{code}
-* It is better to check oldBlock.getBlockId() == newBlock.getBlockId() or
change updateBlock(..) to updateBlock(Block b, long newGenerationStamp, long
newLength).
-* The stored block is added back. So the javadoc "@return the removed stored
block in the map" sounds incorrect.
- In FSNamesystem,
{code}
@@ -1399,6 +1399,9 @@
//
for (BlockInfo block: v.getBlocks()) {
if (!blockManager.checkMinReplication(block)) {
+ NameNode.stateChangeLog.info("BLOCK* NameSystem.checkFileProgress: "
+ + "block " + block + " has not reached minimal replication "
+ + blockManager.minReplication);
return false;
}
}
@@ -1408,6 +1411,9 @@
//
BlockInfo b = v.getPenultimateBlock();
if (b != null && !blockManager.checkMinReplication(b)) {
+ NameNode.stateChangeLog.info("BLOCK* NameSystem.checkFileProgress: "
+ + "block " + b + " has not reached minimal replication "
+ + blockManager.minReplication);
return false;
}
}
{code}
-* These two log messages does not look like "state changes". Should we use
FSNamesystem.LOG instead?
- In FSNamesystem,
{code}
- final BlockInfo oldblockinfo = pendingFile.getLastBlock();
+ final BlockInfoUnderConstruction blockinfo = pendingFile.getLastBlock();
{code}
-* Could blockinfo be null?
-* Is it the case that the last block must be a BlockInfoUnderConstruction? I
am afarid that an IOException caused by a ClassCastException may be thrown by
getLastBlock(). The existing code shown below looks incorrect: It first
suppress unchecked warnings and then convert ClassCastException to an
IOException. This makes it very hard to use it. How can the caller handle
such IOException?
{code}
//INodeFile
<T extends BlockInfo> T getLastBlock() throws IOException {
if (blocks == null || blocks.length == 0)
return null;
T returnBlock = null;
try {
@SuppressWarnings("unchecked") // ClassCastException is caught below
T tBlock = (T)blocks[blocks.length - 1];
returnBlock = tBlock;
} catch(ClassCastException cce) {
throw new IOException("Unexpected last block type: "
+ blocks[blocks.length - 1].getClass().getSimpleName());
}
return returnBlock;
}
{code}
> TestFileAppend3#TC7 sometimes hangs
> -----------------------------------
>
> Key: HDFS-668
> URL: https://issues.apache.org/jira/browse/HDFS-668
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Affects Versions: 0.21.0
> Reporter: Hairong Kuang
> Assignee: Hairong Kuang
> Fix For: 0.21.0
>
> Attachments: hdfs-668.patch, loop.patch
>
>
> TestFileAppend3 hangs because it fails on close the file. The following is
> the snippet of logs that shows the cause of the problem:
> [junit] 2009-10-01 07:00:00,719 WARN hdfs.DFSClient
> (DFSClient.java:setupPipelineForAppendOrRecovery(3004)) - Error Recovery for
> block blk_-4098350497078465335_1007 in pipeline 127.0.0.1:58375,
> 127.0.0.1:36982: bad datanode 127.0.0.1:36982
> [junit] 2009-10-01 07:00:00,721 INFO datanode.DataNode
> (DataXceiver.java:opWriteBlock(224)) - Receiving block
> blk_-4098350497078465335_1007 src: /127.0.0.1:40252 dest: /127.0.0.1:58375
> [junit] 2009-10-01 07:00:00,721 INFO datanode.DataNode
> (FSDataset.java:recoverClose(1248)) - Recover failed close
> blk_-4098350497078465335_1007
> [junit] 2009-10-01 07:00:00,723 INFO datanode.DataNode
> (DataXceiver.java:opWriteBlock(369)) - Received block
> blk_-4098350497078465335_1008 src: /127.0.0.1:40252 dest: /127.0.0.1:58375 of
> size 65536
> [junit] 2009-10-01 07:00:00,724 INFO hdfs.StateChange
> (BlockManager.java:addStoredBlock(1006)) - BLOCK* NameSystem.addStoredBlock:
> addStoredBlock request received for blk_-4098350497078465335_1008 on
> 127.0.0.1:58375 size 65536 But it does not belong to any file.
> [junit] 2009-10-01 07:00:00,724 INFO namenode.FSNamesystem
> (FSNamesystem.java:updatePipeline(3946)) -
> updatePipeline(block=blk_-4098350497078465335_1007, newGenerationStamp=1008,
> newLength=65536, newNodes=[127.0.0.1:58375], clientName=DFSClient_995688145)
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.