You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"end timestamp in span is smaller than start timestamp",
));
}
}
(_,None) => {
// XXX: Maybe do the same as event.timestamp?
returnErr(ProcessingAction::InvalidTransaction(
"span is missing timestamp",
));
}
(None, _) => {
// XXX: Maybe copy timestamp over?
returnErr(ProcessingAction::InvalidTransaction(
"span is missing start_timestamp",
));
}
}
In practice, it's common in SDKs that a transaction is finished while an asynchronous task didn't complete yet. This in turn results in confusion, particularly when SDKs are being developed as the engineer doesn't see any transactions showing up.
Different SDKs chose different approaches on how to handle it. But it's mainly:
Exclude Spans that are not finished before sending the transaction out
Set the end timestamp to be the same as the transaction and status timeline_exceeded
We've identified the different implementations in the SDKs and are now leaning towards the latter with the reasoning that it's better to see what was going on during the transaction (could affect performance) even though it didn't complete. And the status code will help clearly indicate that this span didn't complete with the transaction.
Either way, handling this in the SDK adds to the complexity that now must iterate over all spans before capturing transactions to handle this.
With that, we agreed in a DACI that Relay should be changed to deal with transactions that contain unfinished spans:
Relay will no longer drop transactions that contain Spans without end timestamp
In this approach, the SDKs can remove the logic of handling unfinished spans. Relay now will be free to take the best approach to the problem:
Relay will add the transaction’s timestamp to the Span and the status deadline_exceeded, to indicate this span didn't complete during the transaction.
The text was updated successfully, but these errors were encountered:
https://getsentry.atlassian.net/browse/INGEST-1109
Currently, Relay will drop transactions that contain Spans that don't have an end timestamp.
The code in question:
relay/relay-general/src/store/transactions.rs
Lines 110 to 130 in 5696786
relay/relay-general/src/store/transactions.rs
Lines 110 to 130 in 5696786
In practice, it's common in SDKs that a transaction is finished while an asynchronous task didn't complete yet. This in turn results in confusion, particularly when SDKs are being developed as the engineer doesn't see any transactions showing up.
Different SDKs chose different approaches on how to handle it. But it's mainly:
timeline_exceeded
We've identified the different implementations in the SDKs and are now leaning towards the latter with the reasoning that it's better to see what was going on during the transaction (could affect performance) even though it didn't complete. And the status code will help clearly indicate that this span didn't complete with the transaction.
Either way, handling this in the SDK adds to the complexity that now must iterate over all spans before capturing transactions to handle this.
With that, we agreed in a DACI that Relay should be changed to deal with transactions that contain unfinished spans:
Relay will no longer drop transactions that contain Spans without end timestamp
In this approach, the SDKs can remove the logic of handling unfinished spans. Relay now will be free to take the best approach to the problem:
Relay will add the transaction’s timestamp to the Span and the status
deadline_exceeded
, to indicate this span didn't complete during the transaction.The text was updated successfully, but these errors were encountered: