2023-03-03 15:34:53 +00:00
|
|
|
//go:build !arm && !386 && !(openbsd && amd64)
|
|
|
|
|
2022-12-01 15:58:32 +00:00
|
|
|
// Package pebble provides a configurable Pebble database backend for use with
|
|
|
|
// IPFS Cluster.
|
|
|
|
package pebble
|
|
|
|
|
|
|
|
import (
|
2023-03-06 17:41:51 +00:00
|
|
|
"context"
|
2022-12-01 15:58:32 +00:00
|
|
|
"os"
|
2023-03-06 17:41:51 +00:00
|
|
|
"time"
|
2022-12-01 15:58:32 +00:00
|
|
|
|
|
|
|
ds "github.com/ipfs/go-datastore"
|
|
|
|
pebbleds "github.com/ipfs/go-ds-pebble"
|
|
|
|
logging "github.com/ipfs/go-log/v2"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
var logger = logging.Logger("pebble")
|
|
|
|
|
|
|
|
// 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 pebble folder")
|
|
|
|
}
|
2023-03-06 17:41:51 +00:00
|
|
|
|
|
|
|
db, err := pebbleds.NewDatastore(folder, &cfg.PebbleOptions)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Calling regularly DB's DiskUsage is a way to printout debug
|
|
|
|
// database statistics.
|
|
|
|
go func() {
|
|
|
|
ticker := time.NewTicker(time.Minute)
|
|
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
|
|
<-ticker.C
|
|
|
|
db.DiskUsage(context.Background())
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
return db, nil
|
2022-12-01 15:58:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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())
|
|
|
|
}
|