Repository: hadoop Updated Branches: refs/heads/branch-3.0 f270818ed -> b83004076
HDFS-11915. Sync rbw dir on the first hsync() to avoid file lost on power failure. Contributed by Vinayakumar B. (cherry picked from commit d6c31a3e6b60c4b8af9ae4661f16614805654e59) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b8300407 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b8300407 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b8300407 Branch: refs/heads/branch-3.0 Commit: b830040766b96fc7bc01057232565939d2212613 Parents: f270818 Author: Wei-Chiu Chuang <[email protected]> Authored: Thu Dec 7 14:50:30 2017 -0800 Committer: Wei-Chiu Chuang <[email protected]> Committed: Fri Jan 12 10:42:58 2018 -0800 ---------------------------------------------------------------------- .../org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java | 5 +++++ 1 file changed, 5 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/b8300407/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java index c052d52..afb9e2a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java @@ -126,6 +126,7 @@ class BlockReceiver implements Closeable { private boolean syncOnClose; private volatile boolean dirSyncOnFinalize; + private boolean dirSyncOnHSyncDone = false; private long restartBudget; /** the reference of the volume where the block receiver writes to */ private ReplicaHandler replicaHandler; @@ -424,6 +425,10 @@ class BlockReceiver implements Closeable { } flushTotalNanos += flushEndNanos - flushStartNanos; } + if (isSync && !dirSyncOnHSyncDone && replicaInfo instanceof LocalReplica) { + ((LocalReplica) replicaInfo).fsyncDirectory(); + dirSyncOnHSyncDone = true; + } if (checksumOut != null || streams.getDataOut() != null) { datanode.metrics.addFlushNanos(flushTotalNanos); if (isSync) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
