merged with fixes
This commit is contained in:
parent
a9e758b712
commit
2f1818d656
176 changed files with 9000 additions and 907 deletions
72
internal/app/files/guarded_backend.go
Normal file
72
internal/app/files/guarded_backend.go
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package files
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"time"
|
||||
)
|
||||
|
||||
// GuardedBlobBackend applies one capacity policy to every permanent write,
|
||||
// including seeds and non-upload media paths, instead of relying on individual
|
||||
// RPC handlers to remember a check.
|
||||
type GuardedBlobBackend struct {
|
||||
backend BlobBackend
|
||||
guard SpaceGuard
|
||||
}
|
||||
|
||||
func NewGuardedBlobBackend(backend BlobBackend, guard SpaceGuard) *GuardedBlobBackend {
|
||||
return &GuardedBlobBackend{backend: backend, guard: guard}
|
||||
}
|
||||
|
||||
func (g *GuardedBlobBackend) Name() string { return g.backend.Name() }
|
||||
|
||||
func (g *GuardedBlobBackend) Put(ctx context.Context, data []byte) (string, error) {
|
||||
if err := requireSpace(g.guard, int64(len(data))); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return g.backend.Put(ctx, data)
|
||||
}
|
||||
|
||||
func (g *GuardedBlobBackend) PutReader(ctx context.Context, r io.Reader) (string, int64, []byte, error) {
|
||||
return g.backend.PutReader(ctx, &capacityReader{src: r, guard: g.guard})
|
||||
}
|
||||
|
||||
func (g *GuardedBlobBackend) Get(ctx context.Context, key string) ([]byte, error) {
|
||||
return g.backend.Get(ctx, key)
|
||||
}
|
||||
|
||||
func (g *GuardedBlobBackend) GetRange(ctx context.Context, key string, offset, limit int64) ([]byte, int64, error) {
|
||||
return g.backend.GetRange(ctx, key, offset, limit)
|
||||
}
|
||||
|
||||
type GuardedUploadPartBackend struct {
|
||||
backend UploadPartBackend
|
||||
guard SpaceGuard
|
||||
}
|
||||
|
||||
func NewGuardedUploadPartBackend(backend UploadPartBackend, guard SpaceGuard) *GuardedUploadPartBackend {
|
||||
return &GuardedUploadPartBackend{backend: backend, guard: guard}
|
||||
}
|
||||
|
||||
func (g *GuardedUploadPartBackend) PutUploadPart(ctx context.Context, ownerUserID, fileID int64, part int, data []byte) (uploadPartObject, error) {
|
||||
if err := requireSpace(g.guard, int64(len(data))); err != nil {
|
||||
return uploadPartObject{}, err
|
||||
}
|
||||
return g.backend.PutUploadPart(ctx, ownerUserID, fileID, part, data)
|
||||
}
|
||||
|
||||
func (g *GuardedUploadPartBackend) GetUploadPart(ctx context.Context, key string) ([]byte, error) {
|
||||
return g.backend.GetUploadPart(ctx, key)
|
||||
}
|
||||
|
||||
func (g *GuardedUploadPartBackend) OpenUploadPart(ctx context.Context, key string) (io.ReadCloser, error) {
|
||||
return g.backend.OpenUploadPart(ctx, key)
|
||||
}
|
||||
|
||||
func (g *GuardedUploadPartBackend) DeleteUploadPart(ctx context.Context, key string) error {
|
||||
return g.backend.DeleteUploadPart(ctx, key)
|
||||
}
|
||||
|
||||
func (g *GuardedUploadPartBackend) DeleteExpiredUploadParts(ctx context.Context, before time.Time, limit int) (int64, error) {
|
||||
return g.backend.DeleteExpiredUploadParts(ctx, before, limit)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue