in strategy/sampling/centralized_sampling_rule_manifest.go [39:83]
func (m *CentralizedManifest) putRule(svcRule *SamplingRule) (r *CentralizedRule, err error) {
defer func() {
if x := recover(); x != nil {
err = fmt.Errorf("%v", x)
}
}()
name := *svcRule.RuleName
// Default rule
if name == defaultRule {
m.mu.RLock()
r = m.Default
m.mu.RUnlock()
// Update rule if already exists
if r != nil {
m.updateDefaultRule(svcRule)
return
}
// Create Default rule
r = m.createDefaultRule(svcRule)
return
}
// User-defined rule
m.mu.RLock()
r, ok := m.Index[name]
m.mu.RUnlock()
// Create rule if it does not exist
if !ok {
r = m.createUserRule(svcRule)
return
}
// Update existing rule
m.updateUserRule(r, svcRule)
return
}