diff --git a/cmd/infra/stcrashreceiver/diskstore.go b/cmd/infra/stcrashreceiver/diskstore.go index fca0fdc01..2e3788be7 100644 --- a/cmd/infra/stcrashreceiver/diskstore.go +++ b/cmd/infra/stcrashreceiver/diskstore.go @@ -136,15 +136,25 @@ func (d *diskStore) Exists(path string) bool { } func (d *diskStore) clean() { - for len(d.currentFiles) > 0 && (len(d.currentFiles) > d.maxFiles || d.currentSize > d.maxBytes) { - f := d.currentFiles[0] + numDeleted := 0 + for idx := range d.currentFiles { + if len(d.currentFiles)-numDeleted < d.maxFiles && d.currentSize < d.maxBytes { + break + } + + f := d.currentFiles[idx] log.Println("Removing", f.path) if err := os.Remove(f.path); err != nil { log.Println("Failed to remove file:", err) } - d.currentFiles = d.currentFiles[1:] d.currentSize -= f.size + numDeleted = idx + 1 } + + // Compact currentFiles + copy(d.currentFiles, d.currentFiles[numDeleted:]) + d.currentFiles = d.currentFiles[:len(d.currentFiles)-numDeleted] + var oldest time.Duration if len(d.currentFiles) > 0 { oldest = time.Since(time.Unix(d.currentFiles[0].mtime, 0)).Truncate(time.Minute) @@ -158,7 +168,7 @@ func (d *diskStore) clean() { } func (d *diskStore) inventory() error { - d.currentFiles = nil + d.currentFiles = d.currentFiles[:0] d.currentSize = 0 err := filepath.Walk(d.dir, func(path string, info os.FileInfo, err error) error { if err != nil {