in pkg/config/api_config.go [248:288]
func listenResourceAndMethodEvent(key string) bool {
for {
wc, err := client.WatchWithPrefix(key)
if err != nil {
logger.Warnf("Watch api config {key:%s} = error{%s}", key, err)
return false
}
select {
// client stopped
case <-client.Done():
logger.Warnf("client stopped")
return false
// client ctx stop
// handle etcd events
case e, ok := <-wc:
if !ok {
logger.Warnf("watch-chan closed")
return false
}
if e.Err() != nil {
logger.Errorf("watch ERR {err: %s}", e.Err())
continue
}
for _, event := range e.Events {
switch event.Type {
case mvccpb.PUT:
logger.Infof("get event (key{%s}) = event{EventNodePut}", event.Kv.Key)
handlePutEvent(event.Kv.Key, event.Kv.Value)
case mvccpb.DELETE:
logger.Infof("get event (key{%s}) = event{EventNodeDeleted}", event.Kv.Key)
handleDeleteEvent(event.Kv.Key, event.Kv.Value)
default:
logger.Infof("get event (key{%s}) = event{%d}", event.Kv.Key, event.Type)
}
}
}
}
}