@@ -12,6 +12,7 @@ import (
1212 "math/rand"
1313 "slices"
1414 "sync"
15+ "time"
1516
1617 "github.com/cockroachdb/cockroach/pkg/keys"
1718 "github.com/cockroachdb/cockroach/pkg/kv/kvpb"
@@ -31,7 +32,6 @@ import (
3132 "github.com/cockroachdb/cockroach/pkg/util/hlc"
3233 "github.com/cockroachdb/cockroach/pkg/util/iterutil"
3334 "github.com/cockroachdb/cockroach/pkg/util/metamorphic"
34- "github.com/cockroachdb/cockroach/pkg/util/metric"
3535 "github.com/cockroachdb/crlib/crtime"
3636 "github.com/cockroachdb/errors"
3737)
@@ -119,9 +119,10 @@ type AppendStats struct {
119119 NonBlocking bool
120120}
121121
122- // Metrics contains metrics specific to the log storage.
123- type Metrics struct {
124- RaftLogCommitLatency metric.IHistogram
122+ // WriteStats contains stats about a write to raft storage.
123+ type WriteStats struct {
124+ CommitDur time.Duration
125+ storage.BatchCommitStats
125126}
126127
127128// LogStore is a stub of a separated Raft log storage.
@@ -133,7 +134,6 @@ type LogStore struct {
133134 SyncWaiter * SyncWaiterLoop
134135 EntryCache * raftentry.Cache
135136 Settings * cluster.Settings
136- Metrics Metrics
137137
138138 DisableSyncLogWriteToss bool // for testing only
139139}
@@ -146,7 +146,7 @@ type LogStore struct {
146146//
147147// commitStats is populated iff this was a non-blocking sync.
148148type SyncCallback interface {
149- OnLogSync (context.Context , raft.StorageAppendAck , storage. BatchCommitStats )
149+ OnLogSync (context.Context , raft.StorageAppendAck , WriteStats )
150150}
151151
152152func newStoreEntriesBatch (eng storage.Engine ) storage.Batch {
@@ -273,7 +273,6 @@ func (s *LogStore) storeEntriesAndCommitBatch(
273273 cb : cb ,
274274 onDone : m .Ack (),
275275 batch : batch ,
276- metrics : s .Metrics ,
277276 logCommitBegin : stats .PebbleBegin ,
278277 }
279278 s .SyncWaiter .enqueue (ctx , batch , waiterCallback )
@@ -287,9 +286,8 @@ func (s *LogStore) storeEntriesAndCommitBatch(
287286 stats .PebbleEnd = crtime .NowMono ()
288287 stats .PebbleCommitStats = batch .CommitStats ()
289288 if wantsSync {
290- logCommitEnd := stats .PebbleEnd
291- s .Metrics .RaftLogCommitLatency .RecordValue (logCommitEnd .Sub (stats .PebbleBegin ).Nanoseconds ())
292- cb .OnLogSync (ctx , m .Ack (), storage.BatchCommitStats {})
289+ commitDur := stats .PebbleEnd .Sub (stats .PebbleBegin )
290+ cb .OnLogSync (ctx , m .Ack (), WriteStats {CommitDur : commitDur })
293291 }
294292 }
295293 stats .Sync = wantsSync
@@ -344,17 +342,16 @@ type nonBlockingSyncWaiterCallback struct {
344342 onDone raft.StorageAppendAck
345343 // Used to extract stats. This is the batch that has been synced.
346344 batch storage.WriteBatch
347- // Used to record Metrics.
348- metrics Metrics
345+ // Used to measure raft storage write/sync latency.
349346 logCommitBegin crtime.Mono
350347}
351348
352349// run is the callback's logic. It is executed on the SyncWaiterLoop goroutine.
353350func (cb * nonBlockingSyncWaiterCallback ) run () {
354- dur := cb .logCommitBegin . Elapsed (). Nanoseconds ()
355- cb .metrics . RaftLogCommitLatency . RecordValue ( dur )
356- commitStats := cb .batch .CommitStats ()
357- cb . cb . OnLogSync ( cb . ctx , cb . onDone , commitStats )
351+ cb .cb . OnLogSync ( cb . ctx , cb . onDone , WriteStats {
352+ CommitDur : cb .logCommitBegin . Elapsed (),
353+ BatchCommitStats : cb .batch .CommitStats (),
354+ } )
358355 cb .release ()
359356}
360357
0 commit comments