mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 18:37:45 +08:00
For now, configs specified in `daemon --init-config` and `init CONFIG` are not available. We should fix this eventually but isn't necessary for now (and supporting this will be annoying).
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package levelds
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/ipfs/go-ipfs/plugin"
|
|
"github.com/ipfs/go-ipfs/repo"
|
|
"github.com/ipfs/go-ipfs/repo/fsrepo"
|
|
|
|
levelds "github.com/ipfs/go-ds-leveldb"
|
|
ldbopts "github.com/syndtr/goleveldb/leveldb/opt"
|
|
)
|
|
|
|
// Plugins is exported list of plugins that will be loaded
|
|
var Plugins = []plugin.Plugin{
|
|
&leveldsPlugin{},
|
|
}
|
|
|
|
type leveldsPlugin struct{}
|
|
|
|
var _ plugin.PluginDatastore = (*leveldsPlugin)(nil)
|
|
|
|
func (*leveldsPlugin) Name() string {
|
|
return "ds-level"
|
|
}
|
|
|
|
func (*leveldsPlugin) Version() string {
|
|
return "0.1.0"
|
|
}
|
|
|
|
func (*leveldsPlugin) Init(_ *plugin.Environment) error {
|
|
return nil
|
|
}
|
|
|
|
func (*leveldsPlugin) DatastoreTypeName() string {
|
|
return "levelds"
|
|
}
|
|
|
|
type datastoreConfig struct {
|
|
path string
|
|
compression ldbopts.Compression
|
|
}
|
|
|
|
// BadgerdsDatastoreConfig returns a configuration stub for a badger datastore
|
|
// from the given parameters
|
|
func (*leveldsPlugin) DatastoreConfigParser() fsrepo.ConfigFromMap {
|
|
return func(params map[string]interface{}) (fsrepo.DatastoreConfig, error) {
|
|
var c datastoreConfig
|
|
var ok bool
|
|
|
|
c.path, ok = params["path"].(string)
|
|
if !ok {
|
|
return nil, fmt.Errorf("'path' field is missing or not string")
|
|
}
|
|
|
|
switch cm := params["compression"].(string); cm {
|
|
case "none":
|
|
c.compression = ldbopts.NoCompression
|
|
case "snappy":
|
|
c.compression = ldbopts.SnappyCompression
|
|
case "":
|
|
c.compression = ldbopts.DefaultCompression
|
|
default:
|
|
return nil, fmt.Errorf("unrecognized value for compression: %s", cm)
|
|
}
|
|
|
|
return &c, nil
|
|
}
|
|
}
|
|
|
|
func (c *datastoreConfig) DiskSpec() fsrepo.DiskSpec {
|
|
return map[string]interface{}{
|
|
"type": "levelds",
|
|
"path": c.path,
|
|
}
|
|
}
|
|
|
|
func (c *datastoreConfig) Create(path string) (repo.Datastore, error) {
|
|
p := c.path
|
|
if !filepath.IsAbs(p) {
|
|
p = filepath.Join(path, p)
|
|
}
|
|
|
|
return levelds.NewDatastore(p, &levelds.Options{
|
|
Compression: c.compression,
|
|
})
|
|
}
|