From c4d2eef6743fae7a6db9689eaa682bbb1b8e7cef Mon Sep 17 00:00:00 2001 From: confoc Date: Thu, 16 May 2024 10:39:59 +0800 Subject: [PATCH 1/7] all commit --- cmd/gtctl/cluster_connect.go | 1 + cmd/gtctl/cluster_create.go | 18 ++++++++++++++---- cmd/gtctl/main.go | 4 ++-- pkg/artifacts/manager_test.go | 1 + pkg/cluster/baremetal/cluster.go | 13 +++++++++++++ pkg/cluster/baremetal/create.go | 7 ++++--- pkg/cluster/baremetal/get.go | 8 +++++--- pkg/cluster/baremetal/get_test.go | 2 +- pkg/components/metasrv.go | 22 ++++++++++++++-------- pkg/plugins/manager.go | 21 ++++++++++++--------- 10 files changed, 67 insertions(+), 30 deletions(-) diff --git a/cmd/gtctl/cluster_connect.go b/cmd/gtctl/cluster_connect.go index e34a574e..7891cbec 100644 --- a/cmd/gtctl/cluster_connect.go +++ b/cmd/gtctl/cluster_connect.go @@ -32,6 +32,7 @@ type clusterConnectCliOptions struct { Protocol string } +// 利用cobra.Command来设计命令 func NewConnectCommand(l logger.Logger) *cobra.Command { var options clusterConnectCliOptions diff --git a/cmd/gtctl/cluster_create.go b/cmd/gtctl/cluster_create.go index 7b18567b..bf82f215 100644 --- a/cmd/gtctl/cluster_create.go +++ b/cmd/gtctl/cluster_create.go @@ -62,6 +62,8 @@ type clusterCreateCliOptions struct { Config string GreptimeBinVersion string EnableCache bool + //***************Add******************// + EnableEtcd bool // Common options. Timeout int @@ -109,6 +111,8 @@ func NewCreateClusterCommand(l logger.Logger) *cobra.Command { cmd.Flags().StringVar(&options.GreptimeDBClusterValuesFile, "greptimedb-cluster-values-file", "", "The values file for greptimedb cluster.") cmd.Flags().StringVar(&options.EtcdClusterValuesFile, "etcd-cluster-values-file", "", "The values file for etcd cluster.") cmd.Flags().StringVar(&options.GreptimeDBOperatorValuesFile, "greptimedb-operator-values-file", "", "The values file for greptimedb operator.") + //***************Add******************// + cmd.Flags().BoolVar(&options.EnableEtcd, "memory-meta-storage", true, "Bootstrap the whole cluster without installing etcd for testing purposes through using the memory storage of metasrv in bare-metal mode.") return cmd } @@ -177,12 +181,17 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger Spinner: spinner, } + //options存储命令行选项参数 + //如果options里面的BareMetal参数为true的话,执行该循环 var cluster opt.Operations if options.BareMetal { l.V(0).Infof("Creating GreptimeDB cluster '%s' on bare-metal", logger.Bold(clusterName)) var opts []baremetal.Option opts = append(opts, baremetal.WithEnableCache(options.EnableCache)) + //********************Add****************// + opts = append(opts, baremetal.WithEnableEtcd(options.EnableEtcd)) + if len(options.GreptimeBinVersion) > 0 { opts = append(opts, baremetal.WithGreptimeVersion(options.GreptimeBinVersion)) } @@ -199,7 +208,7 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger opts = append(opts, baremetal.WithReplaceConfig(&cfg)) } - cluster, err = baremetal.NewCluster(l, clusterName, opts...) + cluster, err = baremetal.NewCluster(l, clusterName, opts...) //现在我们创建了这个cluster结构,enableEtcd随着NewCluster一起传入cluster中 if err != nil { return err } @@ -214,7 +223,8 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger } } - if err = cluster.Create(ctx, createOptions); err != nil { + //我们在这里调用了cluster.create + if err = cluster.Create(ctx, createOptions); err != nil { //调用cluster.create,转到create函数 return err } @@ -223,8 +233,8 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger } if options.BareMetal { - bm, _ := cluster.(*baremetal.Cluster) - if err = bm.Wait(ctx, false); err != nil { + bm, _ := cluster.(*baremetal.Cluster) //数据断言 + if err = bm.Wait(ctx, false); err != nil { //调用cluster.Wait return err } } diff --git a/cmd/gtctl/main.go b/cmd/gtctl/main.go index 51623635..1fa5a66a 100644 --- a/cmd/gtctl/main.go +++ b/cmd/gtctl/main.go @@ -79,14 +79,14 @@ func main() { } if len(os.Args) > 1 && pm.ShouldRun(os.Args[1]) { - if err = pm.Run(os.Args[1:]); err != nil { + if err = pm.Run(os.Args[1:]); err != nil { //err = run了一个命令行参数 fmt.Println(err) os.Exit(1) } os.Exit(0) } - if err = NewRootCommand().Execute(); err != nil { + if err = NewRootCommand().Execute(); err != nil { //执行了NewRootCommand fmt.Println(err) os.Exit(1) } diff --git a/pkg/artifacts/manager_test.go b/pkg/artifacts/manager_test.go index 3184eeb3..97edbd7d 100644 --- a/pkg/artifacts/manager_test.go +++ b/pkg/artifacts/manager_test.go @@ -268,6 +268,7 @@ func TestArtifactsCache(t *testing.T) { } } +// 用于生成目标文件夹的目录 func destDir(workingDir string, src *Source) string { var artifactsDir string diff --git a/pkg/cluster/baremetal/cluster.go b/pkg/cluster/baremetal/cluster.go index af48bdc9..860d1e46 100644 --- a/pkg/cluster/baremetal/cluster.go +++ b/pkg/cluster/baremetal/cluster.go @@ -30,10 +30,12 @@ import ( "github.com/GreptimeTeam/gtctl/pkg/metadata" ) +// 创建了cluster,也就是集群,这个集群可以进行一系列动作 type Cluster struct { config *config.BareMetalClusterConfig createNoDirs bool enableCache bool + enableEtcd bool am artifacts.Manager mm metadata.Manager @@ -53,6 +55,7 @@ type ClusterComponents struct { Etcd components.ClusterComponent } +// 定义了ClusterComponents方法,来创建了这个接口指针 func NewClusterComponents(config *config.BareMetalClusterComponentsConfig, workingDirs components.WorkingDirs, wg *sync.WaitGroup, logger logger.Logger) *ClusterComponents { return &ClusterComponents{ @@ -84,6 +87,16 @@ func WithEnableCache(enableCache bool) Option { } } +//****************************************// +//******************Add*******************// +//****************************************// + +func WithEnableEtcd(enableEtcd bool) Option { + return func(c *Cluster) { + c.enableEtcd = enableEtcd + } +} + func WithCreateNoDirs() Option { return func(c *Cluster) { c.createNoDirs = true diff --git a/pkg/cluster/baremetal/create.go b/pkg/cluster/baremetal/create.go index 086edbd3..61cd78b0 100644 --- a/pkg/cluster/baremetal/create.go +++ b/pkg/cluster/baremetal/create.go @@ -51,9 +51,10 @@ func (c *Cluster) Create(ctx context.Context, options *opt.CreateOptions) error } return nil } - - if err := withSpinner("Etcd Cluster", c.createEtcdCluster); err != nil { - return err + if c.enableEtcd { + if err := withSpinner("Etcd Cluster", c.createEtcdCluster); err != nil { //这里调用了c.createEtcdCluster,创建Etcd的集群,所以如果选项成立的话,这里就不执行 + return err + } } if err := withSpinner("GreptimeDB Cluster", c.createCluster); err != nil { if err := c.Wait(ctx, true); err != nil { diff --git a/pkg/cluster/baremetal/get.go b/pkg/cluster/baremetal/get.go index 8c358136..f79ead09 100644 --- a/pkg/cluster/baremetal/get.go +++ b/pkg/cluster/baremetal/get.go @@ -45,8 +45,10 @@ func (c *Cluster) Get(ctx context.Context, options *opt.GetOptions) error { return nil } +//利用cluster将yaml的数据存储下来 + func (c *Cluster) get(_ context.Context, options *opt.GetOptions) (*cfg.BareMetalClusterMetadata, error) { - csd := c.mm.GetClusterScopeDirs() + csd := c.mm.GetClusterScopeDirs() //返回当前集群的目录 _, err := os.Stat(csd.BaseDir) if os.IsNotExist(err) { return nil, fmt.Errorf("cluster %s is not exist", options.Name) @@ -64,11 +66,11 @@ func (c *Cluster) get(_ context.Context, options *opt.GetOptions) (*cfg.BareMeta } var cluster cfg.BareMetalClusterMetadata - in, err := os.ReadFile(csd.ConfigPath) + in, err := os.ReadFile(csd.ConfigPath) //读取csd的配置路径路径上的配置文件 if err != nil { return nil, err } - if err = yaml.Unmarshal(in, &cluster); err != nil { + if err = yaml.Unmarshal(in, &cluster); err != nil { //将in中的yaml数据转化为go数据传入cluster中 return nil, err } diff --git a/pkg/cluster/baremetal/get_test.go b/pkg/cluster/baremetal/get_test.go index 59c39b03..291eabd8 100644 --- a/pkg/cluster/baremetal/get_test.go +++ b/pkg/cluster/baremetal/get_test.go @@ -31,7 +31,7 @@ func TestCollectPidsForBareMetal(t *testing.T) { "c": "789", } - ret := collectPidsForBareMetal(pidsPath) + ret := collectPidsForBareMetal(pidsPath) //用pidspath进行测试,收集结果 assert.Equal(t, want, ret) } diff --git a/pkg/components/metasrv.go b/pkg/components/metasrv.go index f99f6fed..23e2df4f 100644 --- a/pkg/components/metasrv.go +++ b/pkg/components/metasrv.go @@ -40,6 +40,7 @@ type metaSrv struct { allocatedDirs } +// 创建一个ClusterComponent接口 func NewMetaSrv(config *config.MetaSrv, workingDirs WorkingDirs, wg *sync.WaitGroup, logger logger.Logger) ClusterComponent { return &metaSrv{ @@ -54,8 +55,9 @@ func (m *metaSrv) Name() string { return "metasrv" } +// 配置初始值 func (m *metaSrv) Start(ctx context.Context, stop context.CancelFunc, binary string) error { - // Default bind address for meta srv. + // Default bind address for meta srv.服务器接受客户端请求的网络地址,如果yaml文件没有设置的话,就使用127.0.0.1:3002,反之使用yaml文件 bindAddr := net.JoinHostPort("127.0.0.1", "3002") if len(m.config.BindAddr) > 0 { bindAddr = m.config.BindAddr @@ -107,14 +109,16 @@ CHECKER: return nil } +// 启动Meta服务的命令行参数,返回args func (m *metaSrv) BuildArgs(params ...interface{}) []string { - logLevel := m.config.LogLevel + //配置日志级别 + logLevel := m.config.LogLevel //yaml文件中定义的日志级别 if logLevel == "" { - logLevel = DefaultLogLevel + logLevel = DefaultLogLevel //info级别,一般的信息性消息,用于记录程序的正常运行状态 } - nodeID_, bindAddr_ := params[0], params[1] - nodeID := nodeID_.(int) + nodeID_, bindAddr_ := params[0], params[1] //赋予了两个参数空接口 + nodeID := nodeID_.(int) //类型断言,这时候nodeID存储的是int类型 bindAddr := bindAddr_.(string) args := []string{ @@ -123,16 +127,18 @@ func (m *metaSrv) BuildArgs(params ...interface{}) []string { fmt.Sprintf("--store-addr=%s", m.config.StoreAddr), fmt.Sprintf("--server-addr=%s", m.config.ServerAddr), } - args = GenerateAddrArg("--http-addr", m.config.HTTPAddr, nodeID, args) + args = GenerateAddrArg("--http-addr", m.config.HTTPAddr, nodeID, args) //这里调用了上一个args + args = GenerateAddrArg("--bind-addr", bindAddr, nodeID, args) if len(m.config.Config) > 0 { - args = append(args, fmt.Sprintf("-c=%s", m.config.Config)) + args = append(args, fmt.Sprintf("-c=%s", m.config.Config)) //这里最终形成了一个args,这是一个字符串数组 } - return args + return args //将args给返回 } +// 检查这个服务是否还在运行 func (m *metaSrv) IsRunning(_ context.Context) bool { for i := 0; i < m.config.Replicas; i++ { addr := FormatAddrArg(m.config.HTTPAddr, i) diff --git a/pkg/plugins/manager.go b/pkg/plugins/manager.go index d29b0361..67adb80b 100644 --- a/pkg/plugins/manager.go +++ b/pkg/plugins/manager.go @@ -26,6 +26,8 @@ import ( fileutils "github.com/GreptimeTeam/gtctl/pkg/utils/file" ) +//默认的manage + const ( // DefaultPluginPrefix is the default prefix for the plugin binary name. DefaultPluginPrefix = "gtctl-" @@ -38,8 +40,8 @@ const ( // Manager manages and executes the plugins. type Manager struct { - prefix string - searchPaths []string + prefix string //前缀 + searchPaths []string //搜索路径 } func NewManager() (*Manager, error) { @@ -48,9 +50,9 @@ func NewManager() (*Manager, error) { searchPaths: []string{}, } - pluginSearchPaths := os.Getenv(PluginSearchPathsEnvKey) + pluginSearchPaths := os.Getenv(PluginSearchPathsEnvKey) //这行代码从环境变量中获取插件搜索路径 if len(pluginSearchPaths) > 0 { - m.searchPaths = append(m.searchPaths, strings.Split(pluginSearchPaths, ":")...) + m.searchPaths = append(m.searchPaths, strings.Split(pluginSearchPaths, ":")...) //将pluginSearchPaths以:进行分离,然后添加到path中去 } else { // Search the current working directory. pwd, err := os.Getwd() @@ -62,7 +64,7 @@ func NewManager() (*Manager, error) { // Search the $PATH. pathEnv := os.Getenv("PATH") if len(pathEnv) > 0 { - m.searchPaths = append(m.searchPaths, strings.Split(pathEnv, ":")...) + m.searchPaths = append(m.searchPaths, strings.Split(pathEnv, ":")...) //再添加一个patheenv } } @@ -76,21 +78,22 @@ func (m *Manager) ShouldRun(name string) bool { } // Run searches for the plugin and runs it. +// 输入一系列字符串,第一个字符串为地址,后面的字符串为指令 func (m *Manager) Run(args []string) error { if len(args) < 1 { return nil // No arguments provided, normal help message will be shown. } - pluginPath, err := m.searchPlugins(args[0]) + pluginPath, err := m.searchPlugins(args[0]) //设定路径 if err != nil { return err } - pluginCmd := exec.Command(pluginPath, args[1:]...) - pluginCmd.Stdin = os.Stdin + pluginCmd := exec.Command(pluginPath, args[1:]...) //创建了一个外部命令,所以关键在这个输入的字符串和地址 + pluginCmd.Stdin = os.Stdin //pluginCmd就是一个命令 pluginCmd.Stdout = os.Stdout pluginCmd.Stderr = os.Stderr - if err := pluginCmd.Run(); err != nil { + if err := pluginCmd.Run(); err != nil { //跑这个命令 return fmt.Errorf("failed to run plugin '%s': %v", pluginPath, err) } From 4022ec4ca05b883e8ce4085aa9ba3790e2490d6f Mon Sep 17 00:00:00 2001 From: confoc Date: Thu, 16 May 2024 15:22:02 +0800 Subject: [PATCH 2/7] test --- cmd/gtctl/cluster_create.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/gtctl/cluster_create.go b/cmd/gtctl/cluster_create.go index bf82f215..432ae33d 100644 --- a/cmd/gtctl/cluster_create.go +++ b/cmd/gtctl/cluster_create.go @@ -62,6 +62,7 @@ type clusterCreateCliOptions struct { Config string GreptimeBinVersion string EnableCache bool + //************************************// //***************Add******************// EnableEtcd bool From 706e0224377adb42c882d420a9fb2908e3454893 Mon Sep 17 00:00:00 2001 From: confoc Date: Thu, 16 May 2024 16:38:09 +0800 Subject: [PATCH 3/7] pret --- cmd/gtctl/cluster_connect.go | 1 - cmd/gtctl/cluster_create.go | 17 +++++------------ cmd/gtctl/main.go | 4 ++-- pkg/artifacts/manager_test.go | 1 - pkg/cluster/baremetal/cluster.go | 6 ------ pkg/cluster/baremetal/create.go | 2 +- pkg/cluster/baremetal/get.go | 8 +++----- pkg/cluster/baremetal/get_test.go | 2 +- pkg/components/metasrv.go | 22 +++++++++------------- pkg/plugins/manager.go | 21 +++++++++------------ 10 files changed, 30 insertions(+), 54 deletions(-) diff --git a/cmd/gtctl/cluster_connect.go b/cmd/gtctl/cluster_connect.go index 7891cbec..e34a574e 100644 --- a/cmd/gtctl/cluster_connect.go +++ b/cmd/gtctl/cluster_connect.go @@ -32,7 +32,6 @@ type clusterConnectCliOptions struct { Protocol string } -// 利用cobra.Command来设计命令 func NewConnectCommand(l logger.Logger) *cobra.Command { var options clusterConnectCliOptions diff --git a/cmd/gtctl/cluster_create.go b/cmd/gtctl/cluster_create.go index 432ae33d..94171bf9 100644 --- a/cmd/gtctl/cluster_create.go +++ b/cmd/gtctl/cluster_create.go @@ -62,9 +62,7 @@ type clusterCreateCliOptions struct { Config string GreptimeBinVersion string EnableCache bool - //************************************// - //***************Add******************// - EnableEtcd bool + EnableEtcd bool // Common options. Timeout int @@ -112,7 +110,6 @@ func NewCreateClusterCommand(l logger.Logger) *cobra.Command { cmd.Flags().StringVar(&options.GreptimeDBClusterValuesFile, "greptimedb-cluster-values-file", "", "The values file for greptimedb cluster.") cmd.Flags().StringVar(&options.EtcdClusterValuesFile, "etcd-cluster-values-file", "", "The values file for etcd cluster.") cmd.Flags().StringVar(&options.GreptimeDBOperatorValuesFile, "greptimedb-operator-values-file", "", "The values file for greptimedb operator.") - //***************Add******************// cmd.Flags().BoolVar(&options.EnableEtcd, "memory-meta-storage", true, "Bootstrap the whole cluster without installing etcd for testing purposes through using the memory storage of metasrv in bare-metal mode.") return cmd @@ -182,15 +179,12 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger Spinner: spinner, } - //options存储命令行选项参数 - //如果options里面的BareMetal参数为true的话,执行该循环 var cluster opt.Operations if options.BareMetal { l.V(0).Infof("Creating GreptimeDB cluster '%s' on bare-metal", logger.Bold(clusterName)) var opts []baremetal.Option opts = append(opts, baremetal.WithEnableCache(options.EnableCache)) - //********************Add****************// opts = append(opts, baremetal.WithEnableEtcd(options.EnableEtcd)) if len(options.GreptimeBinVersion) > 0 { @@ -209,7 +203,7 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger opts = append(opts, baremetal.WithReplaceConfig(&cfg)) } - cluster, err = baremetal.NewCluster(l, clusterName, opts...) //现在我们创建了这个cluster结构,enableEtcd随着NewCluster一起传入cluster中 + cluster, err = baremetal.NewCluster(l, clusterName, opts...) if err != nil { return err } @@ -224,8 +218,7 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger } } - //我们在这里调用了cluster.create - if err = cluster.Create(ctx, createOptions); err != nil { //调用cluster.create,转到create函数 + if err = cluster.Create(ctx, createOptions); err != nil { return err } @@ -234,8 +227,8 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger } if options.BareMetal { - bm, _ := cluster.(*baremetal.Cluster) //数据断言 - if err = bm.Wait(ctx, false); err != nil { //调用cluster.Wait + bm, _ := cluster.(*baremetal.Cluster) + if err = bm.Wait(ctx, false); err != nil { return err } } diff --git a/cmd/gtctl/main.go b/cmd/gtctl/main.go index 1fa5a66a..51623635 100644 --- a/cmd/gtctl/main.go +++ b/cmd/gtctl/main.go @@ -79,14 +79,14 @@ func main() { } if len(os.Args) > 1 && pm.ShouldRun(os.Args[1]) { - if err = pm.Run(os.Args[1:]); err != nil { //err = run了一个命令行参数 + if err = pm.Run(os.Args[1:]); err != nil { fmt.Println(err) os.Exit(1) } os.Exit(0) } - if err = NewRootCommand().Execute(); err != nil { //执行了NewRootCommand + if err = NewRootCommand().Execute(); err != nil { fmt.Println(err) os.Exit(1) } diff --git a/pkg/artifacts/manager_test.go b/pkg/artifacts/manager_test.go index 97edbd7d..3184eeb3 100644 --- a/pkg/artifacts/manager_test.go +++ b/pkg/artifacts/manager_test.go @@ -268,7 +268,6 @@ func TestArtifactsCache(t *testing.T) { } } -// 用于生成目标文件夹的目录 func destDir(workingDir string, src *Source) string { var artifactsDir string diff --git a/pkg/cluster/baremetal/cluster.go b/pkg/cluster/baremetal/cluster.go index 860d1e46..34aaa519 100644 --- a/pkg/cluster/baremetal/cluster.go +++ b/pkg/cluster/baremetal/cluster.go @@ -30,7 +30,6 @@ import ( "github.com/GreptimeTeam/gtctl/pkg/metadata" ) -// 创建了cluster,也就是集群,这个集群可以进行一系列动作 type Cluster struct { config *config.BareMetalClusterConfig createNoDirs bool @@ -55,7 +54,6 @@ type ClusterComponents struct { Etcd components.ClusterComponent } -// 定义了ClusterComponents方法,来创建了这个接口指针 func NewClusterComponents(config *config.BareMetalClusterComponentsConfig, workingDirs components.WorkingDirs, wg *sync.WaitGroup, logger logger.Logger) *ClusterComponents { return &ClusterComponents{ @@ -87,10 +85,6 @@ func WithEnableCache(enableCache bool) Option { } } -//****************************************// -//******************Add*******************// -//****************************************// - func WithEnableEtcd(enableEtcd bool) Option { return func(c *Cluster) { c.enableEtcd = enableEtcd diff --git a/pkg/cluster/baremetal/create.go b/pkg/cluster/baremetal/create.go index 61cd78b0..7331483d 100644 --- a/pkg/cluster/baremetal/create.go +++ b/pkg/cluster/baremetal/create.go @@ -52,7 +52,7 @@ func (c *Cluster) Create(ctx context.Context, options *opt.CreateOptions) error return nil } if c.enableEtcd { - if err := withSpinner("Etcd Cluster", c.createEtcdCluster); err != nil { //这里调用了c.createEtcdCluster,创建Etcd的集群,所以如果选项成立的话,这里就不执行 + if err := withSpinner("Etcd Cluster", c.createEtcdCluster); err != nil { return err } } diff --git a/pkg/cluster/baremetal/get.go b/pkg/cluster/baremetal/get.go index f79ead09..8c358136 100644 --- a/pkg/cluster/baremetal/get.go +++ b/pkg/cluster/baremetal/get.go @@ -45,10 +45,8 @@ func (c *Cluster) Get(ctx context.Context, options *opt.GetOptions) error { return nil } -//利用cluster将yaml的数据存储下来 - func (c *Cluster) get(_ context.Context, options *opt.GetOptions) (*cfg.BareMetalClusterMetadata, error) { - csd := c.mm.GetClusterScopeDirs() //返回当前集群的目录 + csd := c.mm.GetClusterScopeDirs() _, err := os.Stat(csd.BaseDir) if os.IsNotExist(err) { return nil, fmt.Errorf("cluster %s is not exist", options.Name) @@ -66,11 +64,11 @@ func (c *Cluster) get(_ context.Context, options *opt.GetOptions) (*cfg.BareMeta } var cluster cfg.BareMetalClusterMetadata - in, err := os.ReadFile(csd.ConfigPath) //读取csd的配置路径路径上的配置文件 + in, err := os.ReadFile(csd.ConfigPath) if err != nil { return nil, err } - if err = yaml.Unmarshal(in, &cluster); err != nil { //将in中的yaml数据转化为go数据传入cluster中 + if err = yaml.Unmarshal(in, &cluster); err != nil { return nil, err } diff --git a/pkg/cluster/baremetal/get_test.go b/pkg/cluster/baremetal/get_test.go index 291eabd8..59c39b03 100644 --- a/pkg/cluster/baremetal/get_test.go +++ b/pkg/cluster/baremetal/get_test.go @@ -31,7 +31,7 @@ func TestCollectPidsForBareMetal(t *testing.T) { "c": "789", } - ret := collectPidsForBareMetal(pidsPath) //用pidspath进行测试,收集结果 + ret := collectPidsForBareMetal(pidsPath) assert.Equal(t, want, ret) } diff --git a/pkg/components/metasrv.go b/pkg/components/metasrv.go index 23e2df4f..05f20c41 100644 --- a/pkg/components/metasrv.go +++ b/pkg/components/metasrv.go @@ -40,7 +40,6 @@ type metaSrv struct { allocatedDirs } -// 创建一个ClusterComponent接口 func NewMetaSrv(config *config.MetaSrv, workingDirs WorkingDirs, wg *sync.WaitGroup, logger logger.Logger) ClusterComponent { return &metaSrv{ @@ -55,9 +54,8 @@ func (m *metaSrv) Name() string { return "metasrv" } -// 配置初始值 func (m *metaSrv) Start(ctx context.Context, stop context.CancelFunc, binary string) error { - // Default bind address for meta srv.服务器接受客户端请求的网络地址,如果yaml文件没有设置的话,就使用127.0.0.1:3002,反之使用yaml文件 + // Default bind address for meta srv. bindAddr := net.JoinHostPort("127.0.0.1", "3002") if len(m.config.BindAddr) > 0 { bindAddr = m.config.BindAddr @@ -109,16 +107,15 @@ CHECKER: return nil } -// 启动Meta服务的命令行参数,返回args func (m *metaSrv) BuildArgs(params ...interface{}) []string { - //配置日志级别 - logLevel := m.config.LogLevel //yaml文件中定义的日志级别 + + logLevel := m.config.LogLevel if logLevel == "" { - logLevel = DefaultLogLevel //info级别,一般的信息性消息,用于记录程序的正常运行状态 + logLevel = DefaultLogLevel } - nodeID_, bindAddr_ := params[0], params[1] //赋予了两个参数空接口 - nodeID := nodeID_.(int) //类型断言,这时候nodeID存储的是int类型 + nodeID_, bindAddr_ := params[0], params[1] + nodeID := nodeID_.(int) bindAddr := bindAddr_.(string) args := []string{ @@ -127,18 +124,17 @@ func (m *metaSrv) BuildArgs(params ...interface{}) []string { fmt.Sprintf("--store-addr=%s", m.config.StoreAddr), fmt.Sprintf("--server-addr=%s", m.config.ServerAddr), } - args = GenerateAddrArg("--http-addr", m.config.HTTPAddr, nodeID, args) //这里调用了上一个args + args = GenerateAddrArg("--http-addr", m.config.HTTPAddr, nodeID, args) args = GenerateAddrArg("--bind-addr", bindAddr, nodeID, args) if len(m.config.Config) > 0 { - args = append(args, fmt.Sprintf("-c=%s", m.config.Config)) //这里最终形成了一个args,这是一个字符串数组 + args = append(args, fmt.Sprintf("-c=%s", m.config.Config)) } - return args //将args给返回 + return args } -// 检查这个服务是否还在运行 func (m *metaSrv) IsRunning(_ context.Context) bool { for i := 0; i < m.config.Replicas; i++ { addr := FormatAddrArg(m.config.HTTPAddr, i) diff --git a/pkg/plugins/manager.go b/pkg/plugins/manager.go index 67adb80b..d29b0361 100644 --- a/pkg/plugins/manager.go +++ b/pkg/plugins/manager.go @@ -26,8 +26,6 @@ import ( fileutils "github.com/GreptimeTeam/gtctl/pkg/utils/file" ) -//默认的manage - const ( // DefaultPluginPrefix is the default prefix for the plugin binary name. DefaultPluginPrefix = "gtctl-" @@ -40,8 +38,8 @@ const ( // Manager manages and executes the plugins. type Manager struct { - prefix string //前缀 - searchPaths []string //搜索路径 + prefix string + searchPaths []string } func NewManager() (*Manager, error) { @@ -50,9 +48,9 @@ func NewManager() (*Manager, error) { searchPaths: []string{}, } - pluginSearchPaths := os.Getenv(PluginSearchPathsEnvKey) //这行代码从环境变量中获取插件搜索路径 + pluginSearchPaths := os.Getenv(PluginSearchPathsEnvKey) if len(pluginSearchPaths) > 0 { - m.searchPaths = append(m.searchPaths, strings.Split(pluginSearchPaths, ":")...) //将pluginSearchPaths以:进行分离,然后添加到path中去 + m.searchPaths = append(m.searchPaths, strings.Split(pluginSearchPaths, ":")...) } else { // Search the current working directory. pwd, err := os.Getwd() @@ -64,7 +62,7 @@ func NewManager() (*Manager, error) { // Search the $PATH. pathEnv := os.Getenv("PATH") if len(pathEnv) > 0 { - m.searchPaths = append(m.searchPaths, strings.Split(pathEnv, ":")...) //再添加一个patheenv + m.searchPaths = append(m.searchPaths, strings.Split(pathEnv, ":")...) } } @@ -78,22 +76,21 @@ func (m *Manager) ShouldRun(name string) bool { } // Run searches for the plugin and runs it. -// 输入一系列字符串,第一个字符串为地址,后面的字符串为指令 func (m *Manager) Run(args []string) error { if len(args) < 1 { return nil // No arguments provided, normal help message will be shown. } - pluginPath, err := m.searchPlugins(args[0]) //设定路径 + pluginPath, err := m.searchPlugins(args[0]) if err != nil { return err } - pluginCmd := exec.Command(pluginPath, args[1:]...) //创建了一个外部命令,所以关键在这个输入的字符串和地址 - pluginCmd.Stdin = os.Stdin //pluginCmd就是一个命令 + pluginCmd := exec.Command(pluginPath, args[1:]...) + pluginCmd.Stdin = os.Stdin pluginCmd.Stdout = os.Stdout pluginCmd.Stderr = os.Stderr - if err := pluginCmd.Run(); err != nil { //跑这个命令 + if err := pluginCmd.Run(); err != nil { return fmt.Errorf("failed to run plugin '%s': %v", pluginPath, err) } From 0325b142a2759542f2495671bea5fd400ec95f5a Mon Sep 17 00:00:00 2001 From: confoc Date: Mon, 20 May 2024 11:50:01 +0800 Subject: [PATCH 4/7] pref --- cmd/gtctl/cluster_create.go | 6 ++++-- cmd/gtctl/main.go | 2 +- pkg/cluster/baremetal/create.go | 2 ++ pkg/plugins/manager.go | 4 +++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cmd/gtctl/cluster_create.go b/cmd/gtctl/cluster_create.go index 94171bf9..02c3079c 100644 --- a/cmd/gtctl/cluster_create.go +++ b/cmd/gtctl/cluster_create.go @@ -90,7 +90,7 @@ func NewCreateClusterCommand(l logger.Logger) *cobra.Command { cmd.Flags().StringVar(&options.StorageClassName, "storage-class-name", "null", "Datanode storage class name.") cmd.Flags().StringVar(&options.StorageSize, "storage-size", "10Gi", "Datanode persistent volume size.") cmd.Flags().StringVar(&options.StorageRetainPolicy, "retain-policy", "Retain", "Datanode pvc retain policy.") - cmd.Flags().StringVarP(&options.Namespace, "namespace", "n", "default", "Namespace of GreptimeDB cluster.") + cmd.Flags().StringVarP(&options.Namespace, "namcrespace", "n", "default", "Namespace of GreptimeDB cluster.") cmd.Flags().BoolVar(&options.DryRun, "dry-run", false, "Output the manifests without applying them.") cmd.Flags().IntVar(&options.Timeout, "timeout", 600, "Timeout in seconds for the command to complete, -1 means no timeout, default is 10 min.") cmd.Flags().StringArrayVar(&options.Set.RawConfig, "set", []string{}, "set values on the command line for greptimedb cluster, etcd and operator (can specify multiple or separate values with commas: eg. cluster.key1=val1,etcd.key2=val2).") @@ -110,7 +110,7 @@ func NewCreateClusterCommand(l logger.Logger) *cobra.Command { cmd.Flags().StringVar(&options.GreptimeDBClusterValuesFile, "greptimedb-cluster-values-file", "", "The values file for greptimedb cluster.") cmd.Flags().StringVar(&options.EtcdClusterValuesFile, "etcd-cluster-values-file", "", "The values file for etcd cluster.") cmd.Flags().StringVar(&options.GreptimeDBOperatorValuesFile, "greptimedb-operator-values-file", "", "The values file for greptimedb operator.") - cmd.Flags().BoolVar(&options.EnableEtcd, "memory-meta-storage", true, "Bootstrap the whole cluster without installing etcd for testing purposes through using the memory storage of metasrv in bare-metal mode.") + cmd.Flags().BoolVarP(&options.EnableEtcd, "memory-meta-storage", "m", true, "Bootstrap the whole cluster without installing etcd for testing purposes through using the memory storage of metasrv in bare-metal mode.") return cmd } @@ -180,7 +180,9 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger } var cluster opt.Operations + if options.BareMetal { + l.V(0).Infof("Creating GreptimeDB cluster '%s' on bare-metal", logger.Bold(clusterName)) var opts []baremetal.Option diff --git a/cmd/gtctl/main.go b/cmd/gtctl/main.go index 51623635..54756657 100644 --- a/cmd/gtctl/main.go +++ b/cmd/gtctl/main.go @@ -78,7 +78,7 @@ func main() { panic(err) } - if len(os.Args) > 1 && pm.ShouldRun(os.Args[1]) { + if len(os.Args) > 1 && pm.ShouldRun(os.Args[1]) { //os.Args[0]就是gtctl if err = pm.Run(os.Args[1:]); err != nil { fmt.Println(err) os.Exit(1) diff --git a/pkg/cluster/baremetal/create.go b/pkg/cluster/baremetal/create.go index 7331483d..55519446 100644 --- a/pkg/cluster/baremetal/create.go +++ b/pkg/cluster/baremetal/create.go @@ -51,7 +51,9 @@ func (c *Cluster) Create(ctx context.Context, options *opt.CreateOptions) error } return nil } + fmt.Printf("%v", c.enableEtcd) if c.enableEtcd { + fmt.Printf("%v", c.enableEtcd) if err := withSpinner("Etcd Cluster", c.createEtcdCluster); err != nil { return err } diff --git a/pkg/plugins/manager.go b/pkg/plugins/manager.go index d29b0361..f79adc2f 100644 --- a/pkg/plugins/manager.go +++ b/pkg/plugins/manager.go @@ -48,6 +48,7 @@ func NewManager() (*Manager, error) { searchPaths: []string{}, } + //提取路径 pluginSearchPaths := os.Getenv(PluginSearchPathsEnvKey) if len(pluginSearchPaths) > 0 { m.searchPaths = append(m.searchPaths, strings.Split(pluginSearchPaths, ":")...) @@ -60,7 +61,7 @@ func NewManager() (*Manager, error) { m.searchPaths = append(m.searchPaths, pwd) // Search the $PATH. - pathEnv := os.Getenv("PATH") + pathEnv := os.Getenv("PATH") //你系统的路径环境变量 if len(pathEnv) > 0 { m.searchPaths = append(m.searchPaths, strings.Split(pathEnv, ":")...) } @@ -81,6 +82,7 @@ func (m *Manager) Run(args []string) error { return nil // No arguments provided, normal help message will be shown. } + //构建了路径 pluginPath, err := m.searchPlugins(args[0]) if err != nil { return err From 25b1de1e8a1d095435fbf27b81cad2f52e183197 Mon Sep 17 00:00:00 2001 From: confoc Date: Mon, 20 May 2024 15:51:13 +0800 Subject: [PATCH 5/7] end --- cmd/gtctl/cluster_create.go | 2 +- cmd/gtctl/main.go | 2 +- pkg/cluster/baremetal/create.go | 2 -- pkg/plugins/manager.go | 4 +--- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cmd/gtctl/cluster_create.go b/cmd/gtctl/cluster_create.go index 02c3079c..d38180fc 100644 --- a/cmd/gtctl/cluster_create.go +++ b/cmd/gtctl/cluster_create.go @@ -90,7 +90,7 @@ func NewCreateClusterCommand(l logger.Logger) *cobra.Command { cmd.Flags().StringVar(&options.StorageClassName, "storage-class-name", "null", "Datanode storage class name.") cmd.Flags().StringVar(&options.StorageSize, "storage-size", "10Gi", "Datanode persistent volume size.") cmd.Flags().StringVar(&options.StorageRetainPolicy, "retain-policy", "Retain", "Datanode pvc retain policy.") - cmd.Flags().StringVarP(&options.Namespace, "namcrespace", "n", "default", "Namespace of GreptimeDB cluster.") + cmd.Flags().StringVarP(&options.Namespace, "namespace", "n", "default", "Namespace of GreptimeDB cluster.") cmd.Flags().BoolVar(&options.DryRun, "dry-run", false, "Output the manifests without applying them.") cmd.Flags().IntVar(&options.Timeout, "timeout", 600, "Timeout in seconds for the command to complete, -1 means no timeout, default is 10 min.") cmd.Flags().StringArrayVar(&options.Set.RawConfig, "set", []string{}, "set values on the command line for greptimedb cluster, etcd and operator (can specify multiple or separate values with commas: eg. cluster.key1=val1,etcd.key2=val2).") diff --git a/cmd/gtctl/main.go b/cmd/gtctl/main.go index 54756657..51623635 100644 --- a/cmd/gtctl/main.go +++ b/cmd/gtctl/main.go @@ -78,7 +78,7 @@ func main() { panic(err) } - if len(os.Args) > 1 && pm.ShouldRun(os.Args[1]) { //os.Args[0]就是gtctl + if len(os.Args) > 1 && pm.ShouldRun(os.Args[1]) { if err = pm.Run(os.Args[1:]); err != nil { fmt.Println(err) os.Exit(1) diff --git a/pkg/cluster/baremetal/create.go b/pkg/cluster/baremetal/create.go index 55519446..7331483d 100644 --- a/pkg/cluster/baremetal/create.go +++ b/pkg/cluster/baremetal/create.go @@ -51,9 +51,7 @@ func (c *Cluster) Create(ctx context.Context, options *opt.CreateOptions) error } return nil } - fmt.Printf("%v", c.enableEtcd) if c.enableEtcd { - fmt.Printf("%v", c.enableEtcd) if err := withSpinner("Etcd Cluster", c.createEtcdCluster); err != nil { return err } diff --git a/pkg/plugins/manager.go b/pkg/plugins/manager.go index f79adc2f..d29b0361 100644 --- a/pkg/plugins/manager.go +++ b/pkg/plugins/manager.go @@ -48,7 +48,6 @@ func NewManager() (*Manager, error) { searchPaths: []string{}, } - //提取路径 pluginSearchPaths := os.Getenv(PluginSearchPathsEnvKey) if len(pluginSearchPaths) > 0 { m.searchPaths = append(m.searchPaths, strings.Split(pluginSearchPaths, ":")...) @@ -61,7 +60,7 @@ func NewManager() (*Manager, error) { m.searchPaths = append(m.searchPaths, pwd) // Search the $PATH. - pathEnv := os.Getenv("PATH") //你系统的路径环境变量 + pathEnv := os.Getenv("PATH") if len(pathEnv) > 0 { m.searchPaths = append(m.searchPaths, strings.Split(pathEnv, ":")...) } @@ -82,7 +81,6 @@ func (m *Manager) Run(args []string) error { return nil // No arguments provided, normal help message will be shown. } - //构建了路径 pluginPath, err := m.searchPlugins(args[0]) if err != nil { return err From 665485542ef5dfa2ec955a71b94f55b44ed6caf4 Mon Sep 17 00:00:00 2001 From: confoc Date: Wed, 22 May 2024 11:57:22 +0800 Subject: [PATCH 6/7] fix --- tests/e2e/greptimedbcluster_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/e2e/greptimedbcluster_test.go b/tests/e2e/greptimedbcluster_test.go index daf418ea..35f4a0c0 100644 --- a/tests/e2e/greptimedbcluster_test.go +++ b/tests/e2e/greptimedbcluster_test.go @@ -41,7 +41,7 @@ const ( ) PARTITION ON COLUMNS (n) ( n < 5, - n < 9, + n >= 5 AND n < 9, n >= 9 )` @@ -155,6 +155,7 @@ func getCluster() error { cmd := exec.Command("../../bin/gtctl", "cluster", "get", "mydb") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { return err } From 98e56c47ca7ee1089a8b4e1c45b0eb7332f2638f Mon Sep 17 00:00:00 2001 From: confoc Date: Wed, 22 May 2024 12:03:09 +0800 Subject: [PATCH 7/7] fix --- cmd/gtctl/cluster_create.go | 6 +----- pkg/components/metasrv.go | 2 -- tests/e2e/greptimedbcluster_test.go | 1 - 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/cmd/gtctl/cluster_create.go b/cmd/gtctl/cluster_create.go index d38180fc..4bd0353a 100644 --- a/cmd/gtctl/cluster_create.go +++ b/cmd/gtctl/cluster_create.go @@ -180,15 +180,11 @@ func NewCluster(args []string, options *clusterCreateCliOptions, l logger.Logger } var cluster opt.Operations - if options.BareMetal { - l.V(0).Infof("Creating GreptimeDB cluster '%s' on bare-metal", logger.Bold(clusterName)) var opts []baremetal.Option - opts = append(opts, baremetal.WithEnableCache(options.EnableCache)) - opts = append(opts, baremetal.WithEnableEtcd(options.EnableEtcd)) - + opts = append(opts, baremetal.WithEnableCache(options.EnableCache), baremetal.WithEnableEtcd(options.EnableEtcd)) if len(options.GreptimeBinVersion) > 0 { opts = append(opts, baremetal.WithGreptimeVersion(options.GreptimeBinVersion)) } diff --git a/pkg/components/metasrv.go b/pkg/components/metasrv.go index 05f20c41..f99f6fed 100644 --- a/pkg/components/metasrv.go +++ b/pkg/components/metasrv.go @@ -108,7 +108,6 @@ CHECKER: } func (m *metaSrv) BuildArgs(params ...interface{}) []string { - logLevel := m.config.LogLevel if logLevel == "" { logLevel = DefaultLogLevel @@ -125,7 +124,6 @@ func (m *metaSrv) BuildArgs(params ...interface{}) []string { fmt.Sprintf("--server-addr=%s", m.config.ServerAddr), } args = GenerateAddrArg("--http-addr", m.config.HTTPAddr, nodeID, args) - args = GenerateAddrArg("--bind-addr", bindAddr, nodeID, args) if len(m.config.Config) > 0 { diff --git a/tests/e2e/greptimedbcluster_test.go b/tests/e2e/greptimedbcluster_test.go index 35f4a0c0..30b35f2d 100644 --- a/tests/e2e/greptimedbcluster_test.go +++ b/tests/e2e/greptimedbcluster_test.go @@ -155,7 +155,6 @@ func getCluster() error { cmd := exec.Command("../../bin/gtctl", "cluster", "get", "mydb") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { return err }