From e526943ba8dfe9e3256b026184ebda5036e170c7 Mon Sep 17 00:00:00 2001 From: Andrew Wilkins Date: Tue, 20 Oct 2020 13:58:41 +0800 Subject: [PATCH] Transaction.Discard sets TransactionData to nil Fix Transaction.Discard so that it sets TransactionData to nil, like its documentation says. This is necessary to avoid Transaction.End from enqueuing a transaction after it has been discarded. --- transaction.go | 1 + transaction_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/transaction.go b/transaction.go index 9d10a6886..60989512a 100644 --- a/transaction.go +++ b/transaction.go @@ -246,6 +246,7 @@ func (tx *Transaction) Discard() { return } tx.reset(tx.tracer) + tx.TransactionData = nil } // End enqueues tx for sending to the Elastic APM server. diff --git a/transaction_test.go b/transaction_test.go index d625516e5..657a5f48f 100644 --- a/transaction_test.go +++ b/transaction_test.go @@ -300,6 +300,20 @@ func TestTransactionSampleRateOmission(t *testing.T) { } } +func TestTransactionDiscard(t *testing.T) { + tracer, transport := transporttest.NewRecorderTracer() + defer tracer.Close() + + tx := tracer.StartTransaction("name", "type") + tx.Discard() + assert.Nil(t, tx.TransactionData) + tx.End() // ending after discarding should be a no-op + + tracer.Flush(nil) + payloads := transport.Payloads() + require.Empty(t, payloads) +} + func BenchmarkTransaction(b *testing.B) { tracer, err := apm.NewTracer("service", "") require.NoError(b, err)