feat: check status before storage call

pull/1604/head
Noah Hsu 2022-09-03 22:32:09 +08:00
parent 849de88e68
commit 8fd56ef9dd
4 changed files with 43 additions and 5 deletions

View File

@ -9,6 +9,7 @@ type Config struct {
NoUpload bool `json:"no_upload"` NoUpload bool `json:"no_upload"`
NeedMs bool `json:"need_ms"` // if need get message from user, such as validate code NeedMs bool `json:"need_ms"` // if need get message from user, such as validate code
DefaultRoot string `json:"default_root"` DefaultRoot string `json:"default_root"`
CheckStatus bool
} }
func (c Config) MustProxy() bool { func (c Config) MustProxy() bool {

3
internal/op/const.go Normal file
View File

@ -0,0 +1,3 @@
package op
var WORK = "work"

View File

@ -29,6 +29,9 @@ func ClearCache(storage driver.Driver, path string) {
// List files in storage, not contains virtual file // List files in storage, not contains virtual file
func List(ctx context.Context, storage driver.Driver, path string, args model.ListArgs, refresh ...bool) ([]model.Obj, error) { func List(ctx context.Context, storage driver.Driver, path string, args model.ListArgs, refresh ...bool) ([]model.Obj, error) {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return nil, errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
path = utils.StandardizePath(path) path = utils.StandardizePath(path)
log.Debugf("op.List %s", path) log.Debugf("op.List %s", path)
dir, err := Get(ctx, storage, path) dir, err := Get(ctx, storage, path)
@ -129,6 +132,9 @@ var linkG singleflight.Group[*model.Link]
// Link get link, if is an url. should have an expiry time // Link get link, if is an url. should have an expiry time
func Link(ctx context.Context, storage driver.Driver, path string, args model.LinkArgs) (*model.Link, model.Obj, error) { func Link(ctx context.Context, storage driver.Driver, path string, args model.LinkArgs) (*model.Link, model.Obj, error) {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return nil, nil, errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
file, err := Get(ctx, storage, path) file, err := Get(ctx, storage, path)
if err != nil { if err != nil {
return nil, nil, errors.WithMessage(err, "failed to get file") return nil, nil, errors.WithMessage(err, "failed to get file")
@ -168,6 +174,9 @@ func Other(ctx context.Context, storage driver.Driver, args model.FsOtherArgs) (
} }
func MakeDir(ctx context.Context, storage driver.Driver, path string) error { func MakeDir(ctx context.Context, storage driver.Driver, path string) error {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
// check if dir exists // check if dir exists
f, err := Get(ctx, storage, path) f, err := Get(ctx, storage, path)
if err != nil { if err != nil {
@ -198,6 +207,9 @@ func MakeDir(ctx context.Context, storage driver.Driver, path string) error {
} }
func Move(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string) error { func Move(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string) error {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
srcObj, err := Get(ctx, storage, srcPath) srcObj, err := Get(ctx, storage, srcPath)
if err != nil { if err != nil {
return errors.WithMessage(err, "failed to get src object") return errors.WithMessage(err, "failed to get src object")
@ -210,6 +222,9 @@ func Move(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string
} }
func Rename(ctx context.Context, storage driver.Driver, srcPath, dstName string) error { func Rename(ctx context.Context, storage driver.Driver, srcPath, dstName string) error {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
srcObj, err := Get(ctx, storage, srcPath) srcObj, err := Get(ctx, storage, srcPath)
if err != nil { if err != nil {
return errors.WithMessage(err, "failed to get src object") return errors.WithMessage(err, "failed to get src object")
@ -219,6 +234,9 @@ func Rename(ctx context.Context, storage driver.Driver, srcPath, dstName string)
// Copy Just copy file[s] in a storage // Copy Just copy file[s] in a storage
func Copy(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string) error { func Copy(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string) error {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
srcObj, err := Get(ctx, storage, srcPath) srcObj, err := Get(ctx, storage, srcPath)
if err != nil { if err != nil {
return errors.WithMessage(err, "failed to get src object") return errors.WithMessage(err, "failed to get src object")
@ -228,6 +246,9 @@ func Copy(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string
} }
func Remove(ctx context.Context, storage driver.Driver, path string) error { func Remove(ctx context.Context, storage driver.Driver, path string) error {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
obj, err := Get(ctx, storage, path) obj, err := Get(ctx, storage, path)
if err != nil { if err != nil {
// if object not found, it's ok // if object not found, it's ok
@ -240,6 +261,9 @@ func Remove(ctx context.Context, storage driver.Driver, path string) error {
} }
func Put(ctx context.Context, storage driver.Driver, dstDirPath string, file model.FileStreamer, up driver.UpdateProgress) error { func Put(ctx context.Context, storage driver.Driver, dstDirPath string, file model.FileStreamer, up driver.UpdateProgress) error {
if storage.Config().CheckStatus && storage.GetStorage().Status != "ok" {
return errors.Errorf("storage not init: %s", storage.GetStorage().Status)
}
defer func() { defer func() {
if f, ok := file.GetReadCloser().(*os.File); ok { if f, ok := file.GetReadCloser().(*os.File); ok {
err := os.RemoveAll(f.Name()) err := os.RemoveAll(f.Name())

View File

@ -55,7 +55,7 @@ func CreateStorage(ctx context.Context, storage model.Storage) error {
MustSaveDriverStorage(storageDriver) MustSaveDriverStorage(storageDriver)
return errors.Wrapf(err, "failed init storage but storage is already created") return errors.Wrapf(err, "failed init storage but storage is already created")
} else { } else {
storageDriver.GetStorage().SetStatus("work") storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver) MustSaveDriverStorage(storageDriver)
} }
log.Debugf("storage %+v is created", storageDriver) log.Debugf("storage %+v is created", storageDriver)
@ -75,7 +75,12 @@ func LoadStorage(ctx context.Context, storage model.Storage) error {
err = storageDriver.Init(ctx, storage) err = storageDriver.Init(ctx, storage)
storagesMap.Store(storage.MountPath, storageDriver) storagesMap.Store(storage.MountPath, storageDriver)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed init storage but storage is already created") storageDriver.GetStorage().SetStatus(fmt.Sprintf("%+v", err.Error()))
MustSaveDriverStorage(storageDriver)
return errors.Wrapf(err, "failed init storage")
} else {
storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver)
} }
log.Debugf("storage %+v is created", storageDriver) log.Debugf("storage %+v is created", storageDriver)
return nil return nil
@ -165,10 +170,15 @@ func UpdateStorage(ctx context.Context, storage model.Storage) error {
return errors.Wrapf(err, "failed drop storage") return errors.Wrapf(err, "failed drop storage")
} }
err = storageDriver.Init(ctx, storage) err = storageDriver.Init(ctx, storage)
if err != nil {
return errors.Wrapf(err, "failed init storage")
}
storagesMap.Store(storage.MountPath, storageDriver) storagesMap.Store(storage.MountPath, storageDriver)
if err != nil {
storageDriver.GetStorage().SetStatus(fmt.Sprintf("%+v", err.Error()))
MustSaveDriverStorage(storageDriver)
return errors.Wrapf(err, "failed init storage")
} else {
storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver)
}
return nil return nil
} }