mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-26 00:33:32 -06:00
[chore/performance] simplify storage driver to use storage.Storage directly (#1576)
* simply use storage.Storage, removing wrapping KVStore as we don't need KV store locking functionality Signed-off-by: kim <grufwub@gmail.com> * fix missing unwrapped function Signed-off-by: kim <grufwub@gmail.com> * add code comment Signed-off-by: kim <grufwub@gmail.com> * linter, please take my offering in peace Signed-off-by: kim <grufwub@gmail.com> --------- Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
e4c5f9adfd
commit
87c5c42972
5 changed files with 97 additions and 95 deletions
|
|
@ -21,6 +21,7 @@ package storage
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"mime"
|
||||
"net/url"
|
||||
"path"
|
||||
|
|
@ -28,7 +29,6 @@ import (
|
|||
|
||||
"codeberg.org/gruf/go-bytesize"
|
||||
"codeberg.org/gruf/go-cache/v3/ttl"
|
||||
"codeberg.org/gruf/go-store/v2/kv"
|
||||
"codeberg.org/gruf/go-store/v2/storage"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
|
|
@ -54,7 +54,6 @@ var ErrAlreadyExists = storage.ErrAlreadyExists
|
|||
// Driver wraps a kv.KVStore to also provide S3 presigned GET URLs.
|
||||
type Driver struct {
|
||||
// Underlying storage
|
||||
*kv.KVStore
|
||||
Storage storage.Storage
|
||||
|
||||
// S3-only parameters
|
||||
|
|
@ -63,6 +62,50 @@ type Driver struct {
|
|||
PresignedCache *ttl.Cache[string, PresignedURL]
|
||||
}
|
||||
|
||||
// Get returns the byte value for key in storage.
|
||||
func (d *Driver) Get(ctx context.Context, key string) ([]byte, error) {
|
||||
return d.Storage.ReadBytes(ctx, key)
|
||||
}
|
||||
|
||||
// GetStream returns an io.ReadCloser for the value bytes at key in the storage.
|
||||
func (d *Driver) GetStream(ctx context.Context, key string) (io.ReadCloser, error) {
|
||||
return d.Storage.ReadStream(ctx, key)
|
||||
}
|
||||
|
||||
// Put writes the supplied value bytes at key in the storage
|
||||
func (d *Driver) Put(ctx context.Context, key string, value []byte) (int, error) {
|
||||
return d.Storage.WriteBytes(ctx, key, value)
|
||||
}
|
||||
|
||||
// PutStream writes the bytes from supplied reader at key in the storage
|
||||
func (d *Driver) PutStream(ctx context.Context, key string, r io.Reader) (int64, error) {
|
||||
return d.Storage.WriteStream(ctx, key, r)
|
||||
}
|
||||
|
||||
// Remove attempts to remove the supplied key (and corresponding value) from storage.
|
||||
func (d *Driver) Delete(ctx context.Context, key string) error {
|
||||
return d.Storage.Remove(ctx, key)
|
||||
}
|
||||
|
||||
// Has checks if the supplied key is in the storage.
|
||||
func (d *Driver) Has(ctx context.Context, key string) (bool, error) {
|
||||
return d.Storage.Stat(ctx, key)
|
||||
}
|
||||
|
||||
// WalkKeys walks the keys in the storage.
|
||||
func (d *Driver) WalkKeys(ctx context.Context, walk func(context.Context, string) error) error {
|
||||
return d.Storage.WalkKeys(ctx, storage.WalkKeysOptions{
|
||||
WalkFn: func(ctx context.Context, entry storage.Entry) error {
|
||||
return walk(ctx, entry.Key)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// Close will close the storage, releasing any file locks.
|
||||
func (d *Driver) Close() error {
|
||||
return d.Storage.Close()
|
||||
}
|
||||
|
||||
// URL will return a presigned GET object URL, but only if running on S3 storage with proxying disabled.
|
||||
func (d *Driver) URL(ctx context.Context, key string) *PresignedURL {
|
||||
// Check whether S3 *without* proxying is enabled
|
||||
|
|
@ -128,7 +171,6 @@ func NewFileStorage() (*Driver, error) {
|
|||
}
|
||||
|
||||
return &Driver{
|
||||
KVStore: kv.New(disk),
|
||||
Storage: disk,
|
||||
}, nil
|
||||
}
|
||||
|
|
@ -163,7 +205,6 @@ func NewS3Storage() (*Driver, error) {
|
|||
presignedCache.Start(urlCacheExpiryFrequency)
|
||||
|
||||
return &Driver{
|
||||
KVStore: kv.New(s3),
|
||||
Proxy: config.GetStorageS3Proxy(),
|
||||
Bucket: config.GetStorageS3BucketName(),
|
||||
Storage: s3,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue