From 7ba3455b8844e2837387ec9ffc28426e0bae06fd Mon Sep 17 00:00:00 2001 From: wangxin Date: Thu, 18 Nov 2021 18:57:23 +0800 Subject: [PATCH 1/2] feat(remote): add callback when remote channel changes --- viper.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/viper.go b/viper.go index 6c456a9..21a35b2 100644 --- a/viper.go +++ b/viper.go @@ -1859,8 +1859,8 @@ func (v *Viper) WatchRemoteConfig() error { return v.watchKeyValueConfig() } -func (v *Viper) WatchRemoteConfigOnChannel() error { - return v.watchKeyValueConfigOnChannel() +func (v *Viper) WatchRemoteConfigOnChannel(run func()) error { + return v.watchKeyValueConfigOnChannel(run) } // Retrieve the first found remote configuration. @@ -1894,7 +1894,7 @@ func (v *Viper) getRemoteConfig(provider RemoteProvider) (map[string]interface{} } // Retrieve the first found remote configuration. -func (v *Viper) watchKeyValueConfigOnChannel() error { +func (v *Viper) watchKeyValueConfigOnChannel(run func()) error { for _, rp := range v.remoteProviders { respc, _ := RemoteConfig.WatchChannel(rp) // Todo: Add quit channel @@ -1903,6 +1903,7 @@ func (v *Viper) watchKeyValueConfigOnChannel() error { b := <-rc reader := bytes.NewReader(b.Value) v.unmarshalReader(reader, v.kvstore) + run() } }(respc) return nil From 0f246792b8808d684222072ebea8a6bb081c2e88 Mon Sep 17 00:00:00 2001 From: wangxin Date: Thu, 18 Nov 2021 21:26:54 +0800 Subject: [PATCH 2/2] fix: when remote watch fails, the callback should not be called --- viper.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/viper.go b/viper.go index 21a35b2..12ce22a 100644 --- a/viper.go +++ b/viper.go @@ -1903,7 +1903,9 @@ func (v *Viper) watchKeyValueConfigOnChannel(run func()) error { b := <-rc reader := bytes.NewReader(b.Value) v.unmarshalReader(reader, v.kvstore) - run() + if b.Error == nil { + run() + } } }(respc) return nil