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/22 08:20:27 UTC
[ratis] 11/18: 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 branch-2_readIndex
in repository https://gitbox.apache.org/repos/asf/ratis.git
commit e20a2e83bed8c5685a63ea60e9b6d34d8d8007d7
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)
(cherry picked from commit 9a3f7e333e87b0107d9a1eb860a41a8d882d67a1)
---
.../org/apache/ratis/server/metrics/SegmentedRaftLogMetrics.java | 4 ++--
.../org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java | 5 ++---
2 files changed, 4 insertions(+), 5 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 810fcb003..b84726041 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
@@ -142,8 +142,8 @@ public class SegmentedRaftLogMetrics extends RaftLogMetricsBase {
registry.counter(RAFT_LOG_APPEND_ENTRY_COUNT).inc();
}
- public Timer getRaftLogAppendEntryTimer() {
- return getTimer(RAFT_LOG_APPEND_ENTRY_LATENCY);
+ public Timer.Context startAppendEntryTimer() {
+ return getTimer(RAFT_LOG_APPEND_ENTRY_LATENCY).time();
}
public Timer getRaftLogQueueTimer() {
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 0cb613ac0..5913f4adf 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
@@ -373,12 +373,12 @@ public class SegmentedRaftLog extends RaftLogBase {
@Override
protected CompletableFuture<Long> appendEntryImpl(LogEntryProto entry) {
- final Timer.Context context = getRaftLogMetrics().getRaftLogAppendEntryTimer().time();
checkLogState();
if (LOG.isTraceEnabled()) {
LOG.trace("{}: appendEntry {}", getName(), LogProtoUtils.toLogEntryString(entry));
}
try(AutoCloseableLock writeLock = writeLock()) {
+ final Timer.Context appendEntryTimerContext = getRaftLogMetrics().startAppendEntryTimer();
validateLogEntry(entry);
final LogSegment currentOpenSegment = cache.getOpenSegment();
if (currentOpenSegment == null) {
@@ -413,12 +413,11 @@ 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);
throw e;
- } finally {
- context.stop();
}
}