getsentry / getsentry/sentry-python

Don't hold references to objects in telemetry pipeline

未關閉
#5,582 1 則留言 0 個 reaction 已指派 1 人 已被 @sl0thentr0py 認領 在 GitHub 檢視
Improvement Python Quality Improvement Span First
主要語言
Python
星號
2.2k
分支
669
平均合併
1 天 40 分鐘
30 天內合併 PR
212

描述

## Problem

A recurring problem in SDKs is that we hold references to userland objects throughout the event pipeline (scope apply, scrubbing) and sometimes that causes

* data corruption (modify user state)
* race conditions in concurrent flows

There is no real need for us to risk holding references since all we need is to collect data reliably and without locks and blocking user flow.

Some examples of this problem:

* django user lazy object instantiation: [https://github.com/getsentry/sentry-python/issues/5274]()
* go panic: [https://github.com/getsentry/sentry-go/pull/1214]()
* python scrubber modifying user objects: [https://github.com/getsentry/sentry-python/pull/3409]()

## Decision

* eventually once everything is on attributes API (including errors), we will make sure `set_attribute` doesn't hold direct references to userland state and reduce surface area of these races/data corruptions
* this can be through a lazy delegation wrapper object as in my [gist]()
* or just pre serialization in `set_attribute` itself


This is a placeholder task to decide and investigate the references that the span first pipeline holds and try to clean that up.

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。