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:
parent
76a91b281b
commit
8b8311bcca
1 changed files with 16 additions and 9 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue