4ac2cf3eb0
This takes advantage of go-ds-badger "auto-gc" feature. It will run a GC cycle made of multiple GC rounds (until it cannot GC more) automatically. The behaviour is enabled by default in the configuration and can be disabled by setting "gc_interval" to "0m". Hopefully this prevents badger datastores from growing crazy.
39 lines
923 B
Go
39 lines
923 B
Go
// Package badger provides a configurable BadgerDB go-datastore for use with
|
|
// IPFS Cluster.
|
|
package badger
|
|
|
|
import (
|
|
"os"
|
|
|
|
ds "github.com/ipfs/go-datastore"
|
|
badgerds "github.com/ipfs/go-ds-badger"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// New returns a BadgerDB datastore configured with the given
|
|
// configuration.
|
|
func New(cfg *Config) (ds.Datastore, error) {
|
|
folder := cfg.GetFolder()
|
|
err := os.MkdirAll(folder, 0700)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "creating badger folder")
|
|
}
|
|
opts := badgerds.Options{
|
|
GcDiscardRatio: cfg.GCDiscardRatio,
|
|
GcInterval: cfg.GCInterval,
|
|
GcSleep: cfg.GCSleep,
|
|
Options: cfg.BadgerOptions,
|
|
}
|
|
return badgerds.NewDatastore(folder, &opts)
|
|
}
|
|
|
|
// Cleanup deletes the badger datastore.
|
|
func Cleanup(cfg *Config) error {
|
|
folder := cfg.GetFolder()
|
|
if _, err := os.Stat(folder); os.IsNotExist(err) {
|
|
return nil
|
|
}
|
|
return os.RemoveAll(cfg.GetFolder())
|
|
|
|
}
|