[#86] engine: Simplify multiple chains processing

So, it's sunday evening and I am sitting on-call trying to debug strange
node behaviour. It took me 3 whole minutes to understand the code being
changed: it accumulates bools in slices, even though no slice is needed;
it uses subtle condition from the first loop to make decision in the
second one, and finally it uses named return values.

In this commit we remove the slice and the second loop, because why not.

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
Evgenii Stratonikov 2024-08-19 09:32:39 +03:00
parent 96225afacb
commit a11e80e2c7

View file

@ -42,41 +42,36 @@ func (dr *defaultChainRouter) checkLocal(name chain.Name, rt RequestTarget, r re
if dr.local == nil { if dr.local == nil {
return return
} }
var ruleFounds []bool
var hasAllow bool
for _, target := range rt.Targets() { for _, target := range rt.Targets() {
status, ruleFound, err = dr.matchLocalOverrides(name, target, r) status, ruleFound, err = dr.matchLocalOverrides(name, target, r)
if err != nil || ruleFound && status != chain.Allow { if err != nil || ruleFound && status != chain.Allow {
return return
} }
ruleFounds = append(ruleFounds, ruleFound) hasAllow = hasAllow || ruleFound
} }
status = chain.NoRuleFound status = chain.NoRuleFound
for _, ruleFound = range ruleFounds { if hasAllow {
if ruleFound { status = chain.Allow
status = chain.Allow
break
}
} }
return return
} }
func (dr *defaultChainRouter) checkMorph(name chain.Name, rt RequestTarget, r resource.Request) (status chain.Status, ruleFound bool, err error) { func (dr *defaultChainRouter) checkMorph(name chain.Name, rt RequestTarget, r resource.Request) (status chain.Status, ruleFound bool, err error) {
var ruleFounds []bool var hasAllow bool
for _, target := range rt.Targets() { for _, target := range rt.Targets() {
status, ruleFound, err = dr.matchMorphRuleChains(name, target, r) status, ruleFound, err = dr.matchMorphRuleChains(name, target, r)
if err != nil || ruleFound && status != chain.Allow { if err != nil || ruleFound && status != chain.Allow {
return return
} }
ruleFounds = append(ruleFounds, ruleFound) hasAllow = hasAllow || ruleFound
} }
status = chain.NoRuleFound status = chain.NoRuleFound
for _, ruleFound = range ruleFounds { if hasAllow {
if ruleFound { status = chain.Allow
status = chain.Allow
break
}
} }
return return
} }