| @@ -10,6 +10,7 @@ import ( | |||||
| "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec" | "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec" | ||||
| "gitlink.org.cn/cloudream/common/pkgs/logger" | "gitlink.org.cn/cloudream/common/pkgs/logger" | ||||
| "gitlink.org.cn/cloudream/common/pkgs/mq" | |||||
| cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | ||||
| "gitlink.org.cn/cloudream/storage/agent/internal/config" | "gitlink.org.cn/cloudream/storage/agent/internal/config" | ||||
| "gitlink.org.cn/cloudream/storage/agent/internal/task" | "gitlink.org.cn/cloudream/storage/agent/internal/task" | ||||
| @@ -171,12 +172,27 @@ func downloadHubConfig() coormq.GetHubConfigResp { | |||||
| func serveAgentServer(server *agtmq.Server) { | func serveAgentServer(server *agtmq.Server) { | ||||
| logger.Info("start serving command server") | logger.Info("start serving command server") | ||||
| err := server.Start() | |||||
| ch := server.Start() | |||||
| loop: | |||||
| for { | |||||
| val, err := ch.Receive() | |||||
| if err != nil { | |||||
| logger.Errorf("command server stopped with error: %s", err.Error()) | |||||
| break | |||||
| } | |||||
| if err != nil { | |||||
| logger.Errorf("command server stopped with error: %s", err.Error()) | |||||
| switch val := val.(type) { | |||||
| case error: | |||||
| logger.Errorf("rabbitmq connect with error: %v", val) | |||||
| case mq.ServerExit: | |||||
| if val.Error != nil { | |||||
| logger.Errorf("rabbitmq server exit with error: %v", val.Error) | |||||
| } else { | |||||
| logger.Info("rabbitmq server exit") | |||||
| } | |||||
| break loop | |||||
| } | |||||
| } | } | ||||
| logger.Info("command server stopped") | logger.Info("command server stopped") | ||||
| // TODO 仅简单结束了程序 | // TODO 仅简单结束了程序 | ||||
| @@ -3,202 +3,5 @@ package main | |||||
| import "gitlink.org.cn/cloudream/storage/agent/internal/cmd" | import "gitlink.org.cn/cloudream/storage/agent/internal/cmd" | ||||
| func main() { | func main() { | ||||
| <<<<<<< HEAD | |||||
| // TODO 放到配置里读取 | |||||
| AgentIpList = []string{"pcm01", "pcm1", "pcm2"} | |||||
| err := config.Init() | |||||
| if err != nil { | |||||
| fmt.Printf("init config failed, err: %s", err.Error()) | |||||
| os.Exit(1) | |||||
| } | |||||
| err = logger.Init(&config.Cfg().Logger) | |||||
| if err != nil { | |||||
| fmt.Printf("init logger failed, err: %s", err.Error()) | |||||
| os.Exit(1) | |||||
| } | |||||
| stgglb.InitLocal(&config.Cfg().Local) | |||||
| stgglb.InitMQPool(&config.Cfg().RabbitMQ) | |||||
| stgglb.InitAgentRPCPool(&agtrpc.PoolConfig{}) | |||||
| sw := exec.NewWorker() | |||||
| svc := http.NewService(&sw) | |||||
| if err != nil { | |||||
| logger.Fatalf("new http service failed, err: %s", err.Error()) | |||||
| } | |||||
| server, err := http.NewServer(config.Cfg().ListenAddr, svc) | |||||
| err = server.Serve() | |||||
| if err != nil { | |||||
| logger.Fatalf("http server stopped with error: %s", err.Error()) | |||||
| } | |||||
| // 启动网络连通性检测,并就地检测一次 | |||||
| conCol := connectivity.NewCollector(&config.Cfg().Connectivity, func(collector *connectivity.Collector) { | |||||
| log := logger.WithField("Connectivity", "") | |||||
| coorCli, err := stgglb.CoordinatorMQPool.Acquire() | |||||
| if err != nil { | |||||
| log.Warnf("acquire coordinator mq failed, err: %s", err.Error()) | |||||
| return | |||||
| } | |||||
| defer stgglb.CoordinatorMQPool.Release(coorCli) | |||||
| cons := collector.GetAll() | |||||
| nodeCons := make([]cdssdk.NodeConnectivity, 0, len(cons)) | |||||
| for _, con := range cons { | |||||
| var delay *float32 | |||||
| if con.Delay != nil { | |||||
| v := float32(con.Delay.Microseconds()) / 1000 | |||||
| delay = &v | |||||
| } | |||||
| nodeCons = append(nodeCons, cdssdk.NodeConnectivity{ | |||||
| FromNodeID: *stgglb.Local.NodeID, | |||||
| ToNodeID: con.ToNodeID, | |||||
| Delay: delay, | |||||
| TestTime: con.TestTime, | |||||
| }) | |||||
| } | |||||
| _, err = coorCli.UpdateNodeConnectivities(coormq.ReqUpdateNodeConnectivities(nodeCons)) | |||||
| if err != nil { | |||||
| log.Warnf("update node connectivities: %v", err) | |||||
| } | |||||
| }) | |||||
| conCol.CollectInPlace() | |||||
| acStat := accessstat.NewAccessStat(accessstat.Config{ | |||||
| // TODO 考虑放到配置里 | |||||
| ReportInterval: time.Second * 10, | |||||
| }) | |||||
| go serveAccessStat(acStat) | |||||
| // TODO2 根据配置实例化Store并加入到Pool中 | |||||
| shardStorePool := pool.New() | |||||
| distlock, err := distlock.NewService(&config.Cfg().DistLock) | |||||
| if err != nil { | |||||
| logger.Fatalf("new ipfs failed, err: %s", err.Error()) | |||||
| } | |||||
| dlder := downloader.NewDownloader(config.Cfg().Downloader, &conCol) | |||||
| taskMgr := task.NewManager(distlock, &conCol, &dlder, acStat, shardStorePool) | |||||
| // 启动命令服务器 | |||||
| // TODO 需要设计AgentID持久化机制 | |||||
| agtSvr, err := agtmq.NewServer(cmdsvc.NewService(&taskMgr, shardStorePool), config.Cfg().ID, &config.Cfg().RabbitMQ) | |||||
| if err != nil { | |||||
| logger.Fatalf("new agent server failed, err: %s", err.Error()) | |||||
| } | |||||
| agtSvr.OnError(func(err error) { | |||||
| logger.Warnf("agent server err: %s", err.Error()) | |||||
| }) | |||||
| go serveAgentServer(agtSvr) | |||||
| //面向客户端收发数据 | |||||
| listenAddr := config.Cfg().GRPC.MakeListenAddress() | |||||
| lis, err := net.Listen("tcp", listenAddr) | |||||
| if err != nil { | |||||
| logger.Fatalf("listen on %s failed, err: %s", listenAddr, err.Error()) | |||||
| } | |||||
| s := grpc.NewServer() | |||||
| agtrpc.RegisterAgentServer(s, grpcsvc.NewService(&sw)) | |||||
| go serveGRPC(s, lis) | |||||
| go serveDistLock(distlock) | |||||
| foever := make(chan struct{}) | |||||
| <-foever | |||||
| } | |||||
| func serveAgentServer(server *agtmq.Server) { | |||||
| logger.Info("start serving command server") | |||||
| ch := server.Start() | |||||
| if ch == nil { | |||||
| logger.Errorf("RabbitMQ logEvent is nil") | |||||
| os.Exit(1) | |||||
| } | |||||
| for { | |||||
| val, err := ch.Receive() | |||||
| if err != nil { | |||||
| logger.Errorf("command server stopped with error: %s", err.Error()) | |||||
| break | |||||
| } | |||||
| switch val := val.(type) { | |||||
| case error: | |||||
| logger.Errorf("rabbitmq connect with error: %v", val) | |||||
| case int: | |||||
| if val == 1 { | |||||
| break | |||||
| } | |||||
| } | |||||
| } | |||||
| logger.Info("command server stopped") | |||||
| // TODO 仅简单结束了程序 | |||||
| os.Exit(1) | |||||
| } | |||||
| func serveGRPC(s *grpc.Server, lis net.Listener) { | |||||
| logger.Info("start serving grpc") | |||||
| err := s.Serve(lis) | |||||
| if err != nil { | |||||
| logger.Errorf("grpc stopped with error: %s", err.Error()) | |||||
| } | |||||
| logger.Info("grpc stopped") | |||||
| // TODO 仅简单结束了程序 | |||||
| os.Exit(1) | |||||
| } | |||||
| func serveDistLock(svc *distlock.Service) { | |||||
| logger.Info("start serving distlock") | |||||
| err := svc.Serve() | |||||
| if err != nil { | |||||
| logger.Errorf("distlock stopped with error: %s", err.Error()) | |||||
| } | |||||
| logger.Info("distlock stopped") | |||||
| // TODO 仅简单结束了程序 | |||||
| os.Exit(1) | |||||
| } | |||||
| func serveAccessStat(svc *accessstat.AccessStat) { | |||||
| logger.Info("start serving access stat") | |||||
| ch := svc.Start() | |||||
| loop: | |||||
| for { | |||||
| val, err := ch.Receive() | |||||
| if err != nil { | |||||
| logger.Errorf("access stat stopped with error: %v", err) | |||||
| break | |||||
| } | |||||
| switch val := val.(type) { | |||||
| case error: | |||||
| logger.Errorf("access stat stopped with error: %v", val) | |||||
| break loop | |||||
| } | |||||
| } | |||||
| logger.Info("access stat stopped") | |||||
| // TODO 仅简单结束了程序 | |||||
| os.Exit(1) | |||||
| ======= | |||||
| cmd.RootCmd.Execute() | cmd.RootCmd.Execute() | ||||
| >>>>>>> 3fe245a05a09f784fe0081982bca46f964279b4e | |||||
| } | } | ||||
| @@ -3,6 +3,7 @@ package agent | |||||
| import ( | import ( | ||||
| "gitlink.org.cn/cloudream/common/pkgs/mq" | "gitlink.org.cn/cloudream/common/pkgs/mq" | ||||
| cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | ||||
| "gitlink.org.cn/cloudream/common/utils/sync2" | |||||
| mymq "gitlink.org.cn/cloudream/storage/common/pkgs/mq" | mymq "gitlink.org.cn/cloudream/storage/common/pkgs/mq" | ||||
| ) | ) | ||||
| @@ -30,7 +31,7 @@ func NewServer(svc Service, id cdssdk.NodeID, cfg *mymq.Config) (*Server, error) | |||||
| func(msg *mq.Message) (*mq.Message, error) { | func(msg *mq.Message) (*mq.Message, error) { | ||||
| return msgDispatcher.Handle(srv.service, msg) | return msgDispatcher.Handle(srv.service, msg) | ||||
| }, | }, | ||||
| cfg.RabbitMQParam, | |||||
| cfg.Param, | |||||
| ) | ) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -45,7 +46,7 @@ func (s *Server) Stop() { | |||||
| s.rabbitSvr.Close() | s.rabbitSvr.Close() | ||||
| } | } | ||||
| func (s *Server) Start() *sync2.UnboundChannel[mq.RabbitMQLogEvent] { | |||||
| func (s *Server) Start() *sync2.UnboundChannel[mq.RabbitMQServerEvent] { | |||||
| return s.rabbitSvr.Start() | return s.rabbitSvr.Start() | ||||
| } | } | ||||
| @@ -2,15 +2,16 @@ package mq | |||||
| import ( | import ( | ||||
| "fmt" | "fmt" | ||||
| "gitlink.org.cn/cloudream/common/pkgs/mq" | "gitlink.org.cn/cloudream/common/pkgs/mq" | ||||
| ) | ) | ||||
| type Config struct { | type Config struct { | ||||
| Address string `json:"address"` | |||||
| Account string `json:"account"` | |||||
| Password string `json:"password"` | |||||
| VHost string `json:"vhost"` | |||||
| RabbitMQParam mq.RabbitMQParam `json:"param"` | |||||
| Address string `json:"address"` | |||||
| Account string `json:"account"` | |||||
| Password string `json:"password"` | |||||
| VHost string `json:"vhost"` | |||||
| Param mq.RabbitMQParam `json:"param"` | |||||
| } | } | ||||
| func (cfg *Config) MakeConnectingURL() string { | func (cfg *Config) MakeConnectingURL() string { | ||||
| @@ -39,7 +39,7 @@ func NewServer(svc Service, cfg *mymq.Config) (*Server, error) { | |||||
| func(msg *mq.Message) (*mq.Message, error) { | func(msg *mq.Message) (*mq.Message, error) { | ||||
| return msgDispatcher.Handle(srv.service, msg) | return msgDispatcher.Handle(srv.service, msg) | ||||
| }, | }, | ||||
| cfg.RabbitMQParam, | |||||
| cfg.Param, | |||||
| ) | ) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -53,7 +53,7 @@ func (s *Server) Stop() { | |||||
| s.rabbitSvr.Close() | s.rabbitSvr.Close() | ||||
| } | } | ||||
| func (s *Server) Start(cfg mymq.Config) *sync2.UnboundChannel[mq.RabbitMQLogEvent] { | |||||
| func (s *Server) Start(cfg mymq.Config) *sync2.UnboundChannel[mq.RabbitMQServerEvent] { | |||||
| return s.rabbitSvr.Start() | return s.rabbitSvr.Start() | ||||
| } | } | ||||
| @@ -26,7 +26,7 @@ func NewServer(svc Service, cfg *mymq.Config) (*Server, error) { | |||||
| func(msg *mq.Message) (*mq.Message, error) { | func(msg *mq.Message) (*mq.Message, error) { | ||||
| return msgDispatcher.Handle(srv.service, msg) | return msgDispatcher.Handle(srv.service, msg) | ||||
| }, | }, | ||||
| cfg.RabbitMQParam, | |||||
| cfg.Param, | |||||
| ) | ) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -41,7 +41,7 @@ func (s *Server) Stop() { | |||||
| s.rabbitSvr.Close() | s.rabbitSvr.Close() | ||||
| } | } | ||||
| func (s *Server) Start() *sync2.UnboundChannel[mq.RabbitMQLogEvent] { | |||||
| func (s *Server) Start() *sync2.UnboundChannel[mq.RabbitMQServerEvent] { | |||||
| return s.rabbitSvr.Start() | return s.rabbitSvr.Start() | ||||
| } | } | ||||
| @@ -2,14 +2,16 @@ package cmd | |||||
| import ( | import ( | ||||
| "fmt" | "fmt" | ||||
| stgmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq" | |||||
| "os" | "os" | ||||
| stgmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq" | |||||
| "gitlink.org.cn/cloudream/common/pkgs/logger" | "gitlink.org.cn/cloudream/common/pkgs/logger" | ||||
| "gitlink.org.cn/cloudream/common/pkgs/mq" | |||||
| "gitlink.org.cn/cloudream/storage/common/pkgs/db2" | "gitlink.org.cn/cloudream/storage/common/pkgs/db2" | ||||
| coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator" | coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator" | ||||
| "gitlink.org.cn/cloudream/storage/coordinator/internal/config" | "gitlink.org.cn/cloudream/storage/coordinator/internal/config" | ||||
| "gitlink.org.cn/cloudream/storage/coordinator/internal/mq" | |||||
| mymq "gitlink.org.cn/cloudream/storage/coordinator/internal/mq" | |||||
| ) | ) | ||||
| func serve(configPath string) { | func serve(configPath string) { | ||||
| @@ -30,7 +32,7 @@ func serve(configPath string) { | |||||
| logger.Fatalf("new db2 failed, err: %s", err.Error()) | logger.Fatalf("new db2 failed, err: %s", err.Error()) | ||||
| } | } | ||||
| coorSvr, err := coormq.NewServer(mq.NewService(db2), &config.Cfg().RabbitMQ) | |||||
| coorSvr, err := coormq.NewServer(mymq.NewService(db2), &config.Cfg().RabbitMQ) | |||||
| if err != nil { | if err != nil { | ||||
| logger.Fatalf("new coordinator server failed, err: %s", err.Error()) | logger.Fatalf("new coordinator server failed, err: %s", err.Error()) | ||||
| } | } | ||||
| @@ -55,6 +57,7 @@ func serveCoorServer(server *coormq.Server, cfg stgmq.Config) { | |||||
| os.Exit(1) | os.Exit(1) | ||||
| } | } | ||||
| loop: | |||||
| for { | for { | ||||
| val, err := ch.Receive() | val, err := ch.Receive() | ||||
| if err != nil { | if err != nil { | ||||
| @@ -65,8 +68,13 @@ func serveCoorServer(server *coormq.Server, cfg stgmq.Config) { | |||||
| switch val := val.(type) { | switch val := val.(type) { | ||||
| case error: | case error: | ||||
| logger.Errorf("rabbitmq connect with error: %v", val) | logger.Errorf("rabbitmq connect with error: %v", val) | ||||
| case int: | |||||
| break | |||||
| case mq.ServerExit: | |||||
| if val.Error != nil { | |||||
| logger.Errorf("rabbitmq server exit with error: %v", val.Error) | |||||
| } else { | |||||
| logger.Info("rabbitmq server exit") | |||||
| } | |||||
| break loop | |||||
| } | } | ||||
| } | } | ||||
| logger.Info("command server stopped") | logger.Info("command server stopped") | ||||
| @@ -2,6 +2,7 @@ package mq | |||||
| import ( | import ( | ||||
| "fmt" | "fmt" | ||||
| "gitlink.org.cn/cloudream/storage/common/pkgs/db2" | "gitlink.org.cn/cloudream/storage/common/pkgs/db2" | ||||
| "gitlink.org.cn/cloudream/common/consts/errorcode" | "gitlink.org.cn/cloudream/common/consts/errorcode" | ||||
| @@ -9,7 +10,6 @@ import ( | |||||
| "gitlink.org.cn/cloudream/common/pkgs/mq" | "gitlink.org.cn/cloudream/common/pkgs/mq" | ||||
| cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | ||||
| stgmod "gitlink.org.cn/cloudream/storage/common/models" | stgmod "gitlink.org.cn/cloudream/storage/common/models" | ||||
| "gitlink.org.cn/cloudream/storage/common/pkgs/db2" | |||||
| coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator" | coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator" | ||||
| ) | ) | ||||
| @@ -5,9 +5,11 @@ go 1.20 | |||||
| replace gitlink.org.cn/cloudream/common v0.0.0 => ../common | replace gitlink.org.cn/cloudream/common v0.0.0 => ../common | ||||
| require ( | require ( | ||||
| github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible | |||||
| github.com/gin-gonic/gin v1.7.7 | github.com/gin-gonic/gin v1.7.7 | ||||
| github.com/go-sql-driver/mysql v1.7.1 | github.com/go-sql-driver/mysql v1.7.1 | ||||
| github.com/hashicorp/golang-lru/v2 v2.0.5 | github.com/hashicorp/golang-lru/v2 v2.0.5 | ||||
| github.com/huaweicloud/huaweicloud-sdk-go-obs v3.24.9+incompatible | |||||
| github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf | github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf | ||||
| github.com/jedib0t/go-pretty/v6 v6.4.7 | github.com/jedib0t/go-pretty/v6 v6.4.7 | ||||
| github.com/klauspost/reedsolomon v1.11.8 | github.com/klauspost/reedsolomon v1.11.8 | ||||
| @@ -15,6 +17,7 @@ require ( | |||||
| github.com/samber/lo v1.38.1 | github.com/samber/lo v1.38.1 | ||||
| github.com/smartystreets/goconvey v1.8.1 | github.com/smartystreets/goconvey v1.8.1 | ||||
| github.com/spf13/cobra v1.8.0 | github.com/spf13/cobra v1.8.0 | ||||
| github.com/tencentyun/cos-go-sdk-v5 v0.7.56 | |||||
| gitlink.org.cn/cloudream/common v0.0.0 | gitlink.org.cn/cloudream/common v0.0.0 | ||||
| google.golang.org/grpc v1.57.0 | google.golang.org/grpc v1.57.0 | ||||
| google.golang.org/protobuf v1.31.0 | google.golang.org/protobuf v1.31.0 | ||||
| @@ -22,10 +25,14 @@ require ( | |||||
| ) | ) | ||||
| require ( | require ( | ||||
| github.com/clbanning/mxj v1.8.4 // indirect | |||||
| github.com/google/go-querystring v1.0.0 // indirect | |||||
| github.com/google/uuid v1.3.1 // indirect | github.com/google/uuid v1.3.1 // indirect | ||||
| github.com/jinzhu/inflection v1.0.0 // indirect | github.com/jinzhu/inflection v1.0.0 // indirect | ||||
| github.com/jinzhu/now v1.1.5 // indirect | github.com/jinzhu/now v1.1.5 // indirect | ||||
| github.com/mozillazg/go-httpheader v0.2.1 // indirect | |||||
| github.com/stretchr/testify v1.8.4 // indirect | github.com/stretchr/testify v1.8.4 // indirect | ||||
| golang.org/x/time v0.7.0 // indirect | |||||
| gopkg.in/yaml.v2 v2.4.0 // indirect | gopkg.in/yaml.v2 v2.4.0 // indirect | ||||
| ) | ) | ||||
| @@ -1,6 +1,11 @@ | |||||
| github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM= | |||||
| github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g= | |||||
| github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= | |||||
| github.com/antonfisher/nested-logrus-formatter v1.3.1 h1:NFJIr+pzwv5QLHTPyKz9UMEoHck02Q9L0FP13b/xSbQ= | github.com/antonfisher/nested-logrus-formatter v1.3.1 h1:NFJIr+pzwv5QLHTPyKz9UMEoHck02Q9L0FP13b/xSbQ= | ||||
| github.com/antonfisher/nested-logrus-formatter v1.3.1/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA= | github.com/antonfisher/nested-logrus-formatter v1.3.1/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA= | ||||
| github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= | github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= | ||||
| github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= | |||||
| github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= | |||||
| github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= | github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= | ||||
| github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | ||||
| github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= | github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= | ||||
| @@ -28,6 +33,7 @@ github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9 | |||||
| github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= | ||||
| github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | ||||
| github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | ||||
| github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= | |||||
| github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= | github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= | ||||
| github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||||
| github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||||
| @@ -35,7 +41,10 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu | |||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | ||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||
| github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= | |||||
| github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | |||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||
| github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | |||||
| github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= | github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= | ||||
| github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= | github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= | ||||
| @@ -47,6 +56,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l | |||||
| github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= | github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= | ||||
| github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= | github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= | ||||
| github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= | github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= | ||||
| github.com/huaweicloud/huaweicloud-sdk-go-obs v3.24.9+incompatible h1:XQVXdk+WAJ4fSNB6mMRuYNvFWou7BZs6SZB925hPrnk= | |||||
| github.com/huaweicloud/huaweicloud-sdk-go-obs v3.24.9+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s= | |||||
| github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= | github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= | ||||
| github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= | github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= | ||||
| github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= | github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= | ||||
| @@ -81,6 +92,7 @@ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APP | |||||
| github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||||
| github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= | github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= | ||||
| github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= | github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= | ||||
| github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | |||||
| github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | ||||
| github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
| github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||
| @@ -89,6 +101,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ | |||||
| github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | ||||
| github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | ||||
| github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||||
| github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ= | |||||
| github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= | |||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
| github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= | github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| @@ -123,6 +137,10 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO | |||||
| github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||||
| github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= | |||||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0= | |||||
| github.com/tencentyun/cos-go-sdk-v5 v0.7.56 h1:fOA3l3XbVN2kTjQKYPvhDms0Fq8zDcinO3boXodFaLw= | |||||
| github.com/tencentyun/cos-go-sdk-v5 v0.7.56/go.mod h1:8+hG+mQMuRP/OIS9d83syAvXvrMj9HhkND6Q1fLghw0= | |||||
| github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= | github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= | ||||
| github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= | github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= | ||||
| github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= | github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= | ||||
| @@ -186,6 +204,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | |||||
| golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= | golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= | ||||
| golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= | ||||
| golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= | |||||
| golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= | |||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||