config: fix hot-reloading (#1820)

This commit is contained in:
Caleb Doxsey 2021-01-25 12:20:41 -07:00 committed by GitHub
parent 19d78cb844
commit 979e8f9cec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 15 deletions

View file

@ -2,7 +2,6 @@ package config
import (
"crypto/sha256"
"encoding/hex"
"io/ioutil"
"sync"
@ -124,7 +123,6 @@ type FileWatcherSource struct {
mu sync.RWMutex
computedConfig *Config
version string
ChangeDispatcher
}
@ -183,10 +181,6 @@ func (src *FileWatcherSource) check(cfg *Config) {
}
}
version := hex.EncodeToString(h.Sum(nil))
if src.version != version {
src.version = version
// update the computed config
src.computedConfig = cfg.Clone()
src.computedConfig.Options.Certificates = nil
@ -194,5 +188,4 @@ func (src *FileWatcherSource) check(cfg *Config) {
// trigger a change
src.Trigger(src.computedConfig)
}
}

View file

@ -24,11 +24,13 @@ func TestFileWatcherSource(t *testing.T) {
return
}
src := NewFileWatcherSource(NewStaticSource(&Config{
ssrc := NewStaticSource(&Config{
Options: &Options{
CAFile: filepath.Join(tmpdir, "example.txt"),
},
}))
})
src := NewFileWatcherSource(ssrc)
var closeOnce sync.Once
ch := make(chan struct{})
src.OnConfigChange(func(cfg *Config) {
@ -47,4 +49,16 @@ func TestFileWatcherSource(t *testing.T) {
case <-time.After(time.Second):
t.Error("expected OnConfigChange to be fired after modifying a file")
}
ssrc.SetConfig(&Config{
Options: &Options{
CAFile: filepath.Join(tmpdir, "example.txt"),
},
})
select {
case <-ch:
case <-time.After(time.Second):
t.Error("expected OnConfigChange to be fired after triggering a change to the underlying source")
}
}