Github user poornachandra commented on a diff in the pull request: https://github.com/apache/incubator-tephra/pull/53#discussion_r138723289 --- Diff: tephra-core/src/main/java/org/apache/tephra/persist/AbstractTransactionLog.java --- @@ -85,44 +99,20 @@ public long getTimestamp() { @Override public void append(TransactionEdit edit) throws IOException { - long startTime = System.nanoTime(); - synchronized (this) { - ensureAvailable(); - - Entry entry = new Entry(new LongWritable(logSequence.getAndIncrement()), edit); - - // add to pending edits - append(entry); - } - - // wait for sync to complete - sync(); - long durationMillis = (System.nanoTime() - startTime) / 1000000L; - if (durationMillis > SLOW_APPEND_THRESHOLD) { - LOG.info("Slow append to log " + getName() + ", took " + durationMillis + " msec."); - } + append(Collections.singletonList(edit)); } @Override public void append(List<TransactionEdit> edits) throws IOException { - long startTime = System.nanoTime(); - synchronized (this) { + // synchronizing here ensures that elements in the queue are ordered by seq number + synchronized (logSequence) { ensureAvailable(); --- End diff -- `ensureAvailable()` can move out of the synchronized block since it uses a couple of volatile variables and calls a synchronized method `init()`
---