ipfs-cluster/datastore/badger/badger.go
Hector Sanjuan 970bdc8cb0 Add Badger v3 support
This commit adds badger v3 support as datastore backend for IPFS Cluster.

Badgerv3 has a number of improvements over v1, particularly around
compaction. It is significantly more modern and should behave better in
general (some testing is pending).
2022-12-02 11:29:33 +01:00

42 lines
999 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"
logging "github.com/ipfs/go-log/v2"
"github.com/pkg/errors"
)
var logger = logging.Logger("badger")
// 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())
}