Run badger garbage collector periodically

This commit is contained in:
Pijus Kamandulis 2025-05-30 00:25:17 +03:00
parent b743e23ff9
commit fba9b3df5f

View File

@ -1,12 +1,15 @@
package badgerdatastore package badgerdatastore
import ( import (
"time"
"github.com/dgraph-io/badger/v4" "github.com/dgraph-io/badger/v4"
"github.com/pikami/cosmium/internal/logger" "github.com/pikami/cosmium/internal/logger"
) )
type BadgerDataStore struct { type BadgerDataStore struct {
db *badger.DB db *badger.DB
gcTicker *time.Ticker
} }
type BadgerDataStoreOptions struct { type BadgerDataStoreOptions struct {
@ -25,12 +28,24 @@ func NewBadgerDataStore(options BadgerDataStoreOptions) *BadgerDataStore {
panic(err) panic(err)
} }
return &BadgerDataStore{ gcTicker := time.NewTicker(5 * time.Minute)
db: db,
ds := &BadgerDataStore{
db: db,
gcTicker: gcTicker,
} }
go ds.runGarbageCollector()
return ds
} }
func (r *BadgerDataStore) Close() { func (r *BadgerDataStore) Close() {
if r.gcTicker != nil {
r.gcTicker.Stop()
r.gcTicker = nil
}
r.db.Close() r.db.Close()
r.db = nil r.db = nil
} }
@ -39,3 +54,13 @@ func (r *BadgerDataStore) DumpToJson() (string, error) {
logger.ErrorLn("Badger datastore does not support state export currently.") logger.ErrorLn("Badger datastore does not support state export currently.")
return "{}", nil return "{}", nil
} }
func (r *BadgerDataStore) runGarbageCollector() {
for range r.gcTicker.C {
again:
err := r.db.RunValueLogGC(0.7)
if err == nil {
goto again
}
}
}