Skip to content

Commit 3ea05e1

Browse files
authored
Merge pull request #108 from Elbehery/20250822_use_log_stdlib
etcd-defrag_107: Print the log message using log package of golang st…
2 parents 18b6825 + 0f034b2 commit 3ea05e1

2 files changed

Lines changed: 40 additions & 40 deletions

File tree

endpoints.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ package main
22

33
import (
44
"errors"
5-
"fmt"
5+
"log"
66
"net"
77
"net/url"
8-
"os"
98
"strings"
109

1110
"go.etcd.io/etcd/client/pkg/v3/srv"
@@ -147,7 +146,7 @@ func endpointsFromDNSDiscovery(gcfg globalConfig) ([]string, error) {
147146
var ret []string
148147
for _, ep := range eps {
149148
if strings.HasPrefix(ep, "http://") {
150-
fmt.Fprintf(os.Stderr, "ignoring discovered insecure endpoint %q\n", ep)
149+
log.Printf("ignoring discovered insecure endpoint %q\n", ep)
151150
continue
152151
}
153152
ret = append(ret, ep)

main.go

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"errors"
55
"fmt"
6+
"log"
67
"os"
78
"runtime"
89
"strings"
@@ -103,7 +104,7 @@ func main() {
103104
defragCmd := newDefragCommand()
104105
if err := defragCmd.Execute(); err != nil {
105106
if defragCmd.SilenceErrors {
106-
fmt.Fprintln(os.Stderr, "Error:", err)
107+
log.Println("Error:", err)
107108
os.Exit(1)
108109
} else {
109110
os.Exit(1)
@@ -125,52 +126,52 @@ func defragCommandFunc(cmd *cobra.Command, args []string) {
125126
printVersion(globalCfg.printVersion)
126127

127128
if globalCfg.dryRun {
128-
fmt.Println("Using dry run mode, will not perform defragmentation")
129+
log.Println("Using dry run mode, will not perform defragmentation")
129130
}
130131

131-
fmt.Println("Validating configuration.")
132+
log.Println("Validating configuration.")
132133
if err := validateConfig(cmd, globalCfg); err != nil {
133-
fmt.Fprintf(os.Stderr, "Validating configuration failed: %v\n", err)
134+
log.Printf("Validating configuration failed: %v\n", err)
134135
os.Exit(1)
135136
}
136137

137-
fmt.Println("Performing health check.")
138+
log.Println("Performing health check.")
138139
if !healthCheck(globalCfg) {
139140
os.Exit(1)
140141
}
141142

142-
fmt.Println("Getting members status")
143+
log.Println("Getting members status")
143144
statusList, err := getMembersStatus(globalCfg)
144145
if err != nil {
145-
fmt.Fprintf(os.Stderr, "Failed to get members status: %v\n", err)
146+
log.Printf("Failed to get members status: %v\n", err)
146147
os.Exit(1)
147148
}
148149

149150
eps, err := endpointsWithLeaderAtEnd(globalCfg, statusList)
150151
if err != nil {
151-
fmt.Fprintf(os.Stderr, "Failed to get endpoints: %v\n", err)
152+
log.Printf("Failed to get endpoints: %v\n", err)
152153
os.Exit(1)
153154
}
154155

155156
if globalCfg.compaction && !globalCfg.dryRun {
156-
fmt.Printf("Running compaction until revision: %d ... ", statusList[0].Resp.Header.Revision)
157+
log.Printf("Running compaction until revision: %d ... ", statusList[0].Resp.Header.Revision)
157158
if err := compact(globalCfg, statusList[0].Resp.Header.Revision, eps[0]); err != nil {
158-
fmt.Printf("failed, %v\n", err)
159+
log.Printf("failed, %v\n", err)
159160
} else {
160-
fmt.Println("successful")
161+
log.Println("successful")
161162
}
162163
} else {
163-
fmt.Println("Skip compaction.")
164+
log.Println("Skip compaction.")
164165
}
165166

166-
fmt.Printf("%d endpoint(s) need to be defragmented: %v\n", len(eps), eps)
167+
log.Printf("%d endpoint(s) need to be defragmented: %v\n", len(eps), eps)
167168
failures := 0
168169
for _, ep := range eps {
169-
fmt.Print("[Before defragmentation] ")
170+
log.Print("[Before defragmentation] ")
170171
status, err := getMemberStatus(globalCfg, ep)
171172
if err != nil {
172173
failures++
173-
fmt.Fprintf(os.Stderr, "Failed to get member (%q) status, error: %v\n", ep, err)
174+
log.Printf("Failed to get member (%q) status, error: %v\n", ep, err)
174175
if !globalCfg.continueOnError {
175176
break
176177
}
@@ -181,27 +182,27 @@ func defragCommandFunc(cmd *cobra.Command, args []string) {
181182
if !evalRet || err != nil {
182183
if err != nil {
183184
failures++
184-
fmt.Fprintf(os.Stderr, "Evaluation failed, endpoint: %s, error:%v\n", ep, err)
185+
log.Printf("Evaluation failed, endpoint: %s, error:%v\n", ep, err)
185186
if !globalCfg.continueOnError {
186187
break
187188
}
188189
continue
189190
}
190-
fmt.Printf("Evaluation result is false, so skipping endpoint: %s\n", ep)
191+
log.Printf("Evaluation result is false, so skipping endpoint: %s\n", ep)
191192
continue
192193
}
193194

194195
if globalCfg.dryRun {
195-
fmt.Printf("[Dry run] skip defragmenting endpoint %q\n", ep)
196+
log.Printf("[Dry run] skip defragmenting endpoint %q\n", ep)
196197
continue
197198
}
198199

199200
// Check if the member is a leader and move the leader if necessary
200201
if globalCfg.moveLeader {
201202
if status.Resp.Leader == status.Resp.Header.MemberId {
202-
fmt.Println("Transferring the leadership from the current leader")
203+
log.Println("Transferring the leadership from the current leader")
203204
if err = moveLeader(globalCfg, status.Resp.Leader, ep); err != nil {
204-
fmt.Fprintf(os.Stderr, "Failed to transfer the leadership from %x to a follower, error: %v\n", status.Resp.Leader, err)
205+
log.Printf("Failed to transfer the leadership from %x to a follower, error: %v\n", status.Resp.Leader, err)
205206
if !globalCfg.continueOnError {
206207
break
207208
}
@@ -210,37 +211,37 @@ func defragCommandFunc(cmd *cobra.Command, args []string) {
210211
}
211212
}
212213

213-
fmt.Printf("Defragmenting endpoint %q\n", ep)
214+
log.Printf("Defragmenting endpoint %q\n", ep)
214215
startTS := time.Now()
215216
err = defragment(globalCfg, ep)
216217
d := time.Since(startTS)
217218
if err != nil {
218219
failures++
219-
fmt.Fprintf(os.Stderr, "Failed to defragment etcd member %q. took %s. (%v)\n", ep, d.String(), err)
220+
log.Printf("Failed to defragment etcd member %q. took %s. (%v)\n", ep, d.String(), err)
220221
if !globalCfg.continueOnError {
221222
break
222223
}
223224
continue
224225
} else {
225-
fmt.Printf("Finished defragmenting etcd endpoint %q. took %s\n", ep, d.String())
226+
log.Printf("Finished defragmenting etcd endpoint %q. took %s\n", ep, d.String())
226227
}
227228

228-
fmt.Print("[Post defragmentation] ")
229+
log.Print("[Post defragmentation] ")
229230
_, err = getMemberStatus(globalCfg, ep)
230231
if err != nil {
231232
failures++
232-
fmt.Fprintf(os.Stderr, "Failed to get member (%q) status, error: %v\n", ep, err)
233+
log.Printf("Failed to get member (%q) status, error: %v\n", ep, err)
233234
if !globalCfg.continueOnError {
234235
break
235236
}
236237
continue
237238
}
238239
}
239240
if failures != 0 {
240-
fmt.Fprintf(os.Stderr, "%d (total %d) endpoint(s) failed to be defragmented.\n", failures, len(eps))
241+
log.Printf("%d (total %d) endpoint(s) failed to be defragmented.\n", failures, len(eps))
241242
os.Exit(1)
242243
}
243-
fmt.Println("The defragmentation is successful.")
244+
log.Println("The defragmentation is successful.")
244245
}
245246

246247
func validateConfig(cmd *cobra.Command, gcfg globalConfig) error {
@@ -257,15 +258,15 @@ func validateConfig(cmd *cobra.Command, gcfg globalConfig) error {
257258
}
258259

259260
if len(gcfg.defragRule) > 0 {
260-
fmt.Printf("Validating the defragmentation rule: %v ... ", gcfg.defragRule)
261+
log.Printf("Validating the defragmentation rule: %v ... ", gcfg.defragRule)
261262

262263
if err := validateRule(gcfg.defragRule); err != nil {
263-
fmt.Println("invalid")
264+
log.Println("invalid")
264265
return fmt.Errorf("invalid rule %q, error: %w", gcfg.defragRule, err)
265266
}
266-
fmt.Println("valid")
267+
log.Println("valid")
267268
} else {
268-
fmt.Println("No defragmentation rule provided")
269+
log.Println("No defragmentation rule provided")
269270
}
270271

271272
return nil
@@ -274,7 +275,7 @@ func validateConfig(cmd *cobra.Command, gcfg globalConfig) error {
274275
func healthCheck(gcfg globalConfig) bool {
275276
healthInfos, err := clusterHealth(gcfg)
276277
if err != nil {
277-
fmt.Fprintf(os.Stderr, "Failed to get members' health info: %v\n", err)
278+
log.Printf("Failed to get members' health info: %v\n", err)
278279
return false
279280
}
280281

@@ -284,7 +285,7 @@ func healthCheck(gcfg globalConfig) bool {
284285
unhealthyCount++
285286
}
286287

287-
fmt.Println(healthInfo.String())
288+
log.Println(healthInfo.String())
288289
}
289290

290291
return unhealthyCount == 0
@@ -297,7 +298,7 @@ func getMembersStatus(gcfg globalConfig) ([]epStatus, error) {
297298
}
298299

299300
for _, status := range statusList {
300-
fmt.Println(status.String())
301+
log.Println(status.String())
301302
}
302303
return statusList, nil
303304
}
@@ -307,7 +308,7 @@ func getMemberStatus(gcfg globalConfig, ep string) (epStatus, error) {
307308
if err != nil {
308309
return epStatus{}, err
309310
}
310-
fmt.Println(status.String())
311+
log.Println(status.String())
311312
return status, nil
312313
}
313314

@@ -318,7 +319,7 @@ func moveLeader(gcfg globalConfig, leaderID uint64, leaderEndpoint string) error
318319
}
319320

320321
if len(memberlistResp.Members) == 1 {
321-
fmt.Println("Skip moving leader as there is only one member in the cluster")
322+
log.Println("Skip moving leader as there is only one member in the cluster")
322323
return nil
323324
}
324325

@@ -335,6 +336,6 @@ func moveLeader(gcfg globalConfig, leaderID uint64, leaderEndpoint string) error
335336
return fmt.Errorf("coundn't find a follower in the %d member cluster", len(memberlistResp.Members))
336337
}
337338

338-
fmt.Printf("Transferring the leadership from %x to %x\n", leaderID, newLeaderID)
339+
log.Printf("Transferring the leadership from %x to %x\n", leaderID, newLeaderID)
339340
return transferLeadership(globalCfg, leaderEndpoint, newLeaderID)
340341
}

0 commit comments

Comments
 (0)