[#65] Support FS bucket and BoltDB bucket

These buckets can be used to store blobs and metadata.
They will be removed as enhanced blob storage will be
implemented for neofs-node. To setup storage type
use `storage.object.type` and `storage.meta.type` params.

Available options:
  - inmemory (default)
  - boltdb
  - filesystem

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2020-09-24 15:32:30 +03:00 committed by Alex Vanin
parent 861bac3892
commit 6ee908c2db
4 changed files with 87 additions and 23 deletions

View file

@ -26,7 +26,7 @@ type (
}
)
const name = "fsbucket"
const Name = "filesystem"
const (
defaultDirectory = "fsbucket"
@ -51,7 +51,8 @@ func decodeKey(key string) []byte {
}
// NewBucket creates new file system bucket instance.
func NewBucket(v *viper.Viper) (bucket.Bucket, error) {
func NewBucket(prefix string, v *viper.Viper) (bucket.Bucket, error) {
prefix = prefix + "." + Name
var (
dir string
perm os.FileMode
@ -60,27 +61,27 @@ func NewBucket(v *viper.Viper) (bucket.Bucket, error) {
depth int
)
if dir = v.GetString(name + ".directory"); dir == "" {
if dir = v.GetString(prefix + ".directory"); dir == "" {
dir = defaultDirectory
}
if perm = os.FileMode(v.GetInt(name + ".permissions")); perm == 0 {
if perm = os.FileMode(v.GetInt(prefix + ".permissions")); perm == 0 {
perm = defaultPermissions
}
if depth = v.GetInt(name + ".depth"); depth <= 0 {
if depth = v.GetInt(prefix + ".depth"); depth <= 0 {
depth = defaultDepth
}
if prefixLen = v.GetInt(name + ".prefix_len"); prefixLen <= 0 {
if prefixLen = v.GetInt(prefix + ".prefix_len"); prefixLen <= 0 {
prefixLen = defaultPrefixLen
}
if err := os.MkdirAll(dir, perm); err != nil {
return nil, errors.Wrapf(err, "could not create bucket %s", name)
return nil, errors.Wrapf(err, "could not create bucket %s", Name)
}
if v.GetBool(name + ".tree_enabled") {
if v.GetBool(prefix + ".tree_enabled") {
b := &treeBucket{
dir: dir,
perm: perm,