Skip to content

Commit 9d38d84

Browse files
[testbed] Add compression end-to-end tests for SAPM (open-telemetry#23455)
- Added gzip and zstd tests to SAPM trace test. - Modified GenerateTraces to generate more variable data to make sure it is a more fair comparison when compression is enabled (otherwise it was compressing too well and was not representative of real-world workloads). This makes easier to see the impact of added zstd compression done in open-telemetry#23257
1 parent 9a5f723 commit 9d38d84

File tree

5 files changed

+44
-15
lines changed

5 files changed

+44
-15
lines changed

testbed/datareceivers/sapm.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ import (
2121
// SapmDataReceiver implements Sapm format receiver.
2222
type SapmDataReceiver struct {
2323
testbed.DataReceiverBase
24-
receiver receiver.Traces
24+
receiver receiver.Traces
25+
compression string
2526
}
2627

2728
// NewSapmDataReceiver creates a new SapmDataReceiver.
28-
func NewSapmDataReceiver(port int) *SapmDataReceiver {
29-
return &SapmDataReceiver{DataReceiverBase: testbed.DataReceiverBase{Port: port}}
29+
func NewSapmDataReceiver(port int, compression string) *SapmDataReceiver {
30+
return &SapmDataReceiver{DataReceiverBase: testbed.DataReceiverBase{Port: port}, compression: compression}
3031
}
3132

3233
// Start the receiver.
@@ -57,12 +58,17 @@ func (sr *SapmDataReceiver) Stop() error {
5758

5859
// GenConfigYAMLStr returns exporter config for the agent.
5960
func (sr *SapmDataReceiver) GenConfigYAMLStr() string {
61+
disableCompression := false
62+
if sr.compression == "" {
63+
disableCompression = true
64+
}
6065
// Note that this generates an exporter config for agent.
6166
return fmt.Sprintf(`
6267
sapm:
6368
endpoint: "http://127.0.0.1:%d/v2/trace"
64-
disable_compression: true
65-
access_token_passthrough: true`, sr.Port)
69+
disable_compression: %v
70+
compression: %s
71+
access_token_passthrough: true`, sr.Port, disableCompression, sr.compression)
6672
}
6773

6874
// ProtocolName returns protocol name as it is specified in Collector config.

testbed/datasenders/sapm.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,34 @@ import (
1919
type SapmDataSender struct {
2020
testbed.DataSenderBase
2121
consumer.Traces
22+
compression string
2223
}
2324

2425
// Ensure SapmDataSender implements TraceDataSenderOld.
2526
var _ testbed.TraceDataSender = (*SapmDataSender)(nil)
2627

2728
// NewSapmDataSender creates a new Sapm protocol sender that will send
2829
// to the specified port after Start is called.
29-
func NewSapmDataSender(port int) *SapmDataSender {
30+
func NewSapmDataSender(port int, compression string) *SapmDataSender {
3031
return &SapmDataSender{
3132
DataSenderBase: testbed.DataSenderBase{
3233
Port: port,
3334
Host: testbed.DefaultHost,
3435
},
36+
compression: compression,
3537
}
3638
}
3739

3840
// Start the sender.
3941
func (je *SapmDataSender) Start() error {
4042
factory := sapmexporter.NewFactory()
4143
cfg := &sapmexporter.Config{
42-
Endpoint: fmt.Sprintf("http://%s/v2/trace", je.GetEndpoint()),
43-
DisableCompression: true,
44-
AccessToken: "MyToken",
44+
Endpoint: fmt.Sprintf("http://%s/v2/trace", je.GetEndpoint()),
45+
Compression: je.compression,
46+
AccessToken: "MyToken",
47+
}
48+
if je.compression == "" {
49+
cfg.DisableCompression = true
4550
}
4651
params := exportertest.NewNopCreateSettings()
4752
params.Logger = zap.L()

testbed/stabilitytests/trace_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ func TestStabilityTracesOpenCensus(t *testing.T) {
5454
func TestStabilityTracesSAPM(t *testing.T) {
5555
scenarios.Scenario10kItemsPerSecond(
5656
t,
57-
datasenders.NewSapmDataSender(testbed.GetAvailablePort(t)),
58-
datareceivers.NewSapmDataReceiver(testbed.GetAvailablePort(t)),
57+
datasenders.NewSapmDataSender(testbed.GetAvailablePort(t), ""),
58+
datareceivers.NewSapmDataReceiver(testbed.GetAvailablePort(t), ""),
5959
testbed.ResourceSpec{
6060
ExpectedMaxCPU: 40,
6161
ExpectedMaxRAM: 100,

testbed/testbed/data_providers.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (dp *perfTestDataProvider) GenerateTraces() (ptrace.Traces, bool) {
6161
traceID := dp.traceIDSequence.Add(1)
6262
for i := 0; i < dp.options.ItemsPerBatch; i++ {
6363

64-
startTime := time.Now()
64+
startTime := time.Now().Add(time.Duration(i+int(traceID)*1000) * time.Second)
6565
endTime := startTime.Add(time.Millisecond)
6666

6767
spanID := dp.dataItemsGenerated.Add(1)
@@ -71,7 +71,7 @@ func (dp *perfTestDataProvider) GenerateTraces() (ptrace.Traces, bool) {
7171
// Create a span.
7272
span.SetTraceID(idutils.UInt64ToTraceID(0, traceID))
7373
span.SetSpanID(idutils.UInt64ToSpanID(spanID))
74-
span.SetName("load-generator-span")
74+
span.SetName("load-generator-span" + strconv.FormatUint(spanID+traceID*1000, 10))
7575
span.SetKind(ptrace.SpanKindClient)
7676
attrs := span.Attributes()
7777
attrs.PutInt("load_generator.span_seq_num", int64(spanID))

testbed/tests/trace_test.go

+20-2
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,31 @@ func TestTrace10kSPS(t *testing.T) {
9393
},
9494
{
9595
"SAPM",
96-
datasenders.NewSapmDataSender(testbed.GetAvailablePort(t)),
97-
datareceivers.NewSapmDataReceiver(testbed.GetAvailablePort(t)),
96+
datasenders.NewSapmDataSender(testbed.GetAvailablePort(t), ""),
97+
datareceivers.NewSapmDataReceiver(testbed.GetAvailablePort(t), ""),
9898
testbed.ResourceSpec{
9999
ExpectedMaxCPU: 32,
100100
ExpectedMaxRAM: 100,
101101
},
102102
},
103+
{
104+
"SAPM-gzip",
105+
datasenders.NewSapmDataSender(testbed.GetAvailablePort(t), "gzip"),
106+
datareceivers.NewSapmDataReceiver(testbed.GetAvailablePort(t), "gzip"),
107+
testbed.ResourceSpec{
108+
ExpectedMaxCPU: 35,
109+
ExpectedMaxRAM: 110,
110+
},
111+
},
112+
{
113+
"SAPM-zstd",
114+
datasenders.NewSapmDataSender(testbed.GetAvailablePort(t), "zstd"),
115+
datareceivers.NewSapmDataReceiver(testbed.GetAvailablePort(t), "zstd"),
116+
testbed.ResourceSpec{
117+
ExpectedMaxCPU: 32,
118+
ExpectedMaxRAM: 300,
119+
},
120+
},
103121
{
104122
"Zipkin",
105123
datasenders.NewZipkinDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)),

0 commit comments

Comments
 (0)