diff --git a/pkg/promtail/positions/positions.go b/pkg/promtail/positions/positions.go index cd6c501a67ac3be455f7eb40c9e41424708ae55d..b1e325e711d244519a4d39c69c1883450c964b6a 100644 --- a/pkg/promtail/positions/positions.go +++ b/pkg/promtail/positions/positions.go @@ -84,8 +84,12 @@ func (p *Positions) Get(path string) int64 { // Remove removes the position tracking for a filepath func (p *Positions) Remove(path string) { p.mtx.Lock() + defer p.mtx.Unlock() + p.remove(path) +} + +func (p *Positions) remove(path string) { delete(p.positions, path) - p.mtx.Unlock() } // SyncPeriod returns how often the positions file gets resynced @@ -126,11 +130,14 @@ func (p *Positions) save() { } func (p *Positions) cleanup() { + p.mtx.Lock() + defer p.mtx.Unlock() + toRemove := []string{} for k := range p.positions { if _, err := os.Stat(k); err != nil { if os.IsNotExist(err) { // File no longer exists. - p.Remove(k) + toRemove = append(toRemove, k) return } // Can't determine if file exists or not, some other error. @@ -139,6 +146,9 @@ func (p *Positions) cleanup() { } } + for _, tr := range toRemove { + p.remove(tr) + } } func readPositionsFile(filename string) (map[string]int64, error) {