From 243c2e9901458c25f57a4dd064403f6f1d92e46d Mon Sep 17 00:00:00 2001 From: James Ryans Date: Sun, 14 Jan 2024 09:08:03 +0700 Subject: [PATCH 1/5] Add sync.Mutex to read/write MockBackend startedAt var Signed-off-by: James Ryans --- testbed/runtests.sh | 2 +- testbed/testbed/mock_backend.go | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/testbed/runtests.sh b/testbed/runtests.sh index 629baa7c030f..41a84161b742 100755 --- a/testbed/runtests.sh +++ b/testbed/runtests.sh @@ -19,7 +19,7 @@ TEST_COLORIZE="${SED} 's/PASS/${PASS_COLOR}/' | ${SED} 's/FAIL/${FAIL_COLOR}/'" mkdir -p results/junit -RUN_TESTBED=1 go test -v ${TEST_ARGS} 2>&1 | tee results/testoutput.log | bash -c "${TEST_COLORIZE}" +RUN_TESTBED=1 go test -race -v ${TEST_ARGS} 2>&1 | tee results/testoutput.log | bash -c "${TEST_COLORIZE}" testStatus=${PIPESTATUS[0]} diff --git a/testbed/testbed/mock_backend.go b/testbed/testbed/mock_backend.go index 141d2033e193..880b6231ca4e 100644 --- a/testbed/testbed/mock_backend.go +++ b/testbed/testbed/mock_backend.go @@ -41,9 +41,10 @@ type MockBackend struct { logFile *os.File // Start/stop flags - isStarted bool - stopOnce sync.Once - startedAt time.Time + isStarted bool + stopOnce sync.Once + startedAt time.Time + startMutex sync.Mutex // Recording fields. isRecording bool @@ -100,6 +101,8 @@ func (mb *MockBackend) Start() error { } mb.isStarted = true + mb.startMutex.Lock() + defer mb.startMutex.Unlock() mb.startedAt = time.Now() return nil } @@ -130,6 +133,8 @@ func (mb *MockBackend) EnableRecording() { } func (mb *MockBackend) GetStats() string { + mb.startMutex.Lock() + defer mb.startMutex.Unlock() received := mb.DataItemsReceived() return printer.Sprintf("Received:%10d items (%d/sec)", received, int(float64(received)/time.Since(mb.startedAt).Seconds())) } From 6a61430c6f9de421332f8d2c12a871fcc4dbbc14 Mon Sep 17 00:00:00 2001 From: James Ryans Date: Sun, 14 Jan 2024 09:08:31 +0700 Subject: [PATCH 2/5] Add sync.Mutex to read/write LoadGenerator startedAt var Signed-off-by: James Ryans --- testbed/testbed/load_generator.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/testbed/testbed/load_generator.go b/testbed/testbed/load_generator.go index 8fa773228c4b..53af241624d9 100644 --- a/testbed/testbed/load_generator.go +++ b/testbed/testbed/load_generator.go @@ -58,6 +58,7 @@ type ProviderSender struct { // Number of data items (spans or metric data points) sent. dataItemsSent atomic.Uint64 startedAt time.Time + startMutex sync.Mutex // Number of permanent errors received permanentErrors atomic.Uint64 @@ -116,6 +117,8 @@ func (ps *ProviderSender) Start(options LoadOptions) { // Begin generation go ps.generate() + ps.startMutex.Lock() + defer ps.startMutex.Unlock() ps.startedAt = time.Now() } @@ -148,6 +151,8 @@ func (ps *ProviderSender) IsReady() bool { // GetStats returns the stats as a printable string. func (ps *ProviderSender) GetStats() string { + ps.startMutex.Lock() + defer ps.startMutex.Unlock() sent := ps.DataItemsSent() return printer.Sprintf("Sent:%10d %s (%d/sec)", sent, ps.sendType, int(float64(sent)/time.Since(ps.startedAt).Seconds())) } From 43dc5f47362d15e3230164d9cbc00e2f66fd3d91 Mon Sep 17 00:00:00 2001 From: James Ryans Date: Sun, 14 Jan 2024 09:11:35 +0700 Subject: [PATCH 3/5] Move MockBackend numSpansReceived addition after ConsumeTraces Signed-off-by: James Ryans --- testbed/testbed/mock_backend.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/testbed/testbed/mock_backend.go b/testbed/testbed/mock_backend.go index 880b6231ca4e..982e1c63cdca 100644 --- a/testbed/testbed/mock_backend.go +++ b/testbed/testbed/mock_backend.go @@ -195,8 +195,6 @@ func (tc *MockTraceConsumer) ConsumeTraces(_ context.Context, td ptrace.Traces) return err } - tc.numSpansReceived.Add(uint64(td.SpanCount())) - rs := td.ResourceSpans() for i := 0; i < rs.Len(); i++ { ils := rs.At(i).ScopeSpans() @@ -226,6 +224,7 @@ func (tc *MockTraceConsumer) ConsumeTraces(_ context.Context, td ptrace.Traces) } tc.backend.ConsumeTrace(td) + tc.numSpansReceived.Add(uint64(td.SpanCount())) return nil } From 08e3302f3899cf5af29962a96790c25c6d5f8920 Mon Sep 17 00:00:00 2001 From: James Ryans Date: Sun, 14 Jan 2024 09:20:39 +0700 Subject: [PATCH 4/5] Get td.SpanCount() before batchTraces move the spans Signed-off-by: James Ryans --- receiver/opencensusreceiver/internal/octrace/opencensus.go | 3 ++- receiver/zipkinreceiver/trace_receiver.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/receiver/opencensusreceiver/internal/octrace/opencensus.go b/receiver/opencensusreceiver/internal/octrace/opencensus.go index d15cd3f26ab3..f85e5e5a684c 100644 --- a/receiver/opencensusreceiver/internal/octrace/opencensus.go +++ b/receiver/opencensusreceiver/internal/octrace/opencensus.go @@ -131,8 +131,9 @@ func (ocr *Receiver) processReceivedMsg( func (ocr *Receiver) sendToNextConsumer(longLivedRPCCtx context.Context, td ptrace.Traces) error { ctx := ocr.obsrecv.StartTracesOp(longLivedRPCCtx) + numReceivedSpans := td.SpanCount() err := ocr.nextConsumer.ConsumeTraces(ctx, td) - ocr.obsrecv.EndTracesOp(ctx, receiverDataFormat, td.SpanCount(), err) + ocr.obsrecv.EndTracesOp(ctx, receiverDataFormat, numReceivedSpans, err) return err } diff --git a/receiver/zipkinreceiver/trace_receiver.go b/receiver/zipkinreceiver/trace_receiver.go index 4a39753d3a64..c82f00bc779b 100644 --- a/receiver/zipkinreceiver/trace_receiver.go +++ b/receiver/zipkinreceiver/trace_receiver.go @@ -234,13 +234,14 @@ func (zr *zipkinReceiver) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } + numReceivedSpans := td.SpanCount() consumerErr := zr.nextConsumer.ConsumeTraces(ctx, td) receiverTagValue := zipkinV2TagValue if asZipkinv1 { receiverTagValue = zipkinV1TagValue } - obsrecv.EndTracesOp(ctx, receiverTagValue, td.SpanCount(), consumerErr) + obsrecv.EndTracesOp(ctx, receiverTagValue, numReceivedSpans, consumerErr) if consumerErr == nil { // Send back the response "Accepted" as // required at https://zipkin.io/zipkin-api/#/default/post_spans From 5c7a08ff070addacf4d88e30321be02b5b7cbf81 Mon Sep 17 00:00:00 2001 From: James Ryans Date: Sun, 14 Jan 2024 13:43:03 +0700 Subject: [PATCH 5/5] Remove testbed data race detection by default Signed-off-by: James Ryans --- testbed/runtests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testbed/runtests.sh b/testbed/runtests.sh index 41a84161b742..629baa7c030f 100755 --- a/testbed/runtests.sh +++ b/testbed/runtests.sh @@ -19,7 +19,7 @@ TEST_COLORIZE="${SED} 's/PASS/${PASS_COLOR}/' | ${SED} 's/FAIL/${FAIL_COLOR}/'" mkdir -p results/junit -RUN_TESTBED=1 go test -race -v ${TEST_ARGS} 2>&1 | tee results/testoutput.log | bash -c "${TEST_COLORIZE}" +RUN_TESTBED=1 go test -v ${TEST_ARGS} 2>&1 | tee results/testoutput.log | bash -c "${TEST_COLORIZE}" testStatus=${PIPESTATUS[0]}