fix: snapshot queued log entries
This commit is contained in:
+12
-2
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user