mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-27 21:37:57 +08:00
Merge pull request #4007 from ipfs/feat/badger-ds
[WIP] Badger datastore
This commit is contained in:
commit
71d72e25de
@ -459,10 +459,10 @@
|
||||
"version": "1.1.8"
|
||||
},
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
"hash": "QmWRCn8vruNAzHx8i6SAXinuheRitKEGu8c7m26stKvsYx",
|
||||
"name": "go-testutil",
|
||||
"version": "1.1.11"
|
||||
"author": "magik6k",
|
||||
"hash": "QmRh9Udeo8qCe4XKCSA2NUunTZbFvbc5d44E5wTZPFf3Fg",
|
||||
"name": "go-ds-badger",
|
||||
"version": "0.2.1"
|
||||
}
|
||||
],
|
||||
"gxVersion": "0.10.0",
|
||||
|
||||
@ -41,4 +41,16 @@ var ConfigProfiles = map[string]func(*Config) error{
|
||||
c.Discovery.MDNS.Enabled = false
|
||||
return nil
|
||||
},
|
||||
"badgerds": func(c *Config) error {
|
||||
c.Datastore.Spec = map[string]interface{}{
|
||||
"type": "measure",
|
||||
"prefix": "badger.datastore",
|
||||
"child": map[string]interface{}{
|
||||
"type": "badgerds",
|
||||
"path": "badgerds",
|
||||
"syncWrites": true,
|
||||
},
|
||||
}
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
@ -4,16 +4,20 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
|
||||
repo "github.com/ipfs/go-ipfs/repo"
|
||||
|
||||
levelds "gx/ipfs/QmPdvXuXWAR6gtxxqZw42RtSADMwz4ijVmYHGS542b6cMz/go-ds-leveldb"
|
||||
measure "gx/ipfs/QmSb95iHExSSb47zpmyn5CyY5PZidVWSjyKyDqgYQrnKor/go-ds-measure"
|
||||
flatfs "gx/ipfs/QmUTshC2PP4ZDqkrFfDU4JGJFMWjYnunxPgkQ6ZCA2hGqh/go-ds-flatfs"
|
||||
|
||||
ds "gx/ipfs/QmVSase1JP7cq9QkPT46oNwdp9pT6kBkG3oqS14y3QcZjG/go-datastore"
|
||||
mount "gx/ipfs/QmVSase1JP7cq9QkPT46oNwdp9pT6kBkG3oqS14y3QcZjG/go-datastore/syncmount"
|
||||
|
||||
levelds "gx/ipfs/QmPdvXuXWAR6gtxxqZw42RtSADMwz4ijVmYHGS542b6cMz/go-ds-leveldb"
|
||||
badgerds "gx/ipfs/QmRh9Udeo8qCe4XKCSA2NUunTZbFvbc5d44E5wTZPFf3Fg/go-ds-badger"
|
||||
ldbopts "gx/ipfs/QmbBhyDKsY4mbY6xsKt3qu9Y7FPvMJ6qbD8AMjYYvPRw1g/goleveldb/leveldb/opt"
|
||||
)
|
||||
|
||||
@ -55,12 +59,13 @@ var datastores map[string]ConfigFromMap
|
||||
|
||||
func init() {
|
||||
datastores = map[string]ConfigFromMap{
|
||||
"mount": MountDatastoreConfig,
|
||||
"flatfs": FlatfsDatastoreConfig,
|
||||
"levelds": LeveldsDatastoreConfig,
|
||||
"mem": MemDatastoreConfig,
|
||||
"log": LogDatastoreConfig,
|
||||
"measure": MeasureDatastoreConfig,
|
||||
"mount": MountDatastoreConfig,
|
||||
"flatfs": FlatfsDatastoreConfig,
|
||||
"levelds": LeveldsDatastoreConfig,
|
||||
"badgerds": BadgerdsDatastoreConfig,
|
||||
"mem": MemDatastoreConfig,
|
||||
"log": LogDatastoreConfig,
|
||||
"measure": MeasureDatastoreConfig,
|
||||
}
|
||||
}
|
||||
|
||||
@ -333,3 +338,57 @@ func (c measureDatastoreConfig) Create(path string) (repo.Datastore, error) {
|
||||
}
|
||||
return measure.New(c.prefix, child), nil
|
||||
}
|
||||
|
||||
type badgerdsDatastoreConfig struct {
|
||||
path string
|
||||
syncWrites bool
|
||||
}
|
||||
|
||||
// BadgerdsDatastoreConfig returns a configuration stub for a badger datastore
|
||||
// from the given parameters
|
||||
func BadgerdsDatastoreConfig(params map[string]interface{}) (DatastoreConfig, error) {
|
||||
var c badgerdsDatastoreConfig
|
||||
var ok bool
|
||||
|
||||
c.path, ok = params["path"].(string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("'path' field is missing or not string")
|
||||
}
|
||||
|
||||
sw, ok := params["syncWrites"]
|
||||
if !ok {
|
||||
c.syncWrites = true
|
||||
} else {
|
||||
if swb, ok := sw.(bool); ok {
|
||||
c.syncWrites = swb
|
||||
} else {
|
||||
return nil, fmt.Errorf("'syncWrites' field was not a boolean")
|
||||
}
|
||||
}
|
||||
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
func (c *badgerdsDatastoreConfig) DiskSpec() DiskSpec {
|
||||
return map[string]interface{}{
|
||||
"type": "badgerds",
|
||||
"path": c.path,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *badgerdsDatastoreConfig) Create(path string) (repo.Datastore, error) {
|
||||
p := c.path
|
||||
if !filepath.IsAbs(p) {
|
||||
p = filepath.Join(path, p)
|
||||
}
|
||||
|
||||
err := os.MkdirAll(p, 0755)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defopts := badgerds.DefaultOptions
|
||||
defopts.SyncWrites = c.syncWrites
|
||||
|
||||
return badgerds.NewDatastore(p, &defopts)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user