File tree Expand file tree Collapse file tree 2 files changed +24
-12
lines changed
Expand file tree Collapse file tree 2 files changed +24
-12
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 1- stub
You can’t perform that action at this time.
0 commit comments