From 0c2178322ad63071b8326af106de32cf8193ecee Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Tue, 12 Oct 2021 15:17:08 +0200 Subject: [PATCH] unwrap path in getQuota --- .../storageprovider/storageprovider.go | 12 +++++++++- .../utils/decomposedfs/decomposedfs.go | 2 +- pkg/storage/utils/decomposedfs/upload.go | 22 ++++++++++++------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 322d91ed4d9..8a9235fb146 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -1174,7 +1174,17 @@ func (s *service) CreateSymlink(ctx context.Context, req *provider.CreateSymlink } func (s *service) GetQuota(ctx context.Context, req *provider.GetQuotaRequest) (*provider.GetQuotaResponse, error) { - total, used, err := s.storage.GetQuota(ctx, req) + newRef, err := s.unwrap(ctx, req.Ref) + if err != nil { + return &provider.GetQuotaResponse{ + Status: status.NewInternal(ctx, err, "error unwrapping path"), + }, nil + } + newReq := &provider.GetQuotaRequest{ + Ref: newRef, + Opaque: req.Opaque, + } + total, used, err := s.storage.GetQuota(ctx, newReq) if err != nil { var st *rpc.Status switch err.(type) { diff --git a/pkg/storage/utils/decomposedfs/decomposedfs.go b/pkg/storage/utils/decomposedfs/decomposedfs.go index c1fffd27a0a..5696f7cd000 100644 --- a/pkg/storage/utils/decomposedfs/decomposedfs.go +++ b/pkg/storage/utils/decomposedfs/decomposedfs.go @@ -212,7 +212,7 @@ func (fs *Decomposedfs) CreateHome(ctx context.Context) (err error) { return } - if fs.o.TreeTimeAccounting { + if fs.o.TreeTimeAccounting || fs.o.TreeSizeAccounting { homePath := h.InternalPath() // mark the home node as the end of propagation if err = xattr.Set(homePath, xattrs.PropagationAttr, []byte("1")); err != nil { diff --git a/pkg/storage/utils/decomposedfs/upload.go b/pkg/storage/utils/decomposedfs/upload.go index 31a70c2db69..42be84e4ec3 100644 --- a/pkg/storage/utils/decomposedfs/upload.go +++ b/pkg/storage/utils/decomposedfs/upload.go @@ -157,7 +157,7 @@ func (fs *Decomposedfs) InitiateUpload(ctx context.Context, ref *provider.Refere log.Debug().Interface("info", info).Interface("node", n).Interface("metadata", metadata).Msg("Decomposedfs: resolved filename") - _, err = checkQuota(ctx, fs, uint64(info.Size)) + _, err = checkQuota(ctx, fs, n.SpaceRoot, uint64(info.Size)) if err != nil { return nil, err } @@ -462,11 +462,6 @@ func (upload *fileUpload) FinishUpload(ctx context.Context) (err error) { return } - _, err = checkQuota(upload.ctx, upload.fs, uint64(fi.Size())) - if err != nil { - return err - } - n := node.New( upload.info.Storage["NodeId"], upload.info.Storage["NodeParentId"], @@ -479,6 +474,11 @@ func (upload *fileUpload) FinishUpload(ctx context.Context) (err error) { n.SpaceRoot = &node.Node{ ID: upload.info.Storage["SpaceRoot"], } + _, err = checkQuota(upload.ctx, upload.fs, n.SpaceRoot, uint64(fi.Size())) + if err != nil { + return err + } + if n.ID == "" { n.ID = uuid.New().String() } @@ -738,8 +738,14 @@ func (upload *fileUpload) ConcatUploads(ctx context.Context, uploads []tusd.Uplo return } -func checkQuota(ctx context.Context, fs *Decomposedfs, fileSize uint64) (quotaSufficient bool, err error) { - req := &provider.GetQuotaRequest{} +func checkQuota(ctx context.Context, fs *Decomposedfs, spaceRoot *node.Node, fileSize uint64) (quotaSufficient bool, err error) { + req := &provider.GetQuotaRequest{ + Ref: &provider.Reference{ + ResourceId: &provider.ResourceId{ + OpaqueId: spaceRoot.ID, + }, + }, + } total, inUse, err := fs.GetQuota(ctx, req) if err != nil { switch err.(type) {