Skip to content

Commit f0896d2

Browse files
committed
lock Load() during Watch
1 parent 64c3f58 commit f0896d2

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

utils/config/config.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"os"
77
"strconv"
88
"strings"
9+
"sync"
910

1011
middlewares "github.com/codeshelldev/secured-signal-api/internals/proxy/middlewares"
1112
"github.com/codeshelldev/secured-signal-api/utils"
@@ -49,6 +50,8 @@ var userLayer = koanf.New(".")
4950

5051
var config *koanf.Koanf
5152

53+
var configLock sync.Mutex
54+
5255
func InitEnv() {
5356
ENV.PORT = strconv.Itoa(config.Int("server.port"))
5457

@@ -146,6 +149,9 @@ func LoadFile(path string, config *koanf.Koanf, parser koanf.Parser) (koanf.Prov
146149

147150
log.Info("Config changed, Reloading...")
148151

152+
configLock.Lock()
153+
defer configLock.Unlock()
154+
149155
Load()
150156
})
151157

@@ -201,7 +207,7 @@ func normalizeKeys(config *koanf.Koanf) {
201207

202208
data[lower] = config.Get(key)
203209
}
204-
210+
205211
config.Delete("")
206212
config.Load(confmap.Provider(data, "."), nil)
207213
}
@@ -218,13 +224,11 @@ func transformChildren(config *koanf.Koanf, prefix string, transform func(key st
218224

219225
transformed[newKey] = newVal
220226
}
221-
222-
// Remove the old subtree by overwriting with empty map
227+
223228
config.Load(confmap.Provider(map[string]any{
224229
prefix: map[string]any{},
225230
}, "."), nil)
226231

227-
// Load the normalized subtree back in
228232
config.Load(confmap.Provider(map[string]any{
229233
prefix: transformed,
230234
}, "."), nil)

0 commit comments

Comments
 (0)