in strategy/sampling/sampling_rule_manifest.go [87:139]
func processManifest(srm *RuleManifest) error {
if srm == nil {
return errors.New("sampling rule manifest must not be nil")
}
if srm.Version != 1 && srm.Version != 2 {
return fmt.Errorf("sampling rule manifest version %d not supported", srm.Version)
}
if srm.Default == nil {
return errors.New("sampling rule manifest must include a default rule")
}
if srm.Default.URLPath != "" || srm.Default.ServiceName != "" || srm.Default.HTTPMethod != "" {
return errors.New("the default rule must not specify values for url_path, service_name, or http_method")
}
if srm.Default.FixedTarget < 0 || srm.Default.Rate < 0 {
return errors.New("the default rule must specify non-negative values for fixed_target and rate")
}
c := &utils.DefaultClock{}
srm.Default.reservoir = &Reservoir{
clock: c,
reservoir: &reservoir{
capacity: srm.Default.FixedTarget,
},
}
if srm.Rules != nil {
for _, r := range srm.Rules {
if srm.Version == 1 {
if err := validateVersion1(r); err != nil {
return err
}
r.Host = r.ServiceName // V1 sampling rule contains service name and not host
r.ServiceName = ""
}
if srm.Version == 2 {
if err := validateVersion2(r); err != nil {
return err
}
}
r.reservoir = &Reservoir{
clock: c,
reservoir: &reservoir{
capacity: r.FixedTarget,
},
}
}
}
return nil
}