You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Hui Fei (Jira)" <ji...@apache.org> on 2021/03/05 05:45:00 UTC
[jira] [Created] (HDFS-15875) Check whether file is being truncated
before truncate
Hui Fei created HDFS-15875:
------------------------------
Summary: Check whether file is being truncated before truncate
Key: HDFS-15875
URL: https://issues.apache.org/jira/browse/HDFS-15875
Project: Hadoop HDFS
Issue Type: Bug
Affects Versions: 3.2.2, 3.1.4, 3.3.0
Reporter: Hui Fei
Assignee: Hui Fei
We have got this problem.
* A job sends truncate to namenode, and the block recovery goes.
* DataNode D is timeout while it connects another datanode (60s), so block recovery costs 60+s
* A job tails, and B job starts and it sends truncate to namenode. New recoveryId generates during recovery lease.
* DataNode D commitBlockSynchronization and get errors "does not match current recovery id"
So truncate will not complete forever. Datanode D has replica with new length and two other datanodes have replica old length.
DN has the error messages "Inconsistent size of finalized replicas"
the related code is in BlockRecoveryWorker.java
{code}
for (BlockRecord r : syncList) {
assert r.rInfo.getNumBytes() > 0 : "zero length replica";
ReplicaState rState = r.rInfo.getOriginalReplicaState();
if (rState.getValue() < bestState.getValue()) {
bestState = rState;
}
if(rState == ReplicaState.FINALIZED) {
if (finalizedLength > 0 && finalizedLength != r.rInfo.getNumBytes()) {
throw new IOException("Inconsistent size of finalized replicas. " +
"Replica " + r.rInfo + " expected size: " + finalizedLength);
}
finalizedLength = r.rInfo.getNumBytes();
}
}
{code}
{code:java}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-help@hadoop.apache.org