forked from TrueCloudLab/rclone
84 lines
2 KiB
Go
84 lines
2 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package metainfo
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/zeebo/errs"
|
|
|
|
"storj.io/common/encryption"
|
|
"storj.io/common/storj"
|
|
)
|
|
|
|
var errClass = errs.Class("metainfo")
|
|
|
|
const defaultSegmentLimit = 8 // TODO
|
|
|
|
// DB implements metainfo database.
|
|
type DB struct {
|
|
metainfo *Client
|
|
|
|
encStore *encryption.Store
|
|
}
|
|
|
|
// New creates a new metainfo database.
|
|
func New(metainfo *Client, encStore *encryption.Store) *DB {
|
|
return &DB{
|
|
metainfo: metainfo,
|
|
encStore: encStore,
|
|
}
|
|
}
|
|
|
|
// CreateBucket creates a new bucket with the specified information.
|
|
func (db *DB) CreateBucket(ctx context.Context, bucketName string) (newBucket storj.Bucket, err error) {
|
|
defer mon.Task()(&ctx)(&err)
|
|
|
|
if bucketName == "" {
|
|
return storj.Bucket{}, storj.ErrNoBucket.New("")
|
|
}
|
|
|
|
newBucket, err = db.metainfo.CreateBucket(ctx, CreateBucketParams{
|
|
Name: []byte(bucketName),
|
|
})
|
|
return newBucket, storj.ErrBucket.Wrap(err)
|
|
}
|
|
|
|
// DeleteBucket deletes bucket.
|
|
func (db *DB) DeleteBucket(ctx context.Context, bucketName string) (bucket storj.Bucket, err error) {
|
|
defer mon.Task()(&ctx)(&err)
|
|
|
|
if bucketName == "" {
|
|
return storj.Bucket{}, storj.ErrNoBucket.New("")
|
|
}
|
|
|
|
bucket, err = db.metainfo.DeleteBucket(ctx, DeleteBucketParams{
|
|
Name: []byte(bucketName),
|
|
})
|
|
return bucket, storj.ErrBucket.Wrap(err)
|
|
}
|
|
|
|
// GetBucket gets bucket information.
|
|
func (db *DB) GetBucket(ctx context.Context, bucketName string) (bucket storj.Bucket, err error) {
|
|
defer mon.Task()(&ctx)(&err)
|
|
|
|
if bucketName == "" {
|
|
return storj.Bucket{}, storj.ErrNoBucket.New("")
|
|
}
|
|
|
|
bucket, err = db.metainfo.GetBucket(ctx, GetBucketParams{
|
|
Name: []byte(bucketName),
|
|
})
|
|
return bucket, storj.ErrBucket.Wrap(err)
|
|
}
|
|
|
|
// ListBuckets lists buckets.
|
|
func (db *DB) ListBuckets(ctx context.Context, options storj.BucketListOptions) (bucketList storj.BucketList, err error) {
|
|
defer mon.Task()(&ctx)(&err)
|
|
|
|
bucketList, err = db.metainfo.ListBuckets(ctx, ListBucketsParams{
|
|
ListOpts: options,
|
|
})
|
|
return bucketList, storj.ErrBucket.Wrap(err)
|
|
}
|