in strategy/sampling/centralized_sampling_rule_manifest.go [171:213]
func (m *CentralizedManifest) createDefaultRule(svcRule *SamplingRule) *CentralizedRule {
// Create CentralizedRule from SamplingRule
clock := &utils.DefaultClock{}
rand := &utils.DefaultRand{}
p := &Properties{
FixedTarget: *svcRule.ReservoirSize,
Rate: *svcRule.FixedRate,
}
r := &reservoir{
capacity: *svcRule.ReservoirSize,
}
cr := &CentralizedReservoir{
reservoir: r,
interval: defaultInterval,
}
csr := &CentralizedRule{
ruleName: *svcRule.RuleName,
reservoir: cr,
Properties: p,
clock: clock,
rand: rand,
}
m.mu.Lock()
defer m.mu.Unlock()
// Return early if rule already exists
if d := m.Default; d != nil {
return d
}
// Update manifest if rule does not exist
m.Default = csr
// Update index
m.Index[*svcRule.RuleName] = csr
return csr
}