mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-04 10:39:47 -06:00
[server] Streamline storage backend access, fix init error
This commit is contained in:
@@ -7,8 +7,8 @@ db:
|
||||
nomigrate: false # Do not auto-migrate schema (dev)
|
||||
trace: false # Trace queries (dev)
|
||||
|
||||
fs:
|
||||
storage: storage
|
||||
storage:
|
||||
location: storage
|
||||
|
||||
user:
|
||||
password:
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/google/uuid"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
"github.com/shroff/phylum/server/internal/storage"
|
||||
)
|
||||
|
||||
type ResourceBindConflictResolution int32
|
||||
@@ -276,7 +277,7 @@ func (f filesystem) createResourceVersion(id, versionID uuid.UUID, size int64, m
|
||||
"size": size,
|
||||
"mime_type": mimeType,
|
||||
"sha256": sha256,
|
||||
"storage": "_",
|
||||
"storage": storage.DefaultBackendName,
|
||||
}
|
||||
_, err := f.db.Exec(q, args)
|
||||
return err
|
||||
|
||||
@@ -28,8 +28,8 @@ func (v Version) OpenRead(start, length int) (io.ReadCloser, error) {
|
||||
if v.Storage == "" {
|
||||
return nil, errors.New("unknown storage backend")
|
||||
}
|
||||
if b := storage.GetBackend(v.Storage); b == nil {
|
||||
return nil, errors.New("storage backend not found: " + v.Storage)
|
||||
if b, err := storage.GetBackend(v.Storage); err != nil {
|
||||
return nil, errors.New("failed to read " + v.ID.String() + ": " + err.Error())
|
||||
} else {
|
||||
return b.OpenRead(v.ID.String(), start, length)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package storage
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
@@ -12,6 +13,9 @@ import (
|
||||
)
|
||||
|
||||
var Cfg Config
|
||||
|
||||
const DefaultBackendName = "_"
|
||||
|
||||
var defaultBackend LocalBackend
|
||||
var backends map[string]Backend
|
||||
|
||||
@@ -22,8 +26,15 @@ type BackendConfig struct {
|
||||
}
|
||||
|
||||
func Initialize(db db.Handler) error {
|
||||
if err := os.Chmod(Cfg.Location, 0700); err != nil {
|
||||
return errors.New("failed to set permissions: " + err.Error())
|
||||
if err := os.MkdirAll(Cfg.Location, 0700); err != nil {
|
||||
return errors.New("failed to create storage location(" + Cfg.Location + "): " + err.Error())
|
||||
} else {
|
||||
if stat, err := os.Stat(Cfg.Location); err != nil {
|
||||
return errors.New("failed to stat storage location(" + Cfg.Location + "): " + err.Error())
|
||||
} else if stat.Mode()&0xfff != 0700 {
|
||||
return errors.New("storage location does not have correct permissions (0700): " + fmt.Sprintf("%o", stat.Mode()&0xfff))
|
||||
}
|
||||
|
||||
}
|
||||
if restoredBackends, err := restoreBackends(db); err != nil {
|
||||
return errors.New("failed to restore backends: " + err.Error())
|
||||
@@ -42,11 +53,15 @@ func DefaultBackend() LocalBackend {
|
||||
return defaultBackend
|
||||
}
|
||||
|
||||
func GetBackend(name string) Backend {
|
||||
if name == "_" {
|
||||
return defaultBackend
|
||||
func GetBackend(name string) (Backend, error) {
|
||||
if name == DefaultBackendName {
|
||||
return defaultBackend, nil
|
||||
}
|
||||
if b, ok := backends[name]; !ok {
|
||||
return nil, errors.New("no storage backend named \"" + name + "\"")
|
||||
} else {
|
||||
return b, nil
|
||||
}
|
||||
return backends[name]
|
||||
}
|
||||
|
||||
func ListBackends() map[string]Backend {
|
||||
|
||||
Reference in New Issue
Block a user