You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ki...@apache.org on 2021/07/16 19:22:58 UTC
[hadoop] branch trunk updated: HDFS-16127. Improper pipeline close
recovery causes a permanent write failure or data loss. Contributed by
Kihwal Lee.
This is an automated email from the ASF dual-hosted git repository.
kihwal pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 4700271 HDFS-16127. Improper pipeline close recovery causes a permanent write failure or data loss. Contributed by Kihwal Lee.
4700271 is described below
commit 47002719f2aa4ff58378d528d38b0f0962a45c25
Author: Kihwal Lee <ki...@apache.org>
AuthorDate: Fri Jul 16 14:22:39 2021 -0500
HDFS-16127. Improper pipeline close recovery causes a permanent write failure or data loss. Contributed by Kihwal Lee.
---
.../src/main/java/org/apache/hadoop/hdfs/DataStreamer.java | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DataStreamer.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DataStreamer.java
index 4b5f3c3..93446c2 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DataStreamer.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DataStreamer.java
@@ -783,7 +783,19 @@ class DataStreamer extends Daemon {
// Is this block full?
if (one.isLastPacketInBlock()) {
// wait for the close packet has been acked
- waitForAllAcks();
+ try {
+ waitForAllAcks();
+ } catch (IOException ioe) {
+ // No need to do a close recovery if the last packet was acked.
+ // i.e. ackQueue is empty. waitForAllAcks() can get an exception
+ // (e.g. connection reset) while sending a heartbeat packet,
+ // if the DN sends the final ack and closes the connection.
+ synchronized (dataQueue) {
+ if (!ackQueue.isEmpty()) {
+ throw ioe;
+ }
+ }
+ }
if (shouldStop()) {
continue;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org