Skip to content

Latest commit

 

History

History
63 lines (43 loc) · 2 KB

0014-continue-traces.md

File metadata and controls

63 lines (43 loc) · 2 KB
  • Start Date: 2022-09-26
  • RFC Type: feature
  • RFC PR: #14

Summary

This RFC proposes a new way to continue a trace when creating nested transactions.

Motivation

The current way we propagate sentry-trace and baggage, is to pass a correctly populated TransactionContext as the first argument to startTransaction().

use Sentry\Tracing\TransactionContext;
use function Sentry\startTransaction;

$transactionContext = TransactionContext::fromHeaders($sentryTraceHeader, $baggageHeader);
$transaction = startTransaction($transactionContext);

In case someone starts another nested transaction without passing in any context, a new trace will be started and the Dynamic Sampling Context is lost as well. Using transactions inside transactions was a workaround as the span summary view was not available back then.

Options Considered

Add TransactionContext::fromParent()

use Sentry\Tracing\TransactionContext;
use function Sentry\startTransaction;

$transactionContext = TransactionContext::fromParent($transaction);
$transaction = startTransaction($transactionContext);

public static function fromParent(Transaction $transaction)
{
    $context = new self();
    $context->traceId = $transaction->getTraceId();
    $context->parentSpanId = $transaction->getParentSpanId();
    $context->sampled = $transaction->getSampled();
    $context->getMetadata()->setBaggage($transaction->getBaggage());

    return $context;
}

Add a third argument to startTransaction()

use Sentry\Tracing\TransactionContext;
use function Sentry\startTransaction;

$transactionContext = new TransactionContext();
$transaction = startTransaction($transactionContext, [], bool $continueTrace = true);

Inside TransactionContext::__contruct, we could check for an ongoing transaction on the Hub and continue the trace automatically.

Drawbacks/Impact

  • This will increase the public API surface of our SDKs
  • Depending on the option, it's either more complex or more magical.