From 47a12f4caa8374440a7d5d212e34def7c242e798 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Tue, 8 Apr 2025 17:11:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=8D=E5=8A=A1=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/internal/cmd/cmd.go | 13 +--- agent/internal/cmd/serve.go | 19 +++++- agent/internal/config/config.go | 1 - client/internal/cmdline/migrate.go | 61 +++++++++++++++++++ client/internal/config/config.go | 2 +- .../internal/db/{storage.go => user_space.go} | 2 +- common/assets/confs/agent.config.json | 8 --- common/assets/confs/client.config.json | 9 ++- 8 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 client/internal/cmdline/migrate.go rename client/internal/db/{storage.go => user_space.go} (92%) diff --git a/agent/internal/cmd/cmd.go b/agent/internal/cmd/cmd.go index 1de86c8..0dafec7 100644 --- a/agent/internal/cmd/cmd.go +++ b/agent/internal/cmd/cmd.go @@ -2,15 +2,4 @@ package cmd import "github.com/spf13/cobra" -var RootCmd = &cobra.Command{ - Use: "agent", -} - -func init() { - var configPath string - RootCmd.Flags().StringVarP(&configPath, "config", "c", "", "path to config file") - - RootCmd.Run = func(cmd *cobra.Command, args []string) { - serve(configPath) - } -} +var RootCmd = &cobra.Command{} diff --git a/agent/internal/cmd/serve.go b/agent/internal/cmd/serve.go index 5a3417a..c5d11ce 100644 --- a/agent/internal/cmd/serve.go +++ b/agent/internal/cmd/serve.go @@ -7,6 +7,7 @@ import ( "os" "github.com/go-co-op/gocron/v2" + "github.com/spf13/cobra" "gitlink.org.cn/cloudream/storage2/agent/internal/http" "gitlink.org.cn/cloudream/storage2/common/pkgs/storage/pool" @@ -30,7 +31,21 @@ import ( cmdsvc "gitlink.org.cn/cloudream/storage2/agent/internal/mq" ) -func serve(configPath string) { +func init() { + var configPath string + var httpAddr string + + cmd := &cobra.Command{ + Run: func(cmd *cobra.Command, args []string) { + serve(configPath, httpAddr) + }, + } + cmd.Flags().StringVarP(&configPath, "config", "c", "", "path to config file") + cmd.Flags().StringVarP(&httpAddr, "http", "", "127.0.0.1:8890", "http listen address") + RootCmd.AddCommand(cmd) +} + +func serve(configPath string, httpAddr string) { err := config.Init(configPath) if err != nil { fmt.Printf("init config failed, err: %s", err.Error()) @@ -58,7 +73,7 @@ func serve(configPath string) { worker := exec.NewWorker() // 初始化HTTP服务 - httpSvr, err := http.NewServer(config.Cfg().ListenAddr, http.NewService(&worker, stgPool)) + httpSvr, err := http.NewServer(httpAddr, http.NewService(&worker, stgPool)) if err != nil { logger.Fatalf("new http server failed, err: %s", err.Error()) } diff --git a/agent/internal/config/config.go b/agent/internal/config/config.go index a24ec0e..0556984 100644 --- a/agent/internal/config/config.go +++ b/agent/internal/config/config.go @@ -13,7 +13,6 @@ import ( type Config struct { ID cdssdk.HubID `json:"id"` - ListenAddr string `json:"listenAddr"` Local stgglb.LocalMachineInfo `json:"local"` GRPC *grpc.Config `json:"grpc"` Logger log.Config `json:"logger"` diff --git a/client/internal/cmdline/migrate.go b/client/internal/cmdline/migrate.go new file mode 100644 index 0000000..47e534d --- /dev/null +++ b/client/internal/cmdline/migrate.go @@ -0,0 +1,61 @@ +package cmdline + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + "gitlink.org.cn/cloudream/storage2/client/internal/config" + clitypes "gitlink.org.cn/cloudream/storage2/client/types" + "gorm.io/driver/mysql" + "gorm.io/gorm" +) + +func init() { + var configPath string + cmd := cobra.Command{ + Use: "migrate", + Short: "Run database migrations", + Run: func(cmd *cobra.Command, args []string) { + migrate(configPath) + }, + } + cmd.Flags().StringVarP(&configPath, "config", "c", "", "Path to config file") + RootCmd.AddCommand(&cmd) +} + +func migrate(configPath string) { + // TODO 将create_database.sql的内容逐渐移动到这里来 + + err := config.Init(configPath) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + db, err := gorm.Open(mysql.Open(config.Cfg().DB.MakeSourceString())) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + db = db.Set("gorm:table_options", "CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci") + + migrateOne(db, clitypes.Bucket{}) + migrateOne(db, clitypes.ObjectAccessStat{}) + migrateOne(db, clitypes.ObjectBlock{}) + migrateOne(db, clitypes.Object{}) + migrateOne(db, clitypes.PackageAccessStat{}) + migrateOne(db, clitypes.Package{}) + migrateOne(db, clitypes.PinnedObject{}) + migrateOne(db, clitypes.UserSpace{}) + + fmt.Println("migrate success") +} + +func migrateOne[T any](db *gorm.DB, model T) { + err := db.AutoMigrate(model) + if err != nil { + fmt.Printf("migratting model %T: %v\n", model, err) + os.Exit(1) + } +} diff --git a/client/internal/config/config.go b/client/internal/config/config.go index cf54835..09048d0 100644 --- a/client/internal/config/config.go +++ b/client/internal/config/config.go @@ -18,6 +18,7 @@ type Config struct { Local stgglb.LocalMachineInfo `json:"local"` AgentGRPC agtrpc.PoolConfig `json:"agentGRPC"` Logger logger.Config `json:"logger"` + DB db.Config `json:"db"` RabbitMQ mq.Config `json:"rabbitMQ"` DistLock distlock.Config `json:"distlock"` Connectivity connectivity.Config `json:"connectivity"` @@ -27,7 +28,6 @@ type Config struct { AuthAccessKey string `json:"authAccessKey"` // TODO 临时办法 AuthSecretKey string `json:"authSecretKey"` MaxHTTPBodySize int64 `json:"maxHttpBodySize"` - DB db.Config `json:"db"` } var cfg Config diff --git a/client/internal/db/storage.go b/client/internal/db/user_space.go similarity index 92% rename from client/internal/db/storage.go rename to client/internal/db/user_space.go index 445795d..d7cb83f 100644 --- a/client/internal/db/storage.go +++ b/client/internal/db/user_space.go @@ -36,7 +36,7 @@ func (db *UserSpaceDB) GetAll(ctx SQLContext) ([]types.UserSpace, error) { return stgs, err } -func (db *UserSpaceDB) BatchGetAllUserSpaceIDs(ctx SQLContext, start int, count int) ([]types.UserSpaceID, error) { +func (db *UserSpaceDB) BatchGetAllSpaceIDs(ctx SQLContext, start int, count int) ([]types.UserSpaceID, error) { var ret []types.UserSpaceID err := ctx.Table("UserSpace").Select("UserSpaceID").Find(&ret).Limit(count).Offset(start).Error return ret, err diff --git a/common/assets/confs/agent.config.json b/common/assets/confs/agent.config.json index 5c088c7..21c08b9 100644 --- a/common/assets/confs/agent.config.json +++ b/common/assets/confs/agent.config.json @@ -1,7 +1,6 @@ { "id": 1, "local": { - "hubID": 1, "localIP": "127.0.0.1", "externalIP": "127.0.0.1", "locationID": 1 @@ -36,12 +35,5 @@ }, "connectivity": { "testInterval": 300 - }, - "downloader": { - "maxStripCacheCount": 100, - "ecStripPrefetchCount": 1 - }, - "downloadStrategy": { - "highLatencyHub": 35 } } \ No newline at end of file diff --git a/common/assets/confs/client.config.json b/common/assets/confs/client.config.json index 418129f..570b47e 100644 --- a/common/assets/confs/client.config.json +++ b/common/assets/confs/client.config.json @@ -1,5 +1,6 @@ { "local": { + "userID": 1, "localIP": "127.0.0.1", "externalIP": "127.0.0.1", "locationID": 1 @@ -11,6 +12,12 @@ "output": "stdout", "level": "debug" }, + "db": { + "address": "127.0.0.1:3306", + "account": "root", + "password": "123456", + "databaseName": "cloudream" + }, "rabbitMQ": { "address": "127.0.0.1:5672", "account": "cloudream", @@ -39,7 +46,7 @@ "downloadStrategy": { "highLatencyHub": 35 }, - "storageID": 0, + "userSpaceID": 0, "authAccessKey": "", "authSecretKey": "", "maxHttpBodySize": 5242880