You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sz...@apache.org on 2023/03/17 00:17:13 UTC

[ratis] branch master updated: RATIS-1816. appendEntryTimer is not accurate due to the return of writeFuture (#855)

This is an automated email from the ASF dual-hosted git repository.

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new 9a3f7e333 RATIS-1816. appendEntryTimer is not accurate due to the return of writeFuture (#855)
9a3f7e333 is described below

commit 9a3f7e333e87b0107d9a1eb860a41a8d882d67a1
Author: Xiangpeng Hu <65...@users.noreply.github.com>
AuthorDate: Fri Mar 17 08:17:07 2023 +0800

    RATIS-1816. appendEntryTimer is not accurate due to the return of writeFuture (#855)
---
 .../org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java     | 4 ++--
 .../org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java  | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java b/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java
index 865bdcde9..e591473e8 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java
@@ -155,8 +155,8 @@ public class SegmentedRaftLogMetrics extends RaftLogMetricsBase {
     appendEntryCount.inc();
   }
 
-  public UncheckedAutoCloseable startAppendEntryTimer() {
-    return Timekeeper.start(appendEntryTimer);
+  public Timekeeper.Context startAppendEntryTimer() {
+    return appendEntryTimer.time();
   }
 
   public Timekeeper getEnqueuedTimer() {
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
index 80427ef42..0aab79898 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
@@ -378,8 +378,8 @@ public class SegmentedRaftLog extends RaftLogBase {
     if (LOG.isTraceEnabled()) {
       LOG.trace("{}: appendEntry {}", getName(), LogProtoUtils.toLogEntryString(entry));
     }
-    try(AutoCloseableLock writeLock = writeLock();
-        UncheckedAutoCloseable ignored = getRaftLogMetrics().startAppendEntryTimer()) {
+    try(AutoCloseableLock writeLock = writeLock()) {
+      final Timekeeper.Context appendEntryTimerContext = getRaftLogMetrics().startAppendEntryTimer();
       validateLogEntry(entry);
       final LogSegment currentOpenSegment = cache.getOpenSegment();
       if (currentOpenSegment == null) {
@@ -414,6 +414,7 @@ public class SegmentedRaftLog extends RaftLogBase {
       } else {
         cache.appendEntry(entry, LogSegment.Op.WRITE_CACHE_WITHOUT_STATE_MACHINE_CACHE);
       }
+      writeFuture.whenComplete((clientReply, exception) -> appendEntryTimerContext.stop());
       return writeFuture;
     } catch (Exception e) {
       LOG.error("{}: Failed to append {}", getName(), LogProtoUtils.toLogEntryString(entry), e);