fix: snapshot queued log entries

This commit is contained in:
MiMoCode
2026-07-10 19:20:09 +08:00
parent 01df0e8eb4
commit 6773d088c3
2 changed files with 56 additions and 2 deletions
+12 -2
View File
@@ -235,7 +235,8 @@ func (q *Queue) Submit(e *LogEntry) {
q.dropped.Add(1)
return
}
size := EstimatedBytes(e)
entry := cloneLogEntry(e)
size := EstimatedBytes(entry)
if !q.mu.TryRLock() {
q.dropped.Add(1)
return
@@ -246,7 +247,7 @@ func (q *Queue) Submit(e *LogEntry) {
return
}
select {
case q.ch <- queuedEntry{entry: e, size: size}:
case q.ch <- queuedEntry{entry: entry, size: size}:
q.enq.Add(1)
default:
q.release(size)
@@ -255,6 +256,15 @@ func (q *Queue) Submit(e *LogEntry) {
q.mu.RUnlock()
}
func cloneLogEntry(entry *LogEntry) *LogEntry {
clone := *entry
clone.RequestHeaders = append([]byte(nil), entry.RequestHeaders...)
clone.RequestBody = append([]byte(nil), entry.RequestBody...)
clone.ResponseHeaders = append([]byte(nil), entry.ResponseHeaders...)
clone.ResponseBody = append([]byte(nil), entry.ResponseBody...)
return &clone
}
func (q *Queue) reserve(size int64) bool {
for {
used := q.entries.Load()