Skip to content

Commit 0a57539

Browse files
committed
Bug fix.
1 parent bab8a1d commit 0a57539

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

db/model_ops.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -399,21 +399,34 @@ func (o *MonitorHistoryOps) CleanupOldMonitorHistories(maxAge time.Duration) (in
399399
return 0, nil
400400
}
401401

402-
// Batch delete in one write transaction to reduce lock and txn overhead.
403-
o.db.rwMutex.Lock()
404-
defer o.db.rwMutex.Unlock()
405-
if err := o.db.db.Update(func(txn *badger.Txn) error {
406-
for _, key := range keysToDelete {
407-
if delErr := txn.Delete([]byte(key)); delErr != nil {
408-
return delErr
402+
// Delete in bounded transactions to avoid Badger's ErrTxnTooBig.
403+
const deleteBatchSize = 1000
404+
deleted := 0
405+
for start := 0; start < len(keysToDelete); start += deleteBatchSize {
406+
end := start + deleteBatchSize
407+
if end > len(keysToDelete) {
408+
end = len(keysToDelete)
409+
}
410+
411+
batch := keysToDelete[start:end]
412+
o.db.rwMutex.Lock()
413+
err := o.db.db.Update(func(txn *badger.Txn) error {
414+
for _, key := range batch {
415+
if delErr := txn.Delete([]byte(key)); delErr != nil {
416+
return delErr
417+
}
409418
}
419+
return nil
420+
})
421+
o.db.rwMutex.Unlock()
422+
if err != nil {
423+
return deleted, err
410424
}
411-
return nil
412-
}); err != nil {
413-
return 0, err
425+
426+
deleted += len(batch)
414427
}
415428

416-
return len(keysToDelete), nil
429+
return deleted, nil
417430
}
418431

419432
// UserOps provides specialized operations for users

pkg/geoip/geoip.db

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
stub

0 commit comments

Comments
 (0)