HDFS-8709. Clarify automatic sync in FSEditLog#logEdit.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/5fddc517 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/5fddc517 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/5fddc517 Branch: refs/heads/HADOOP-12111 Commit: 5fddc5177ddad07a735d49c15a63cfc5f74d0891 Parents: bff5999 Author: Andrew Wang <[email protected]> Authored: Thu Jul 2 10:26:40 2015 -0700 Committer: Andrew Wang <[email protected]> Committed: Thu Jul 2 10:26:40 2015 -0700 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++ .../hadoop/hdfs/server/namenode/FSEditLog.java | 28 +++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/5fddc517/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 7b96c56..6678a3e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -699,6 +699,8 @@ Release 2.8.0 - UNRELEASED HDFS-8703. Merge refactor of DFSInputStream from ErasureCoding branch (vinayakumarb) + HDFS-8709. Clarify automatic sync in FSEditLog#logEdit. (wang) + OPTIMIZATIONS HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than http://git-wip-us.apache.org/repos/asf/hadoop/blob/5fddc517/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java index 1b0b572..939e841 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java @@ -409,10 +409,14 @@ public class FSEditLog implements LogsPurgeable { } /** - * Write an operation to the edit log. Do not sync to persistent - * store yet. + * Write an operation to the edit log. + * <p/> + * Additionally, this will sync the edit log if required by the underlying + * edit stream's automatic sync policy (e.g. when the buffer is full, or + * if a time interval has elapsed). */ void logEdit(final FSEditLogOp op) { + boolean needsSync = false; synchronized (this) { assert isOpenForWrite() : "bad state: " + state; @@ -434,14 +438,16 @@ public class FSEditLog implements LogsPurgeable { endTransaction(start); // check if it is time to schedule an automatic sync - if (!shouldForceSync()) { - return; + needsSync = shouldForceSync(); + if (needsSync) { + isAutoSyncScheduled = true; } - isAutoSyncScheduled = true; } - // sync buffered edit log entries to persistent store - logSync(); + // Sync the log if an automatic sync is required. + if (needsSync) { + logSync(); + } } /** @@ -1191,11 +1197,13 @@ public class FSEditLog implements LogsPurgeable { throws IOException { return journalSet.getEditLogManifest(fromTxId); } - + /** * Finalizes the current edit log and opens a new log segment. - * @return the transaction id of the BEGIN_LOG_SEGMENT transaction - * in the new log. + * + * @param layoutVersion The layout version of the new edit log segment. + * @return the transaction id of the BEGIN_LOG_SEGMENT transaction in the new + * log. */ synchronized long rollEditLog(int layoutVersion) throws IOException { LOG.info("Rolling edit logs");
