From 3af23f6792c37d013850bb5bcea193e2dc1c6c67 Mon Sep 17 00:00:00 2001 From: BoYanZh Date: Wed, 21 Dec 2022 19:21:18 +0800 Subject: [PATCH] feat: batch reload all storages (close #2762 pr #2775) --- server/handles/storage.go | 34 ++++++++++++++++++++++++++++++++++ server/router.go | 1 + 2 files changed, 35 insertions(+) diff --git a/server/handles/storage.go b/server/handles/storage.go index d523d148..c6c0a41d 100644 --- a/server/handles/storage.go +++ b/server/handles/storage.go @@ -1,8 +1,10 @@ package handles import ( + "context" "strconv" + "github.com/alist-org/alist/v3/internal/conf" "github.com/alist-org/alist/v3/internal/db" "github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/op" @@ -116,3 +118,35 @@ func GetStorage(c *gin.Context) { } common.SuccessResp(c, storage) } + +func LoadAllStorages(c *gin.Context) { + storages, err := db.GetEnabledStorages() + if err != nil { + log.Errorf("failed get enabled storages: %+v", err) + common.ErrorResp(c, err, 500, true) + return + } + conf.StoragesLoaded = false + go func(storages []model.Storage) { + for _, storage := range storages { + storageDriver, err := op.GetStorageByMountPath(storage.MountPath) + if err != nil { + log.Errorf("failed get storage driver: %+v", err) + continue + } + // drop the storage in the driver + if err := storageDriver.Drop(context.Background()); err != nil { + log.Errorf("failed drop storage: %+v", err) + continue + } + if err := op.LoadStorage(context.Background(), storage); err != nil { + log.Errorf("failed get enabled storages: %+v", err) + continue + } + log.Infof("success load storage: [%s], driver: [%s]", + storage.MountPath, storage.Driver) + } + conf.StoragesLoaded = true + }(storages) + common.SuccessResp(c) +} diff --git a/server/router.go b/server/router.go index d8e58254..80d05a67 100644 --- a/server/router.go +++ b/server/router.go @@ -71,6 +71,7 @@ func admin(g *gin.RouterGroup) { storage.POST("/delete", handles.DeleteStorage) storage.POST("/enable", handles.EnableStorage) storage.POST("/disable", handles.DisableStorage) + storage.POST("/load_all", handles.LoadAllStorages) driver := g.Group("/driver") driver.GET("/list", handles.ListDriverInfo)