diff --git a/model/converter/thrift/jaeger/sampling_from_domain.go b/model/converter/thrift/jaeger/sampling_from_domain.go index 563e5416559..c776072cd19 100644 --- a/model/converter/thrift/jaeger/sampling_from_domain.go +++ b/model/converter/thrift/jaeger/sampling_from_domain.go @@ -67,11 +67,12 @@ func convertPerOperationFromDomain(s *api_v2.PerOperationSamplingStrategies) *sa DefaultLowerBoundTracesPerSecond: s.GetDefaultLowerBoundTracesPerSecond(), DefaultUpperBoundTracesPerSecond: &s.DefaultUpperBoundTracesPerSecond, } - if s.GetPerOperationStrategies() != nil { - r.PerOperationStrategies = make([]*sampling.OperationSamplingStrategy, len(s.GetPerOperationStrategies())) - for i, k := range s.PerOperationStrategies { - r.PerOperationStrategies[i] = convertOperationFromDomain(k) - } + + perOp := s.GetPerOperationStrategies() + // Default to empty array so that json.Marshal returns [] instead of null (Issue #3891). + r.PerOperationStrategies = make([]*sampling.OperationSamplingStrategy, len(perOp)) + for i, k := range perOp { + r.PerOperationStrategies[i] = convertOperationFromDomain(k) } return r } diff --git a/model/converter/thrift/jaeger/sampling_from_domain_test.go b/model/converter/thrift/jaeger/sampling_from_domain_test.go index 804397da1d8..8bc2280d3c5 100644 --- a/model/converter/thrift/jaeger/sampling_from_domain_test.go +++ b/model/converter/thrift/jaeger/sampling_from_domain_test.go @@ -116,7 +116,13 @@ func TestConvertPerOperationStrategyFromDomain(t *testing.T) { PerOperationStrategies: []*sampling.OperationSamplingStrategy{{Operation: "fao"}}, }, }, - {}, + { + in: &api_v2.PerOperationSamplingStrategies{DefaultSamplingProbability: 15.2, DefaultUpperBoundTracesPerSecond: a, DefaultLowerBoundTracesPerSecond: 2}, + expected: &sampling.PerOperationSamplingStrategies{ + DefaultSamplingProbability: 15.2, DefaultUpperBoundTracesPerSecond: &a, DefaultLowerBoundTracesPerSecond: 2, + PerOperationStrategies: []*sampling.OperationSamplingStrategy{}, + }, + }, } for _, test := range tests { o := convertPerOperationFromDomain(test.in)