Skip to content

Commit 9df3e6c

Browse files
committed
feat: count append errors on StorageWriter for ops visibility
Each Append failure increments an atomic counter and logs total_append_errors alongside the per-event error, making a sustained S2 outage detectable in structured logs without manual counting. AppendErrors() exposes the counter for future metrics integration. Retry and DLQ are intentionally out of scope.
1 parent 4d63909 commit 9df3e6c

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

server/lib/events/eventsstorage.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"log/slog"
66
"sync"
7+
"sync/atomic"
78
)
89

910
// Storage is the durable storage backend for browser events.
@@ -18,10 +19,11 @@ type Storage interface {
1819
// is cancelled. Call Close after Run returns to flush in-flight writes.
1920
// Starts from the oldest available event in the ring, not the current tail.
2021
type StorageWriter struct {
21-
reader *Reader
22-
storage Storage
23-
log *slog.Logger
24-
once sync.Once
22+
reader *Reader
23+
storage Storage
24+
log *slog.Logger
25+
once sync.Once
26+
appendErrors atomic.Uint64 // total append failures; best-effort, not retried
2527
}
2628

2729
// NewStorageWriter creates a writer that reads from es starting at seq 0.
@@ -53,11 +55,17 @@ func (w *StorageWriter) Run(ctx context.Context) error {
5355
continue
5456
}
5557
if err := w.storage.Append(ctx, *res.Envelope); err != nil {
56-
w.log.Error("storage writer: append failed", "seq", res.Envelope.Seq, "err", err)
58+
total := w.appendErrors.Add(1)
59+
w.log.Error("storage writer: append failed", "seq", res.Envelope.Seq, "err", err, "total_append_errors", total)
5760
}
5861
}
5962
}
6063

64+
// AppendErrors returns the total number of Append failures since Run started.
65+
func (w *StorageWriter) AppendErrors() uint64 {
66+
return w.appendErrors.Load()
67+
}
68+
6169
// Close drains in-flight writes and releases backend resources.
6270
func (w *StorageWriter) Close() error {
6371
return w.storage.Close()

0 commit comments

Comments
 (0)