Skip to content

Commit 4d63909

Browse files
committed
fix: include dropped seq range in storage writer log
ReadResult now carries DroppedFrom/DroppedTo so the exact gap is visible in logs, making silent data holes detectable without cross-referencing seq numbers elsewhere.
1 parent 64e42f0 commit 4d63909

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

server/lib/events/eventsstorage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func (w *StorageWriter) Run(ctx context.Context) error {
4949
return err
5050
}
5151
if res.Dropped > 0 {
52-
w.log.Warn("storage writer: dropped events", "count", res.Dropped)
52+
w.log.Warn("storage writer: dropped events", "count", res.Dropped, "from_seq", res.DroppedFrom, "to_seq", res.DroppedTo)
5353
continue
5454
}
5555
if err := w.storage.Append(ctx, *res.Envelope); err != nil {

server/lib/events/ringbuffer.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,13 @@ func (rb *ringBuffer) newReader(afterSeq uint64) *Reader {
6868

6969
// ReadResult is returned by Reader.Read. Exactly one of Envelope or Dropped is
7070
// set: Envelope is non-nil for a normal read, Dropped is non-zero when the
71-
// reader fell behind and events were lost.
71+
// reader fell behind and events were lost. When Dropped > 0, DroppedFrom and
72+
// DroppedTo are the inclusive seq range of the dropped events.
7273
type ReadResult struct {
73-
Envelope *Envelope
74-
Dropped uint64
74+
Envelope *Envelope
75+
Dropped uint64
76+
DroppedFrom uint64 // first seq of the dropped range (only valid when Dropped > 0)
77+
DroppedTo uint64 // last seq of the dropped range (only valid when Dropped > 0)
7578
}
7679

7780
// Reader tracks an independent read position in a ringBuffer.
@@ -102,10 +105,11 @@ func (r *Reader) Read(ctx context.Context) (ReadResult, error) {
102105
}
103106

104107
if r.nextSeq < oldest {
108+
from := r.nextSeq
105109
dropped := oldest - r.nextSeq
106110
r.nextSeq = oldest
107111
r.rb.mu.RUnlock()
108-
return ReadResult{Dropped: dropped}, nil
112+
return ReadResult{Dropped: dropped, DroppedFrom: from, DroppedTo: oldest - 1}, nil
109113
}
110114

111115
if r.nextSeq <= latest {

0 commit comments

Comments
 (0)