Skip to content

Commit 9711dee

Browse files
committed
Merge branch 'feat.cpu_limiter' of github.com:WTIFS/polaris-go into feat.cpu_limiter
2 parents dd46cc0 + 5b91a95 commit 9711dee

File tree

1 file changed

+25
-6
lines changed
  • plugin/servicerouter/rulebase

1 file changed

+25
-6
lines changed

plugin/servicerouter/rulebase/base.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (g *RuleBasedInstancesFilter) matchSourceMetadata(ruleMeta map[string]*apim
158158
if ruleMetaValue.GetValue().GetValue() == matchAll {
159159
continue
160160
}
161-
rawMetaValue, exist := g.getRuleMetaValueStr(routeInfo, ruleMetaKey, ruleMetaValue)
161+
rawMetaValue, exist := g.getRuleMetaValueForSource(routeInfo, ruleMetaKey, ruleMetaValue)
162162
if !exist {
163163
return false, "", nil
164164
}
@@ -354,7 +354,7 @@ func (g *RuleBasedInstancesFilter) matchDstMetadata(routeInfo *servicerouter.Rou
354354
cls = model.NewCluster(svcCache, inCluster)
355355
var metaChanged bool
356356
for ruleMetaKey, ruleMetaValue := range ruleMeta {
357-
ruleMetaValueStr, exist := g.getRuleMetaValueStr(routeInfo, ruleMetaKey, ruleMetaValue)
357+
ruleMetaValueStr, exist := g.getRuleMetaValueForDest(routeInfo, ruleMetaKey, ruleMetaValue)
358358
if !exist {
359359
// 首先如果元数据的value无法获取,直接匹配失败
360360
return nil, false, "", nil
@@ -417,9 +417,21 @@ func (g *RuleBasedInstancesFilter) matchDstMetadata(routeInfo *servicerouter.Rou
417417
return cls, true, "", nil
418418
}
419419

420+
// getRuleMetaValueForSource 针对 Source 方向的标签 value 匹配获取
421+
func (g *RuleBasedInstancesFilter) getRuleMetaValueForSource(routeInfo *servicerouter.RouteInfo, ruleMetaKey string,
422+
ruleMetaValue *apimodel.MatchString) (string, bool) {
423+
return g.getRuleMetaValueStr(routeInfo, ruleMetaKey, ruleMetaValue, false)
424+
}
425+
426+
// getRuleMetaValueForDest 针对 Destination 方向的标签 value 匹配获取
427+
func (g *RuleBasedInstancesFilter) getRuleMetaValueForDest(routeInfo *servicerouter.RouteInfo, ruleMetaKey string,
428+
ruleMetaValue *apimodel.MatchString) (string, bool) {
429+
return g.getRuleMetaValueStr(routeInfo, ruleMetaKey, ruleMetaValue, true)
430+
}
431+
420432
// 获取具体用于匹配的元数据的value
421433
func (g *RuleBasedInstancesFilter) getRuleMetaValueStr(routeInfo *servicerouter.RouteInfo, ruleMetaKey string,
422-
ruleMetaValue *apimodel.MatchString) (string, bool) {
434+
ruleMetaValue *apimodel.MatchString, forDest bool) (string, bool) {
423435
var srcMeta map[string]string
424436
if routeInfo.SourceService != nil {
425437
srcMeta = routeInfo.SourceService.GetMetadata()
@@ -431,10 +443,17 @@ func (g *RuleBasedInstancesFilter) getRuleMetaValueStr(routeInfo *servicerouter.
431443
processedRuleMetaValue = ruleMetaValue.GetValue().GetValue()
432444
exist = true
433445
case apimodel.MatchString_PARAMETER:
434-
if len(srcMeta) == 0 {
435-
exist = false
446+
if forDest {
447+
if len(srcMeta) == 0 {
448+
exist = false
449+
} else {
450+
// 对于参数场景,实例标签的 value 来自 source metadata 中的 value
451+
processedRuleMetaValue, exist = srcMeta[ruleMetaValue.GetValue().GetValue()]
452+
}
436453
} else {
437-
processedRuleMetaValue, exist = srcMeta[ruleMetaKey]
454+
// 如果是参数类型,并且当前是针对 Source 方向的标签匹配,默认直接放通
455+
exist = true
456+
processedRuleMetaValue = srcMeta[ruleMetaKey]
438457
}
439458
case apimodel.MatchString_VARIABLE:
440459
processedRuleMetaValue, exist = g.getVariable(ruleMetaValue.GetValue().GetValue())

0 commit comments

Comments
 (0)