HDFS-8709. Clarify automatic sync in FSEditLog#logEdit.

(cherry picked from commit 5fddc5177d)
This commit is contained in:
Andrew Wang 2015-07-02 10:26:40 -07:00
parent 55bf014a07
commit efe9ae9fc6
2 changed files with 20 additions and 10 deletions

View File

@ -360,6 +360,8 @@ Release 2.8.0 - UNRELEASED
HDFS-8703. Merge refactor of DFSInputStream from ErasureCoding branch HDFS-8703. Merge refactor of DFSInputStream from ErasureCoding branch
(vinayakumarb) (vinayakumarb)
HDFS-8709. Clarify automatic sync in FSEditLog#logEdit. (wang)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than

View File

@ -410,10 +410,14 @@ public class FSEditLog implements LogsPurgeable {
} }
/** /**
* Write an operation to the edit log. Do not sync to persistent * Write an operation to the edit log.
* store yet. * <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) { void logEdit(final FSEditLogOp op) {
boolean needsSync = false;
synchronized (this) { synchronized (this) {
assert isOpenForWrite() : assert isOpenForWrite() :
"bad state: " + state; "bad state: " + state;
@ -435,15 +439,17 @@ public class FSEditLog implements LogsPurgeable {
endTransaction(start); endTransaction(start);
// check if it is time to schedule an automatic sync // check if it is time to schedule an automatic sync
if (!shouldForceSync()) { needsSync = shouldForceSync();
return; if (needsSync) {
}
isAutoSyncScheduled = true; isAutoSyncScheduled = true;
} }
}
// sync buffered edit log entries to persistent store // Sync the log if an automatic sync is required.
if (needsSync) {
logSync(); logSync();
} }
}
/** /**
* Wait if an automatic sync is scheduled * Wait if an automatic sync is scheduled
@ -1195,8 +1201,10 @@ public class FSEditLog implements LogsPurgeable {
/** /**
* Finalizes the current edit log and opens a new log segment. * 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 { synchronized long rollEditLog(int layoutVersion) throws IOException {
LOG.info("Rolling edit logs"); LOG.info("Rolling edit logs");