@@ -17,7 +17,10 @@ package components
17
17
import (
18
18
"context"
19
19
"fmt"
20
+ "net"
21
+ "net/http"
20
22
"path"
23
+ "strconv"
21
24
"sync"
22
25
23
26
greptimedbclusterv1alpha1 "github.com/GreptimeTeam/greptimedb-operator/apis/v1alpha1"
@@ -74,7 +77,7 @@ func (f *frontend) Start(ctx context.Context, stop context.CancelFunc, binary st
74
77
Name : dirName ,
75
78
logDir : frontendLogDir ,
76
79
pidDir : frontendPidDir ,
77
- args : f .BuildArgs (),
80
+ args : f .BuildArgs (i ),
78
81
}
79
82
if err := runBinary (ctx , stop , option , f .wg , f .logger ); err != nil {
80
83
return err
@@ -84,16 +87,23 @@ func (f *frontend) Start(ctx context.Context, stop context.CancelFunc, binary st
84
87
return nil
85
88
}
86
89
87
- func (f * frontend ) BuildArgs (_ ... interface {}) []string {
90
+ func (f * frontend ) BuildArgs (params ... interface {}) []string {
88
91
logLevel := f .config .LogLevel
89
92
if logLevel == "" {
90
93
logLevel = DefaultLogLevel
91
94
}
92
95
96
+ nodeId := params [0 ].(int )
97
+
93
98
args := []string {
94
99
fmt .Sprintf ("--log-level=%s" , logLevel ),
95
100
f .Name (), "start" ,
96
101
fmt .Sprintf ("--metasrv-addr=%s" , f .metaSrvAddr ),
102
+ fmt .Sprintf ("--http-addr=%s" , generateAddrArg (f .config .HTTPAddr , nodeId )),
103
+ fmt .Sprintf ("--rpc-addr=%s" , generateAddrArg (f .config .GRPCAddr , nodeId )),
104
+ fmt .Sprintf ("--mysql-addr=%s" , generateAddrArg (f .config .MysqlAddr , nodeId )),
105
+ fmt .Sprintf ("--postgres-addr=%s" , generateAddrArg (f .config .PostgresAddr , nodeId )),
106
+ fmt .Sprintf ("--opentsdb-addr=%s" , generateAddrArg (f .config .OpentsdbAddr , nodeId )),
97
107
}
98
108
99
109
if len (f .config .Config ) > 0 {
@@ -104,6 +114,32 @@ func (f *frontend) BuildArgs(_ ...interface{}) []string {
104
114
}
105
115
106
116
func (f * frontend ) IsRunning (_ context.Context ) bool {
107
- // Have not implemented the healthy checker now.
108
- return false
117
+ for i := 0 ; i < f .config .Replicas ; i ++ {
118
+ addr := generateAddrArg (f .config .HTTPAddr , i )
119
+ healthy := fmt .Sprintf ("http://%s/health" , addr )
120
+
121
+ resp , err := http .Get (healthy )
122
+ if err != nil {
123
+ f .logger .V (5 ).Infof ("Failed to get %s healthy: %s" , f .Name (), err )
124
+ return false
125
+ }
126
+
127
+ if resp .StatusCode != http .StatusOK {
128
+ f .logger .V (5 ).Infof ("%s is not healthy: %s" , f .Name (), resp )
129
+ return false
130
+ }
131
+
132
+ if err = resp .Body .Close (); err != nil {
133
+ f .logger .V (5 ).Infof ("%s is not healthy: %s, err: %s" , f .Name (), resp , err )
134
+ return false
135
+ }
136
+ }
137
+ return true
138
+ }
139
+
140
+ func generateAddrArg (addr string , nodeId int ) string {
141
+ // The "addr" is validated when set.
142
+ host , port , _ := net .SplitHostPort (addr )
143
+ portInt , _ := strconv .Atoi (port )
144
+ return net .JoinHostPort (host , strconv .Itoa (portInt + nodeId ))
109
145
}
0 commit comments