1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-31 03:45:17 +00:00

fix: recursive lazy loading (#7552)

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
Charles-Edouard Brétéché 2023-06-16 09:29:49 +02:00 committed by GitHub
parent 76a91b281b
commit 8b8311bcca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -40,29 +40,36 @@ func (ctx *context) Query(query string) (interface{}, error) {
func (ctx *context) loadDeferred(query string) error {
loaders := ctx.getMatchingLoaders(query)
for _, l := range loaders {
if err := l(); err != nil {
for _, loader := range loaders {
err := ctx.evaluateLoader(loader)
if err != nil {
return err
}
}
return nil
}
func (ctx *context) getMatchingLoaders(query string) []DeferredLoader {
func (ctx *context) getMatchingLoaders(query string) []string {
ctx.deferred.mutex.Lock()
defer ctx.deferred.mutex.Unlock()
var matchingLoaders []DeferredLoader
for name, deferredLoader := range ctx.deferred.loaders {
var matchingLoaders []string
for name := range ctx.deferred.loaders {
if strings.Contains(query, name) {
matchingLoaders = append(matchingLoaders, deferredLoader)
delete(ctx.deferred.loaders, name)
matchingLoaders = append(matchingLoaders, name)
}
}
return matchingLoaders
}
func (ctx *context) evaluateLoader(name string) error {
loader, ok := ctx.deferred.loaders[name]
if !ok {
return nil
}
delete(ctx.deferred.loaders, name)
return loader()
}
func (ctx *context) HasChanged(jmespath string) (bool, error) {
objData, err := ctx.Query("request.object." + jmespath)
if err != nil {