This commit is contained in:
Ralf Haferkamp
2024-09-26 11:12:45 +02:00
committed by Ralf Haferkamp
parent 1d9182025d
commit 038993ed10
12 changed files with 48 additions and 12 deletions
@@ -116,6 +116,11 @@ func (bs *Blobstore) Delete(node *node.Node) error {
return nil
}
// GetAvailableSize returns the available size in the blobstore in bytes
func (bs *Blobstore) GetAvailableSize(n *node.Node) (uint64, error) {
return node.GetAvailableSize(n.InternalPath())
}
// List lists all blobs in the Blobstore
func (bs *Blobstore) List() ([]*node.Node, error) {
dirs, err := filepath.Glob(filepath.Join(bs.root, "spaces", "*", "*", "blobs", "*", "*", "*", "*", "*"))
@@ -88,3 +88,8 @@ func (bs *Blobstore) Download(node *node.Node) (io.ReadCloser, error) {
func (bs *Blobstore) Delete(node *node.Node) error {
return nil
}
// GetAvailableSize returns the available size in the blobstore in bytes
func (bs *Blobstore) GetAvailableSize(n *node.Node) (uint64, error) {
return node.GetAvailableSize(n.InternalPath())
}
+1
View File
@@ -126,6 +126,7 @@ func New(m map[string]interface{}, stream events.Stream) (storage.FS, error) {
aspects := aspects.Aspects{
Lookup: lu,
Tree: tp,
Blobstore: bs,
Permissions: p,
EventStream: stream,
UserMapper: um,
@@ -29,6 +29,7 @@ import (
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/lookup"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"github.com/pkg/errors"
@@ -128,6 +129,12 @@ func (bs *Blobstore) Delete(node *node.Node) error {
return nil
}
// GetAvailableSize returns the available size in the blobstore in bytes
func (bs *Blobstore) GetAvailableSize(n *node.Node) (uint64, error) {
// S3 doen't have a concept of available size
return 0, tree.ErrSizeUnlimited
}
// List lists all blobs in the Blobstore
func (bs *Blobstore) List() ([]*node.Node, error) {
ch := bs.client.ListObjects(context.Background(), bs.bucket, minio.ListObjectsOptions{Recursive: true})
@@ -23,6 +23,7 @@ import (
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/permissions"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/trashbin"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/usermapper"
)
@@ -30,6 +31,7 @@ import (
type Aspects struct {
Lookup node.PathLookup
Tree node.Tree
Blobstore tree.Blobstore
Trashbin trashbin.Trashbin
Permissions permissions.Permissions
EventStream events.Stream
@@ -22,6 +22,7 @@ import (
"context"
"fmt"
"io"
"math"
"net/url"
"path"
"path/filepath"
@@ -112,6 +113,7 @@ type SessionStore interface {
type Decomposedfs struct {
lu node.PathLookup
tp node.Tree
bs tree.Blobstore
trashbin trashbin.Trashbin
o *options.Options
p permissions.Permissions
@@ -162,6 +164,7 @@ func NewDefault(m map[string]interface{}, bs tree.Blobstore, es events.Stream) (
aspects := aspects.Aspects{
Lookup: lu,
Tree: tp,
Blobstore: bs,
Permissions: permissions.NewPermissions(node.NewPermissions(lu), permissionsSelector),
EventStream: es,
DisableVersioning: o.DisableVersioning,
@@ -223,6 +226,7 @@ func New(o *options.Options, aspects aspects.Aspects) (storage.FS, error) {
fs := &Decomposedfs{
tp: aspects.Tree,
bs: aspects.Blobstore,
lu: aspects.Lookup,
trashbin: aspects.Trashbin,
o: o,
@@ -598,9 +602,11 @@ func (fs *Decomposedfs) GetQuota(ctx context.Context, ref *provider.Reference) (
quotaStr = string(ri.Opaque.Map["quota"].Value)
}
// FIXME this reads remaining disk size from the local disk, not the blobstore
remaining, err = node.GetAvailableSize(n.InternalPath())
if err != nil {
remaining, err = fs.bs.GetAvailableSize(n)
switch {
case errors.Is(err, tree.ErrSizeUnlimited):
remaining = math.MaxUint64
case err != nil:
return 0, 0, 0, err
}
+9 -4
View File
@@ -45,6 +45,7 @@ import (
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/metadata/prefixes"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/permissions"
"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
"github.com/cs3org/reva/v2/pkg/storage/utils/templates"
"github.com/cs3org/reva/v2/pkg/storagespace"
"github.com/cs3org/reva/v2/pkg/utils"
@@ -1028,9 +1029,11 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
quotaStr = quotaInOpaque
}
// FIXME this reads remaining disk size from the local disk, not the blobstore
remaining, err := node.GetAvailableSize(n.InternalPath())
if err != nil {
remaining, err := fs.bs.GetAvailableSize(n)
switch {
case errors.Is(err, tree.ErrSizeUnlimited):
remaining = math.MaxUint64
case err != nil:
return nil, err
}
total, used, remaining, err := fs.calculateTotalUsedRemaining(quotaStr, space.GetRootInfo().GetSize(), remaining)
@@ -1039,7 +1042,9 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
}
space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.total", strconv.FormatUint(total, 10))
space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.used", strconv.FormatUint(used, 10))
space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.remaining", strconv.FormatUint(remaining, 10))
if remaining != math.MaxUint64 {
space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.remaining", strconv.FormatUint(remaining, 10))
}
return space, nil
}
@@ -48,7 +48,10 @@ import (
"golang.org/x/sync/errgroup"
)
var tracer trace.Tracer
var (
tracer trace.Tracer
ErrSizeUnlimited = errors.New("blobstore size unlimited")
)
func init() {
tracer = otel.Tracer("github.com/cs3org/reva/pkg/storage/utils/decomposedfs/tree")
@@ -59,6 +62,7 @@ type Blobstore interface {
Upload(node *node.Node, source string) error
Download(node *node.Node) (io.ReadCloser, error)
Delete(node *node.Node) error
GetAvailableSize(node *node.Node) (uint64, error)
}
// Tree manages a hierarchical tree