fix(internal): crash in ContextVar#17407
Conversation
Codeowners resolved as |
|
✅ Tests 🎉 All green!❄️ No new flaky tests detected 🔗 Commit SHA: 9e9ebbc | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback! |
|
😱 |
Performance SLOsComparing candidate kowalski/fix-internal-crash-in-contextvar (9e9ebbc) with baseline main (56f2d79) 📈 Performance Regressions (2 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 104.429µs (SLO: <130.000µs 📉 -19.7%) vs baseline: +2.1% Memory: ✅ 43.878MB (SLO: <46.000MB -4.6%) vs baseline: +5.5% ✅ add_inplace_aspectTime: ✅ 101.563µs (SLO: <130.000µs 📉 -21.9%) vs baseline: -0.8% Memory: ✅ 43.845MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ add_inplace_noaspectTime: ✅ 28.242µs (SLO: <40.000µs 📉 -29.4%) vs baseline: -0.1% Memory: ✅ 44.008MB (SLO: <46.000MB -4.3%) vs baseline: +5.9% ✅ add_noaspectTime: ✅ 49.723µs (SLO: <70.000µs 📉 -29.0%) vs baseline: +1.8% Memory: ✅ 43.846MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ bytearray_aspectTime: ✅ 254.377µs (SLO: <400.000µs 📉 -36.4%) vs baseline: -1.7% Memory: ✅ 43.861MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ bytearray_extend_aspectTime: ✅ 648.718µs (SLO: <800.000µs 📉 -18.9%) vs baseline: +0.1% Memory: ✅ 43.858MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ bytearray_extend_noaspectTime: ✅ 265.983µs (SLO: <400.000µs 📉 -33.5%) vs baseline: -1.0% Memory: ✅ 43.845MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ bytearray_noaspectTime: ✅ 140.861µs (SLO: <300.000µs 📉 -53.0%) vs baseline: -0.2% Memory: ✅ 43.848MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ bytes_aspectTime: ✅ 219.624µs (SLO: <300.000µs 📉 -26.8%) vs baseline: -1.7% Memory: ✅ 43.876MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ bytes_noaspectTime: ✅ 135.826µs (SLO: <200.000µs 📉 -32.1%) vs baseline: -1.1% Memory: ✅ 43.857MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ bytesio_aspectTime: ✅ 3.799ms (SLO: <5.000ms 📉 -24.0%) vs baseline: -0.6% Memory: ✅ 43.884MB (SLO: <46.000MB -4.6%) vs baseline: +5.5% ✅ bytesio_noaspectTime: ✅ 320.535µs (SLO: <420.000µs 📉 -23.7%) vs baseline: -0.2% Memory: ✅ 43.903MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ capitalize_aspectTime: ✅ 88.557µs (SLO: <300.000µs 📉 -70.5%) vs baseline: -0.4% Memory: ✅ 43.858MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ capitalize_noaspectTime: ✅ 254.527µs (SLO: <300.000µs 📉 -15.2%) vs baseline: -1.5% Memory: ✅ 43.912MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ casefold_aspectTime: ✅ 88.034µs (SLO: <500.000µs 📉 -82.4%) vs baseline: -1.0% Memory: ✅ 43.841MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ casefold_noaspectTime: ✅ 313.700µs (SLO: <500.000µs 📉 -37.3%) vs baseline: +0.6% Memory: ✅ 43.839MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ decode_aspectTime: ✅ 87.036µs (SLO: <100.000µs 📉 -13.0%) vs baseline: ~same Memory: ✅ 43.859MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ decode_noaspectTime: ✅ 155.988µs (SLO: <210.000µs 📉 -25.7%) vs baseline: -0.3% Memory: ✅ 43.813MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ encode_aspectTime: ✅ 84.552µs (SLO: <200.000µs 📉 -57.7%) vs baseline: +0.6% Memory: ✅ 43.922MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ encode_noaspectTime: ✅ 143.853µs (SLO: <200.000µs 📉 -28.1%) vs baseline: +0.2% Memory: ✅ 43.833MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ format_aspectTime: ✅ 14.623ms (SLO: <19.200ms 📉 -23.8%) vs baseline: ~same Memory: ✅ 43.843MB (SLO: <46.000MB -4.7%) vs baseline: +4.9% ✅ format_map_aspectTime: ✅ 16.383ms (SLO: <21.500ms 📉 -23.8%) vs baseline: -0.4% Memory: ✅ 43.919MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ format_map_noaspectTime: ✅ 385.260µs (SLO: <500.000µs 📉 -22.9%) vs baseline: +3.4% Memory: ✅ 43.869MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ format_noaspectTime: ✅ 308.570µs (SLO: <500.000µs 📉 -38.3%) vs baseline: -0.4% Memory: ✅ 43.828MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ index_aspectTime: ✅ 136.443µs (SLO: <300.000µs 📉 -54.5%) vs baseline: 📈 +10.1% Memory: ✅ 43.884MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ index_noaspectTime: ✅ 40.502µs (SLO: <300.000µs 📉 -86.5%) vs baseline: +0.6% Memory: ✅ 43.903MB (SLO: <46.000MB -4.6%) vs baseline: +5.6% ✅ join_aspectTime: ✅ 211.527µs (SLO: <300.000µs 📉 -29.5%) vs baseline: -0.2% Memory: ✅ 43.846MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ join_noaspectTime: ✅ 143.025µs (SLO: <300.000µs 📉 -52.3%) vs baseline: -0.9% Memory: ✅ 43.819MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ ljust_aspectTime: ✅ 576.777µs (SLO: <700.000µs 📉 -17.6%) vs baseline: 📈 +12.9% Memory: ✅ 43.827MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ ljust_noaspectTime: ✅ 253.789µs (SLO: <300.000µs 📉 -15.4%) vs baseline: -2.7% Memory: ✅ 43.876MB (SLO: <46.000MB -4.6%) vs baseline: +5.5% ✅ lower_aspectTime: ✅ 299.053µs (SLO: <500.000µs 📉 -40.2%) vs baseline: -3.1% Memory: ✅ 43.918MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ lower_noaspectTime: ✅ 239.499µs (SLO: <300.000µs 📉 -20.2%) vs baseline: -1.3% Memory: ✅ 43.795MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ lstrip_aspectTime: ✅ 0.277ms (SLO: <3.000ms 📉 -90.8%) vs baseline: -1.1% Memory: ✅ 43.783MB (SLO: <46.000MB -4.8%) vs baseline: +5.0% ✅ lstrip_noaspectTime: ✅ 0.176ms (SLO: <3.000ms 📉 -94.1%) vs baseline: -2.1% Memory: ✅ 43.872MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ modulo_aspectTime: ✅ 14.310ms (SLO: <18.750ms 📉 -23.7%) vs baseline: ~same Memory: ✅ 44.012MB (SLO: <46.000MB -4.3%) vs baseline: +5.4% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.806ms (SLO: <19.350ms 📉 -23.5%) vs baseline: -0.3% Memory: ✅ 43.838MB (SLO: <46.000MB -4.7%) vs baseline: +4.9% ✅ modulo_aspect_for_bytesTime: ✅ 14.448ms (SLO: <18.900ms 📉 -23.6%) vs baseline: ~same Memory: ✅ 43.920MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.634ms (SLO: <19.150ms 📉 -23.6%) vs baseline: +0.2% Memory: ✅ 43.926MB (SLO: <46.000MB -4.5%) vs baseline: +5.4% ✅ modulo_noaspectTime: ✅ 0.359ms (SLO: <3.000ms 📉 -88.0%) vs baseline: -1.9% Memory: ✅ 43.939MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ replace_aspectTime: ✅ 18.503ms (SLO: <24.000ms 📉 -22.9%) vs baseline: +0.2% Memory: ✅ 43.944MB (SLO: <46.000MB -4.5%) vs baseline: +5.6% ✅ replace_noaspectTime: ✅ 284.260µs (SLO: <400.000µs 📉 -28.9%) vs baseline: +0.7% Memory: ✅ 43.782MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ repr_aspectTime: ✅ 322.708µs (SLO: <420.000µs 📉 -23.2%) vs baseline: +0.2% Memory: ✅ 43.901MB (SLO: <46.000MB -4.6%) vs baseline: +5.3% ✅ repr_noaspectTime: ✅ 46.959µs (SLO: <90.000µs 📉 -47.8%) vs baseline: -0.5% Memory: ✅ 43.828MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ rstrip_aspectTime: ✅ 387.882µs (SLO: <500.000µs 📉 -22.4%) vs baseline: -1.1% Memory: ✅ 43.915MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ rstrip_noaspectTime: ✅ 183.222µs (SLO: <300.000µs 📉 -38.9%) vs baseline: -1.3% Memory: ✅ 43.793MB (SLO: <46.000MB -4.8%) vs baseline: +5.4% ✅ slice_aspectTime: ✅ 185.970µs (SLO: <300.000µs 📉 -38.0%) vs baseline: +1.4% Memory: ✅ 43.876MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ slice_noaspectTime: ✅ 54.410µs (SLO: <90.000µs 📉 -39.5%) vs baseline: +0.7% Memory: ✅ 43.851MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ stringio_aspectTime: ✅ 4.424ms (SLO: <5.000ms 📉 -11.5%) vs baseline: 📈 +14.0% Memory: ✅ 43.845MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ stringio_noaspectTime: ✅ 345.319µs (SLO: <500.000µs 📉 -30.9%) vs baseline: -1.9% Memory: ✅ 43.775MB (SLO: <46.000MB -4.8%) vs baseline: +5.0% ✅ strip_aspectTime: ✅ 278.354µs (SLO: <350.000µs 📉 -20.5%) vs baseline: -2.0% Memory: ✅ 43.793MB (SLO: <46.000MB -4.8%) vs baseline: +5.5% ✅ strip_noaspectTime: ✅ 177.725µs (SLO: <240.000µs 📉 -25.9%) vs baseline: -1.8% Memory: ✅ 43.780MB (SLO: <46.000MB -4.8%) vs baseline: +5.0% ✅ swapcase_aspectTime: ✅ 338.247µs (SLO: <500.000µs 📉 -32.4%) vs baseline: -1.7% Memory: ✅ 43.861MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ swapcase_noaspectTime: ✅ 275.227µs (SLO: <400.000µs 📉 -31.2%) vs baseline: -1.6% Memory: ✅ 43.861MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ title_aspectTime: ✅ 324.126µs (SLO: <500.000µs 📉 -35.2%) vs baseline: -1.8% Memory: ✅ 43.850MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ title_noaspectTime: ✅ 260.521µs (SLO: <400.000µs 📉 -34.9%) vs baseline: -2.2% Memory: ✅ 43.914MB (SLO: <46.000MB -4.5%) vs baseline: +5.7% ✅ translate_aspectTime: ✅ 500.523µs (SLO: <700.000µs 📉 -28.5%) vs baseline: -1.5% Memory: ✅ 43.923MB (SLO: <46.000MB -4.5%) vs baseline: +5.7% ✅ translate_noaspectTime: ✅ 429.512µs (SLO: <500.000µs 📉 -14.1%) vs baseline: -2.1% Memory: ✅ 43.889MB (SLO: <46.000MB -4.6%) vs baseline: +5.3% ✅ upper_aspectTime: ✅ 302.199µs (SLO: <500.000µs 📉 -39.6%) vs baseline: -1.6% Memory: ✅ 43.921MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ upper_noaspectTime: ✅ 237.480µs (SLO: <400.000µs 📉 -40.6%) vs baseline: -1.9% Memory: ✅ 43.815MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 522.642µs (SLO: <700.000µs 📉 -25.3%) vs baseline: 📈 +20.3% Memory: ✅ 43.853MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ ospathbasename_noaspectTime: ✅ 432.612µs (SLO: <700.000µs 📉 -38.2%) vs baseline: -2.4% Memory: ✅ 43.944MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ ospathjoin_aspectTime: ✅ 627.195µs (SLO: <700.000µs 📉 -10.4%) vs baseline: -1.3% Memory: ✅ 43.859MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ ospathjoin_noaspectTime: ✅ 644.732µs (SLO: <700.000µs -7.9%) vs baseline: -0.5% Memory: ✅ 43.807MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ ospathnormcase_aspectTime: ✅ 354.423µs (SLO: <700.000µs 📉 -49.4%) vs baseline: +0.7% Memory: ✅ 43.819MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ ospathnormcase_noaspectTime: ✅ 359.388µs (SLO: <700.000µs 📉 -48.7%) vs baseline: -2.7% Memory: ✅ 43.722MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ ospathsplit_aspectTime: ✅ 483.518µs (SLO: <700.000µs 📉 -30.9%) vs baseline: -2.9% Memory: ✅ 43.792MB (SLO: <46.000MB -4.8%) vs baseline: +5.1% ✅ ospathsplit_noaspectTime: ✅ 499.945µs (SLO: <700.000µs 📉 -28.6%) vs baseline: -0.9% Memory: ✅ 43.853MB (SLO: <46.000MB -4.7%) vs baseline: +5.6% ✅ ospathsplitdrive_aspectTime: ✅ 376.408µs (SLO: <700.000µs 📉 -46.2%) vs baseline: -0.8% Memory: ✅ 43.764MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ ospathsplitdrive_noaspectTime: ✅ 72.578µs (SLO: <700.000µs 📉 -89.6%) vs baseline: -0.3% Memory: ✅ 43.793MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ ospathsplitext_aspectTime: ✅ 467.712µs (SLO: <700.000µs 📉 -33.2%) vs baseline: +1.3% Memory: ✅ 43.886MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ ospathsplitext_noaspectTime: ✅ 469.795µs (SLO: <700.000µs 📉 -32.9%) vs baseline: -0.1% Memory: ✅ 43.826MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% 🟡 Near SLO Breach (5 suites)🟡 djangosimple - 30/30✅ appsecTime: ✅ 19.820ms (SLO: <22.300ms 📉 -11.1%) vs baseline: -0.2% Memory: ✅ 69.334MB (SLO: <73.500MB -5.7%) vs baseline: +5.1% ✅ exception-replay-enabledTime: ✅ 1.341ms (SLO: <1.450ms -7.5%) vs baseline: +0.1% Memory: ✅ 67.574MB (SLO: <71.500MB -5.5%) vs baseline: +5.2% ✅ iastTime: ✅ 19.864ms (SLO: <22.250ms 📉 -10.7%) vs baseline: +0.2% Memory: ✅ 69.354MB (SLO: <75.000MB -7.5%) vs baseline: +5.3% ✅ profilerTime: ✅ 15.127ms (SLO: <16.550ms -8.6%) vs baseline: ~same Memory: ✅ 60.145MB (SLO: <61.000MB 🟡 -1.4%) vs baseline: +5.4% ✅ resource-renamingTime: ✅ 19.730ms (SLO: <21.750ms -9.3%) vs baseline: -0.1% Memory: ✅ 69.255MB (SLO: <73.500MB -5.8%) vs baseline: +5.1% ✅ span-code-originTime: ✅ 20.225ms (SLO: <28.200ms 📉 -28.3%) vs baseline: +1.4% Memory: ✅ 69.394MB (SLO: <75.000MB -7.5%) vs baseline: +5.1% ✅ tracerTime: ✅ 19.856ms (SLO: <21.750ms -8.7%) vs baseline: +0.2% Memory: ✅ 69.383MB (SLO: <75.000MB -7.5%) vs baseline: +5.2% ✅ tracer-and-profilerTime: ✅ 21.136ms (SLO: <23.500ms 📉 -10.1%) vs baseline: ~same Memory: ✅ 71.280MB (SLO: <75.000MB -5.0%) vs baseline: +5.2% ✅ tracer-dont-create-db-spansTime: ✅ 19.856ms (SLO: <21.500ms -7.6%) vs baseline: -0.4% Memory: ✅ 69.403MB (SLO: <75.000MB -7.5%) vs baseline: +5.0% ✅ tracer-minimalTime: ✅ 16.906ms (SLO: <17.500ms -3.4%) vs baseline: ~same Memory: ✅ 69.275MB (SLO: <75.000MB -7.6%) vs baseline: +5.4% ✅ tracer-nativeTime: ✅ 19.807ms (SLO: <21.750ms -8.9%) vs baseline: +0.7% Memory: ✅ 69.383MB (SLO: <72.500MB -4.3%) vs baseline: +5.1% ✅ tracer-no-cachesTime: ✅ 17.684ms (SLO: <19.650ms 📉 -10.0%) vs baseline: -0.2% Memory: ✅ 69.344MB (SLO: <75.000MB -7.5%) vs baseline: +5.5% ✅ tracer-no-databasesTime: ✅ 19.478ms (SLO: <20.100ms -3.1%) vs baseline: +0.4% Memory: ✅ 69.304MB (SLO: <75.000MB -7.6%) vs baseline: +5.5% ✅ tracer-no-middlewareTime: ✅ 19.542ms (SLO: <21.500ms -9.1%) vs baseline: -0.2% Memory: ✅ 69.324MB (SLO: <75.000MB -7.6%) vs baseline: +5.2% ✅ tracer-no-templatesTime: ✅ 19.759ms (SLO: <22.000ms 📉 -10.2%) vs baseline: +1.1% Memory: ✅ 69.370MB (SLO: <73.500MB -5.6%) vs baseline: +5.2% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 40.003ms (SLO: <47.150ms 📉 -15.2%) vs baseline: -0.6% Memory: ✅ 41.300MB (SLO: <47.000MB 📉 -12.1%) vs baseline: +5.6% ✅ add-metricsTime: ✅ 233.958ms (SLO: <344.800ms 📉 -32.1%) vs baseline: -0.5% Memory: ✅ 45.671MB (SLO: <47.500MB -3.9%) vs baseline: +5.2% ✅ add-tagsTime: ✅ 277.502ms (SLO: <330.000ms 📉 -15.9%) vs baseline: +3.2% Memory: ✅ 45.650MB (SLO: <47.500MB -3.9%) vs baseline: +5.3% ✅ get-contextTime: ✅ 82.980ms (SLO: <92.350ms 📉 -10.1%) vs baseline: -0.4% Memory: ✅ 41.563MB (SLO: <46.500MB 📉 -10.6%) vs baseline: +5.2% ✅ is-recordingTime: ✅ 38.441ms (SLO: <44.500ms 📉 -13.6%) vs baseline: -0.7% Memory: ✅ 41.114MB (SLO: <47.500MB 📉 -13.4%) vs baseline: +5.3% ✅ record-exceptionTime: ✅ 60.018ms (SLO: <67.650ms 📉 -11.3%) vs baseline: ~same Memory: ✅ 41.591MB (SLO: <47.000MB 📉 -11.5%) vs baseline: +5.1% ✅ set-statusTime: ✅ 44.400ms (SLO: <50.400ms 📉 -11.9%) vs baseline: ~same Memory: ✅ 41.125MB (SLO: <47.000MB 📉 -12.5%) vs baseline: +5.4% ✅ startTime: ✅ 39.458ms (SLO: <44.500ms 📉 -11.3%) vs baseline: +3.9% Memory: ✅ 41.177MB (SLO: <47.000MB 📉 -12.4%) vs baseline: +5.4% ✅ start-finishTime: ✅ 89.533ms (SLO: <91.000ms 🟡 -1.6%) vs baseline: +0.3% Memory: ✅ 38.633MB (SLO: <46.500MB 📉 -16.9%) vs baseline: +5.0% ✅ start-finish-telemetryTime: ✅ 91.187ms (SLO: <92.000ms 🟡 -0.9%) vs baseline: +0.5% Memory: ✅ 38.751MB (SLO: <46.500MB 📉 -16.7%) vs baseline: +5.3% ✅ update-nameTime: ✅ 39.392ms (SLO: <45.150ms 📉 -12.8%) vs baseline: -0.6% Memory: ✅ 41.010MB (SLO: <47.000MB 📉 -12.7%) vs baseline: +4.8% 🟡 recursivecomputation - 8/8✅ deepTime: ✅ 312.932ms (SLO: <320.950ms -2.5%) vs baseline: -0.4% Memory: ✅ 37.415MB (SLO: <38.750MB -3.4%) vs baseline: +5.2% ✅ deep-profiledTime: ✅ 327.417ms (SLO: <359.150ms -8.8%) vs baseline: -0.4% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ mediumTime: ✅ 7.324ms (SLO: <7.400ms 🟡 -1.0%) vs baseline: -0.5% Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +5.4% ✅ shallowTime: ✅ 1.034ms (SLO: <1.050ms 🟡 -1.5%) vs baseline: +1.6% Memory: ✅ 36.235MB (SLO: <38.000MB -4.6%) vs baseline: +5.5% 🟡 samplingrules - 8/8✅ average_matchTime: ✅ 168.566µs (SLO: <290.000µs 📉 -41.9%) vs baseline: +0.2% Memory: ✅ 36.137MB (SLO: <38.000MB -4.9%) vs baseline: +5.3% ✅ high_matchTime: ✅ 214.181µs (SLO: <480.000µs 📉 -55.4%) vs baseline: -0.3% Memory: ✅ 36.156MB (SLO: <38.000MB -4.9%) vs baseline: +5.2% ✅ low_matchTime: ✅ 119.777µs (SLO: <120.000µs 🟡 -0.2%) vs baseline: +0.1% Memory: ✅ 701.607MB (SLO: <780.000MB 📉 -10.1%) vs baseline: +4.9% ✅ very_low_matchTime: ✅ 3.118ms (SLO: <8.500ms 📉 -63.3%) vs baseline: +0.2% Memory: ✅ 78.738MB (SLO: <85.000MB -7.4%) vs baseline: +5.3% 🟡 span - 26/26✅ add-eventTime: ✅ 19.074ms (SLO: <22.500ms 📉 -15.2%) vs baseline: -0.7% Memory: ✅ 38.357MB (SLO: <53.000MB 📉 -27.6%) vs baseline: +5.3% ✅ add-metricsTime: ✅ 88.623ms (SLO: <93.500ms -5.2%) vs baseline: +0.8% Memory: ✅ 42.861MB (SLO: <53.000MB 📉 -19.1%) vs baseline: +5.2% ✅ add-tagsTime: ✅ 147.426ms (SLO: <155.000ms -4.9%) vs baseline: ~same Memory: ✅ 42.885MB (SLO: <53.000MB 📉 -19.1%) vs baseline: +5.1% ✅ get-contextTime: ✅ 18.241ms (SLO: <20.500ms 📉 -11.0%) vs baseline: -0.5% Memory: ✅ 38.324MB (SLO: <53.000MB 📉 -27.7%) vs baseline: +5.4% ✅ is-recordingTime: ✅ 18.293ms (SLO: <20.500ms 📉 -10.8%) vs baseline: -1.4% Memory: ✅ 38.358MB (SLO: <53.000MB 📉 -27.6%) vs baseline: +5.4% ✅ record-exceptionTime: ✅ 37.856ms (SLO: <41.000ms -7.7%) vs baseline: -0.2% Memory: ✅ 38.812MB (SLO: <53.000MB 📉 -26.8%) vs baseline: +5.6% ✅ set-statusTime: ✅ 20.176ms (SLO: <22.000ms -8.3%) vs baseline: -0.3% Memory: ✅ 38.373MB (SLO: <53.000MB 📉 -27.6%) vs baseline: +5.7% ✅ startTime: ✅ 19.190ms (SLO: <20.500ms -6.4%) vs baseline: +4.2% Memory: ✅ 38.345MB (SLO: <53.000MB 📉 -27.7%) vs baseline: +5.4% ✅ start-finishTime: ✅ 57.382ms (SLO: <58.000ms 🟡 -1.1%) vs baseline: -0.8% Memory: ✅ 36.176MB (SLO: <38.000MB -4.8%) vs baseline: +5.4% ✅ start-finish-telemetryTime: ✅ 58.616ms (SLO: <60.000ms -2.3%) vs baseline: -0.5% Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +5.4% ✅ start-finish-traceid128Time: ✅ 59.986ms (SLO: <62.000ms -3.2%) vs baseline: -0.5% Memory: ✅ 36.196MB (SLO: <38.000MB -4.7%) vs baseline: +5.4% ✅ start-traceid128Time: ✅ 18.225ms (SLO: <22.500ms 📉 -19.0%) vs baseline: -1.0% Memory: ✅ 38.330MB (SLO: <53.000MB 📉 -27.7%) vs baseline: +5.7% ✅ update-nameTime: ✅ 18.644ms (SLO: <22.000ms 📉 -15.3%) vs baseline: -1.5% Memory: ✅ 38.343MB (SLO: <53.000MB 📉 -27.7%) vs baseline: +5.2%
|
|
@P403n1x87 the crash is real but also very rare so this is mostly cleanup and not something to worry too much about 🙂 |
aa4e9ea to
ce16727
Compare
ce16727 to
9e9ebbc
Compare
a8cce63
into
main
|
This change is marked for backport to 4.5, but it conflicts with that branch. The command used to test backporting was |
|
This change is marked for backport to 4.6, but it conflicts with that branch. The command used to test backporting was |
|
This change is marked for backport to 4.7, but it conflicts with that branch. The command used to test backporting was |
Backport of #17407 Co-authored-by: Juanjo Alvarez Martinez <juanjo.alvarezmartinez@datadoghq.com>
What is this PR?
This PR fixes a crash in
ddtracediscovered by Crash Tracking where we crash in garbage collection. While this definitely does sound like a Python bug and not addtraceone, we need to fix this for existing versions of Python and in the meantime until Python fixes it itself.The crash is in
PyObject_GC_UnTrack, called from the dealloc path of a HAMT node thatPyContextVar_Setis trying to free viaPy_DECREF. If that HAMT node's memory is already unmapped, thePyObject_GC_UnTrackwrite faults.The crash happens in
PyObject_GC_UnTrack, called from the dealloc path of a HAMT node thatPyContextVar_Setis trying to free viaPy_DECREF. If that HAMT node's memory is already unmapped, thePyObject_GC_UnTrackwrite faults.Root Cause
BaseWrappingContext.__enter__does this...{}dict in the context's HAMT underself._storageTokenreturned byset()into that same dict.A
Tokenobject holdstok_ctx, which is a strong reference to thePyContextthat was active whensetwas called (i.e.ts->context).This creates the following reference cycle:
Now,
PyContextVar_Setis not atomic. Its simplified CPython implementation is:At
Py_DECREF(ts_ctx->ctx_vars):_Py_Deallocis called, which callshamt_tp_deallocwhich callsPyObject_GC_UnTrack(old_hamt)._Py_Deallocthe old HAMT decrefs its children (intermediate nodes).ts_ctx->ctx_varsstill points to the (now freed) old root until line 3 of the snippet above executes.tok_ctxpointing atts->context, and interfere with refcounts, causing a node to be collected prematurely.PyObject_GC_UnTrackis then called on a node whose memory is already unmapped which results in SEGV_MAPERR.Proposed Fix
Store the previous value of
_storagein the dict instead of theToken. Restore it withsetrather thanreset. In other words:The
Tokenobject is now ephemeral: it is returned byset, never stored anywhere, and freed immediately when the local expression is evaluated. Nothing inside the HAMT ever holds aToken, so the cycle is gone.Correctness
reset(token)andset(prev_value)are equivalent for this use-case:_storageto its value before__enter__was called.reset()additionally validates that the context hasn't changed since the token was created, raisingValueErrorif it has. That guard is not needed here becauseBaseWrappingContextfully controls the enter/exit lifecycle.__enter__pushes a new dict that records the prior one; each_pop_storagepops it.