Add thread safety to all koanf public methods #339
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR addresses the concerns brought up in Issue #355 and previously in Issue #153.
Since the
koanf.confMap
is a shared resource that could be accessed continuously from different goroutines for reading/updating config values, the solution is to acquire and release async.RWMutex
in each public method that accesses theconfMap
property.A more robust and performant solution would be to refactor the existing
koanf.confMap
map property and all methods in "github.com/knadh/koanf/maps" to use the inherently thread safesync.Map
structure from the standard library. This approach would remove the overhead of addingRWMutex
locking to any new public methods and provide more granular read locking in the case of many concurrent read operations where the current approach locks the entire map structure for each read. The obvious downside is that it would require a much more intensive refactor.