1
0
mirror of https://github.com/go-kratos/kratos.git synced 2026-05-22 10:15:24 +02:00

fix(config): apollo close function: useless infinite loop causes high cpu usage (#1674)

Co-authored-by: wangshaosen <wangshaosen@videopls.com>
This commit is contained in:
xiaoxiaodek
2021-12-09 23:27:17 +08:00
committed by GitHub
parent c9e19f1d98
commit 413cc77f7d
+9 -2
View File
@@ -1,6 +1,7 @@
package apollo
import (
"context"
"fmt"
"github.com/go-kratos/kratos/v2/config"
@@ -66,11 +67,13 @@ func newWatcher(a *apollo, logger log.Logger) (config.Watcher, error) {
}
changeCh := make(chan []*config.KeyValue)
a.client.AddChangeListener(&customChangeListener{in: changeCh, logger: logger})
listener := &customChangeListener{in: changeCh, logger: logger}
a.client.AddChangeListener(listener)
return &watcher{
out: changeCh,
cancelFn: func() {
a.client.RemoveChangeListener(listener)
close(changeCh)
},
}, nil
@@ -78,7 +81,11 @@ func newWatcher(a *apollo, logger log.Logger) (config.Watcher, error) {
// Next will be blocked until the Stop method is called
func (w *watcher) Next() ([]*config.KeyValue, error) {
return <-w.out, nil
kv, ok := <-w.out
if !ok {
return nil, context.Canceled
}
return kv, nil
}
func (w *watcher) Stop() error {