chore(profiling): [3/n] harden asyncio introspection against future CPython versions#17730
Conversation
_GatheringFuture and _wait are asyncio internals with no stability contract. Wrap each with hasattr so removal/rename in a future CPython release degrades gracefully (task linking silently skipped) instead of AttributeError at profiler startup. Also adds AIDEV-TODO comments flagging the asyncio policy system deprecation in 3.15 (CPython #127949, removal in 3.16) for the next CPython port.
…asyncio internals On Python <= 3.15 (validated versions), missing _GatheringFuture or _wait is a real bug — raise RuntimeError immediately so it is never silently swallowed. On Python >= 3.16 (where the asyncio policy system is being removed and these internals may disappear), degrade gracefully with a log.warning so the profiler still starts with reduced task-link coverage.
…emoval Apply same tiered hasattr + RuntimeError/log.warning pattern to _scheduled_tasks and _all_tasks in _call_init_asyncio(). On Python <=3.15 (validated versions) a missing attribute raises immediately; on Python >=3.16 it degrades gracefully with a warning. _eager_tasks uses getattr fallback since it was added in 3.12 and absence is not an error.
… outside running loop on py3.15
9a76e94 to
ec2546f
Compare
Performance SLOsComparing candidate vlad/profiling-asyncio-wrapper-hardening (ec2546f) with baseline vlad/ddtracepy-315-tracing-wrapping (b17e204) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 102.952µs (SLO: <130.000µs 📉 -20.8%) vs baseline: +0.3% Memory: ✅ 43.848MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ add_inplace_aspectTime: ✅ 101.762µs (SLO: <130.000µs 📉 -21.7%) vs baseline: -0.6% Memory: ✅ 43.938MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ add_inplace_noaspectTime: ✅ 28.176µs (SLO: <40.000µs 📉 -29.6%) vs baseline: -0.7% Memory: ✅ 43.935MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ add_noaspectTime: ✅ 49.127µs (SLO: <70.000µs 📉 -29.8%) vs baseline: -1.5% Memory: ✅ 43.959MB (SLO: <46.000MB -4.4%) vs baseline: +5.2% ✅ bytearray_aspectTime: ✅ 264.327µs (SLO: <400.000µs 📉 -33.9%) vs baseline: +0.6% Memory: ✅ 43.901MB (SLO: <46.000MB -4.6%) vs baseline: +4.8% ✅ bytearray_extend_aspectTime: ✅ 660.049µs (SLO: <800.000µs 📉 -17.5%) vs baseline: +1.2% Memory: ✅ 43.884MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ bytearray_extend_noaspectTime: ✅ 271.812µs (SLO: <400.000µs 📉 -32.0%) vs baseline: +1.1% Memory: ✅ 43.808MB (SLO: <46.000MB -4.8%) vs baseline: +4.6% ✅ bytearray_noaspectTime: ✅ 146.741µs (SLO: <300.000µs 📉 -51.1%) vs baseline: ~same Memory: ✅ 43.946MB (SLO: <46.000MB -4.5%) vs baseline: +5.0% ✅ bytes_aspectTime: ✅ 231.279µs (SLO: <300.000µs 📉 -22.9%) vs baseline: -0.6% Memory: ✅ 43.936MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ bytes_noaspectTime: ✅ 139.278µs (SLO: <200.000µs 📉 -30.4%) vs baseline: +1.6% Memory: ✅ 43.871MB (SLO: <46.000MB -4.6%) vs baseline: +5.3% ✅ bytesio_aspectTime: ✅ 3.852ms (SLO: <5.000ms 📉 -23.0%) vs baseline: -0.4% Memory: ✅ 43.923MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ bytesio_noaspectTime: ✅ 322.068µs (SLO: <420.000µs 📉 -23.3%) vs baseline: +0.7% Memory: ✅ 43.950MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ capitalize_aspectTime: ✅ 89.542µs (SLO: <300.000µs 📉 -70.2%) vs baseline: -0.8% Memory: ✅ 43.929MB (SLO: <46.000MB -4.5%) vs baseline: +4.9% ✅ capitalize_noaspectTime: ✅ 255.751µs (SLO: <300.000µs 📉 -14.7%) vs baseline: -1.2% Memory: ✅ 43.996MB (SLO: <46.000MB -4.4%) vs baseline: +5.3% ✅ casefold_aspectTime: ✅ 92.376µs (SLO: <500.000µs 📉 -81.5%) vs baseline: +2.6% Memory: ✅ 43.873MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ casefold_noaspectTime: ✅ 311.154µs (SLO: <500.000µs 📉 -37.8%) vs baseline: +0.6% Memory: ✅ 43.956MB (SLO: <46.000MB -4.4%) vs baseline: +5.5% ✅ decode_aspectTime: ✅ 87.343µs (SLO: <100.000µs 📉 -12.7%) vs baseline: +0.5% Memory: ✅ 43.858MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ decode_noaspectTime: ✅ 157.230µs (SLO: <210.000µs 📉 -25.1%) vs baseline: +1.3% Memory: ✅ 43.857MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ encode_aspectTime: ✅ 85.273µs (SLO: <200.000µs 📉 -57.4%) vs baseline: +0.4% Memory: ✅ 43.926MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ encode_noaspectTime: ✅ 144.212µs (SLO: <200.000µs 📉 -27.9%) vs baseline: +0.5% Memory: ✅ 43.939MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ format_aspectTime: ✅ 14.595ms (SLO: <19.200ms 📉 -24.0%) vs baseline: ~same Memory: ✅ 43.975MB (SLO: <46.000MB -4.4%) vs baseline: +4.9% ✅ format_map_aspectTime: ✅ 16.389ms (SLO: <21.500ms 📉 -23.8%) vs baseline: +0.2% Memory: ✅ 43.997MB (SLO: <46.000MB -4.4%) vs baseline: +4.8% ✅ format_map_noaspectTime: ✅ 359.139µs (SLO: <500.000µs 📉 -28.2%) vs baseline: -5.0% Memory: ✅ 43.778MB (SLO: <46.000MB -4.8%) vs baseline: +4.8% ✅ format_noaspectTime: ✅ 313.675µs (SLO: <500.000µs 📉 -37.3%) vs baseline: -1.6% Memory: ✅ 43.891MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ index_aspectTime: ✅ 121.571µs (SLO: <300.000µs 📉 -59.5%) vs baseline: -6.6% Memory: ✅ 43.906MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ index_noaspectTime: ✅ 40.474µs (SLO: <300.000µs 📉 -86.5%) vs baseline: -0.2% Memory: ✅ 44.007MB (SLO: <46.000MB -4.3%) vs baseline: +5.3% ✅ join_aspectTime: ✅ 215.977µs (SLO: <300.000µs 📉 -28.0%) vs baseline: -3.2% Memory: ✅ 43.994MB (SLO: <46.000MB -4.4%) vs baseline: +5.2% ✅ join_noaspectTime: ✅ 139.932µs (SLO: <300.000µs 📉 -53.4%) vs baseline: -4.1% Memory: ✅ 43.939MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ ljust_aspectTime: ✅ 502.826µs (SLO: <700.000µs 📉 -28.2%) vs baseline: -3.8% Memory: ✅ 43.955MB (SLO: <46.000MB -4.4%) vs baseline: +4.8% ✅ ljust_noaspectTime: ✅ 262.135µs (SLO: <300.000µs 📉 -12.6%) vs baseline: +0.3% Memory: ✅ 43.865MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ lower_aspectTime: ✅ 308.844µs (SLO: <500.000µs 📉 -38.2%) vs baseline: -3.3% Memory: ✅ 44.022MB (SLO: <46.000MB -4.3%) vs baseline: +5.2% ✅ lower_noaspectTime: ✅ 238.644µs (SLO: <300.000µs 📉 -20.5%) vs baseline: -1.5% Memory: ✅ 43.911MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ lstrip_aspectTime: ✅ 0.346ms (SLO: <3.000ms 📉 -88.5%) vs baseline: 📈 +27.2% Memory: ✅ 43.869MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ lstrip_noaspectTime: ✅ 0.177ms (SLO: <3.000ms 📉 -94.1%) vs baseline: -0.2% Memory: ✅ 43.859MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ modulo_aspectTime: ✅ 14.225ms (SLO: <18.750ms 📉 -24.1%) vs baseline: -0.2% Memory: ✅ 43.972MB (SLO: <46.000MB -4.4%) vs baseline: +4.8% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.770ms (SLO: <19.350ms 📉 -23.7%) vs baseline: +0.4% Memory: ✅ 43.992MB (SLO: <46.000MB -4.4%) vs baseline: +4.9% ✅ modulo_aspect_for_bytesTime: ✅ 14.361ms (SLO: <18.900ms 📉 -24.0%) vs baseline: +0.3% Memory: ✅ 44.063MB (SLO: <46.000MB -4.2%) vs baseline: +5.3% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.586ms (SLO: <19.150ms 📉 -23.8%) vs baseline: +0.5% Memory: ✅ 44.020MB (SLO: <46.000MB -4.3%) vs baseline: +4.8% ✅ modulo_noaspectTime: ✅ 0.362ms (SLO: <3.000ms 📉 -87.9%) vs baseline: -0.2% Memory: ✅ 43.988MB (SLO: <46.000MB -4.4%) vs baseline: +5.3% ✅ replace_aspectTime: ✅ 18.379ms (SLO: <24.000ms 📉 -23.4%) vs baseline: +0.1% Memory: ✅ 44.033MB (SLO: <46.000MB -4.3%) vs baseline: +5.0% ✅ replace_noaspectTime: ✅ 304.267µs (SLO: <400.000µs 📉 -23.9%) vs baseline: +6.9% Memory: ✅ 43.935MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ repr_aspectTime: ✅ 324.428µs (SLO: <420.000µs 📉 -22.8%) vs baseline: -0.7% Memory: ✅ 43.825MB (SLO: <46.000MB -4.7%) vs baseline: +4.9% ✅ repr_noaspectTime: ✅ 46.767µs (SLO: <90.000µs 📉 -48.0%) vs baseline: +0.3% Memory: ✅ 43.912MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ rstrip_aspectTime: ✅ 386.866µs (SLO: <500.000µs 📉 -22.6%) vs baseline: -1.1% Memory: ✅ 43.895MB (SLO: <46.000MB -4.6%) vs baseline: +5.3% ✅ rstrip_noaspectTime: ✅ 183.872µs (SLO: <300.000µs 📉 -38.7%) vs baseline: -1.0% Memory: ✅ 43.988MB (SLO: <46.000MB -4.4%) vs baseline: +5.5% ✅ slice_aspectTime: ✅ 181.677µs (SLO: <300.000µs 📉 -39.4%) vs baseline: -2.2% Memory: ✅ 43.885MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ slice_noaspectTime: ✅ 53.787µs (SLO: <90.000µs 📉 -40.2%) vs baseline: -1.8% Memory: ✅ 43.918MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ stringio_aspectTime: ✅ 3.881ms (SLO: <5.000ms 📉 -22.4%) vs baseline: -1.5% Memory: ✅ 43.930MB (SLO: <46.000MB -4.5%) vs baseline: +5.0% ✅ stringio_noaspectTime: ✅ 358.944µs (SLO: <500.000µs 📉 -28.2%) vs baseline: +2.0% Memory: ✅ 43.949MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ strip_aspectTime: ✅ 275.878µs (SLO: <350.000µs 📉 -21.2%) vs baseline: +1.0% Memory: ✅ 43.896MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ strip_noaspectTime: ✅ 176.853µs (SLO: <240.000µs 📉 -26.3%) vs baseline: +0.4% Memory: ✅ 43.824MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ swapcase_aspectTime: ✅ 347.778µs (SLO: <500.000µs 📉 -30.4%) vs baseline: -0.3% Memory: ✅ 43.947MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ swapcase_noaspectTime: ✅ 275.920µs (SLO: <400.000µs 📉 -31.0%) vs baseline: -1.0% Memory: ✅ 43.988MB (SLO: <46.000MB -4.4%) vs baseline: +5.0% ✅ title_aspectTime: ✅ 337.543µs (SLO: <500.000µs 📉 -32.5%) vs baseline: -2.1% Memory: ✅ 43.917MB (SLO: <46.000MB -4.5%) vs baseline: +5.4% ✅ title_noaspectTime: ✅ 264.976µs (SLO: <400.000µs 📉 -33.8%) vs baseline: -0.4% Memory: ✅ 43.990MB (SLO: <46.000MB -4.4%) vs baseline: +5.4% ✅ translate_aspectTime: ✅ 573.732µs (SLO: <700.000µs 📉 -18.0%) vs baseline: 📈 +12.0% Memory: ✅ 43.992MB (SLO: <46.000MB -4.4%) vs baseline: +5.2% ✅ translate_noaspectTime: ✅ 426.167µs (SLO: <500.000µs 📉 -14.8%) vs baseline: -1.4% Memory: ✅ 43.904MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ upper_aspectTime: ✅ 308.113µs (SLO: <500.000µs 📉 -38.4%) vs baseline: -3.3% Memory: ✅ 43.896MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ upper_noaspectTime: ✅ 242.219µs (SLO: <400.000µs 📉 -39.4%) vs baseline: ~same Memory: ✅ 43.884MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 528.788µs (SLO: <700.000µs 📉 -24.5%) vs baseline: 📈 +21.0% Memory: ✅ 43.870MB (SLO: <46.000MB -4.6%) vs baseline: +5.3% ✅ ospathbasename_noaspectTime: ✅ 427.874µs (SLO: <700.000µs 📉 -38.9%) vs baseline: -2.6% Memory: ✅ 43.831MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ ospathjoin_aspectTime: ✅ 629.279µs (SLO: <700.000µs 📉 -10.1%) vs baseline: -3.0% Memory: ✅ 44.091MB (SLO: <46.000MB -4.2%) vs baseline: +5.6% ✅ ospathjoin_noaspectTime: ✅ 634.018µs (SLO: <700.000µs -9.4%) vs baseline: -2.9% Memory: ✅ 43.936MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ ospathnormcase_aspectTime: ✅ 352.065µs (SLO: <700.000µs 📉 -49.7%) vs baseline: -3.5% Memory: ✅ 43.950MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ ospathnormcase_noaspectTime: ✅ 361.891µs (SLO: <700.000µs 📉 -48.3%) vs baseline: -2.7% Memory: ✅ 43.889MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ ospathsplit_aspectTime: ✅ 482.064µs (SLO: <700.000µs 📉 -31.1%) vs baseline: -5.1% Memory: ✅ 43.869MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ ospathsplit_noaspectTime: ✅ 491.449µs (SLO: <700.000µs 📉 -29.8%) vs baseline: -4.0% Memory: ✅ 44.019MB (SLO: <46.000MB -4.3%) vs baseline: +5.4% ✅ ospathsplitdrive_aspectTime: ✅ 369.969µs (SLO: <700.000µs 📉 -47.1%) vs baseline: -5.1% Memory: ✅ 43.862MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ ospathsplitdrive_noaspectTime: ✅ 73.158µs (SLO: <700.000µs 📉 -89.5%) vs baseline: -1.2% Memory: ✅ 43.924MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ ospathsplitext_aspectTime: ✅ 462.358µs (SLO: <700.000µs 📉 -33.9%) vs baseline: -4.2% Memory: ✅ 43.940MB (SLO: <46.000MB -4.5%) vs baseline: +5.1% ✅ ospathsplitext_noaspectTime: ✅ 465.366µs (SLO: <700.000µs 📉 -33.5%) vs baseline: -3.6% Memory: ✅ 43.936MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 2.375µs (SLO: <20.000µs 📉 -88.1%) vs baseline: 📈 +12.6% Memory: ✅ 36.530MB (SLO: <38.000MB -3.9%) vs baseline: +5.7% ✅ 1-count-metrics-100-timesTime: ✅ 156.588µs (SLO: <220.000µs 📉 -28.8%) vs baseline: +3.6% Memory: ✅ 36.569MB (SLO: <38.000MB -3.8%) vs baseline: +5.9% ✅ 1-distribution-metric-1-timesTime: ✅ 2.428µs (SLO: <20.000µs 📉 -87.9%) vs baseline: -0.3% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.9% ✅ 1-distribution-metrics-100-timesTime: ✅ 168.860µs (SLO: <230.000µs 📉 -26.6%) vs baseline: +1.6% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.4% ✅ 1-gauge-metric-1-timesTime: ✅ 2.364µs (SLO: <20.000µs 📉 -88.2%) vs baseline: +2.2% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +6.2% ✅ 1-gauge-metrics-100-timesTime: ✅ 169.313µs (SLO: <190.000µs 📉 -10.9%) vs baseline: +2.5% Memory: ✅ 36.530MB (SLO: <38.000MB -3.9%) vs baseline: +5.8% ✅ 1-rate-metric-1-timesTime: ✅ 2.301µs (SLO: <20.000µs 📉 -88.5%) vs baseline: +3.4% Memory: ✅ 36.549MB (SLO: <38.000MB -3.8%) vs baseline: +5.7% ✅ 1-rate-metrics-100-timesTime: ✅ 169.802µs (SLO: <250.000µs 📉 -32.1%) vs baseline: +2.7% Memory: ✅ 36.569MB (SLO: <38.000MB -3.8%) vs baseline: +5.8% ✅ 100-count-metrics-100-timesTime: ✅ 15.773ms (SLO: <22.000ms 📉 -28.3%) vs baseline: +4.0% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +6.2% ✅ 100-distribution-metrics-100-timesTime: ✅ 1.764ms (SLO: <2.550ms 📉 -30.8%) vs baseline: +2.0% Memory: ✅ 36.510MB (SLO: <38.000MB -3.9%) vs baseline: +5.4% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.740ms (SLO: <1.850ms -5.9%) vs baseline: +2.9% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.7% ✅ 100-rate-metrics-100-timesTime: ✅ 1.732ms (SLO: <2.550ms 📉 -32.1%) vs baseline: +2.3% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.9% ✅ flush-1-metricTime: ✅ 3.575µs (SLO: <20.000µs 📉 -82.1%) vs baseline: +0.5% Memory: ✅ 36.510MB (SLO: <38.000MB -3.9%) vs baseline: +4.3% ✅ flush-100-metricsTime: ✅ 172.416µs (SLO: <250.000µs 📉 -31.0%) vs baseline: -2.0% Memory: ✅ 36.549MB (SLO: <38.000MB -3.8%) vs baseline: +4.7% ✅ flush-1000-metricsTime: ✅ 2.191ms (SLO: <2.500ms 📉 -12.4%) vs baseline: -1.1% Memory: ✅ 37.415MB (SLO: <38.750MB -3.4%) vs baseline: +4.9% 🟡 Near SLO Breach (7 suites)🟡 djangosimple - 28/28✅ appsecTime: ✅ 19.645ms (SLO: <22.300ms 📉 -11.9%) vs baseline: -0.3% Memory: ✅ 71.592MB (SLO: <73.500MB -2.6%) vs baseline: +5.1% ✅ exception-replay-enabledTime: ✅ 1.372ms (SLO: <1.450ms -5.4%) vs baseline: +0.2% Memory: ✅ 69.698MB (SLO: <71.500MB -2.5%) vs baseline: +5.2% ✅ iastTime: ✅ 19.722ms (SLO: <22.250ms 📉 -11.4%) vs baseline: +0.4% Memory: ✅ 71.484MB (SLO: <75.000MB -4.7%) vs baseline: +4.8% ✅ profilerTime: ✅ 15.219ms (SLO: <16.550ms -8.0%) vs baseline: +0.2% Memory: ✅ 60.448MB (SLO: <61.000MB 🟡 -0.9%) vs baseline: +5.1% ✅ resource-renamingTime: ✅ 19.454ms (SLO: <21.750ms 📉 -10.6%) vs baseline: -0.4% Memory: ✅ 71.659MB (SLO: <73.500MB -2.5%) vs baseline: +5.2% ✅ span-code-originTime: ✅ 20.043ms (SLO: <28.200ms 📉 -28.9%) vs baseline: +1.0% Memory: ✅ 71.778MB (SLO: <75.000MB -4.3%) vs baseline: +5.3% ✅ tracerTime: ✅ 19.662ms (SLO: <21.750ms -9.6%) vs baseline: +0.3% Memory: ✅ 71.408MB (SLO: <75.000MB -4.8%) vs baseline: +4.8% ✅ tracer-and-profilerTime: ✅ 21.013ms (SLO: <23.500ms 📉 -10.6%) vs baseline: ~same Memory: ✅ 73.423MB (SLO: <75.000MB -2.1%) vs baseline: +4.9% ✅ tracer-dont-create-db-spansTime: ✅ 19.660ms (SLO: <21.500ms -8.6%) vs baseline: -0.7% Memory: ✅ 71.609MB (SLO: <75.000MB -4.5%) vs baseline: +5.1% ✅ tracer-minimalTime: ✅ 17.874ms (SLO: <18.500ms -3.4%) vs baseline: +0.2% Memory: ✅ 71.762MB (SLO: <75.000MB -4.3%) vs baseline: +5.4% ✅ tracer-no-cachesTime: ✅ 18.910ms (SLO: <19.650ms -3.8%) vs baseline: +0.2% Memory: ✅ 71.369MB (SLO: <75.000MB -4.8%) vs baseline: +4.8% ✅ tracer-no-databasesTime: ✅ 20.665ms (SLO: <21.100ms -2.1%) vs baseline: +0.2% Memory: ✅ 71.617MB (SLO: <75.000MB -4.5%) vs baseline: +5.2% ✅ tracer-no-middlewareTime: ✅ 19.463ms (SLO: <21.500ms -9.5%) vs baseline: +0.3% Memory: ✅ 71.411MB (SLO: <75.000MB -4.8%) vs baseline: +4.8% ✅ tracer-no-templatesTime: ✅ 19.712ms (SLO: <22.000ms 📉 -10.4%) vs baseline: +2.2% Memory: ✅ 71.560MB (SLO: <73.500MB -2.6%) vs baseline: +5.0% 🟡 iastpropagation - 8/8✅ no-propagationTime: ✅ 48.702µs (SLO: <60.000µs 📉 -18.8%) vs baseline: +0.5% Memory: ✅ 41.209MB (SLO: <42.000MB 🟡 -1.9%) vs baseline: +6.1% ✅ propagation_enabledTime: ✅ 138.872µs (SLO: <190.000µs 📉 -26.9%) vs baseline: +1.8% Memory: ✅ 41.327MB (SLO: <42.000MB 🟡 -1.6%) vs baseline: +6.2% ✅ propagation_enabled_100Time: ✅ 1.583ms (SLO: <2.300ms 📉 -31.2%) vs baseline: +1.1% Memory: ✅ 41.170MB (SLO: <42.000MB 🟡 -2.0%) vs baseline: +5.8% ✅ propagation_enabled_1000Time: ✅ 29.325ms (SLO: <34.550ms 📉 -15.1%) vs baseline: -0.2% Memory: ✅ 41.170MB (SLO: <42.000MB 🟡 -2.0%) vs baseline: +6.0% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 41.563ms (SLO: <47.150ms 📉 -11.8%) vs baseline: +0.4% Memory: ✅ 41.785MB (SLO: <47.000MB 📉 -11.1%) vs baseline: +5.9% ✅ add-metricsTime: ✅ 236.065ms (SLO: <344.800ms 📉 -31.5%) vs baseline: +0.6% Memory: ✅ 45.556MB (SLO: <47.500MB -4.1%) vs baseline: +5.2% ✅ add-tagsTime: ✅ 264.948ms (SLO: <330.000ms 📉 -19.7%) vs baseline: +0.8% Memory: ✅ 45.579MB (SLO: <47.500MB -4.0%) vs baseline: +5.4% ✅ get-contextTime: ✅ 80.872ms (SLO: <92.350ms 📉 -12.4%) vs baseline: +0.4% Memory: ✅ 41.209MB (SLO: <46.500MB 📉 -11.4%) vs baseline: +5.2% ✅ is-recordingTime: ✅ 38.012ms (SLO: <44.500ms 📉 -14.6%) vs baseline: +0.9% Memory: ✅ 40.927MB (SLO: <47.500MB 📉 -13.8%) vs baseline: +4.9% ✅ record-exceptionTime: ✅ 62.924ms (SLO: <67.650ms -7.0%) vs baseline: +0.3% Memory: ✅ 41.652MB (SLO: <47.000MB 📉 -11.4%) vs baseline: +4.8% ✅ set-statusTime: ✅ 43.579ms (SLO: <50.400ms 📉 -13.5%) vs baseline: +0.6% Memory: ✅ 40.883MB (SLO: <47.000MB 📉 -13.0%) vs baseline: +4.9% ✅ startTime: ✅ 38.697ms (SLO: <44.500ms 📉 -13.0%) vs baseline: +4.6% Memory: ✅ 40.886MB (SLO: <47.000MB 📉 -13.0%) vs baseline: +4.9% ✅ start-finishTime: ✅ 89.870ms (SLO: <92.000ms -2.3%) vs baseline: ~same Memory: ✅ 38.869MB (SLO: <46.500MB 📉 -16.4%) vs baseline: +5.5% ✅ start-finish-telemetryTime: ✅ 91.500ms (SLO: <93.000ms 🟡 -1.6%) vs baseline: -0.5% Memory: ✅ 38.948MB (SLO: <46.500MB 📉 -16.2%) vs baseline: +5.5% ✅ update-nameTime: ✅ 39.071ms (SLO: <45.150ms 📉 -13.5%) vs baseline: +1.1% Memory: ✅ 41.059MB (SLO: <47.000MB 📉 -12.6%) vs baseline: +5.3% 🟡 packagesupdateimporteddependencies - 24/24 (1 unstable)✅ import_manyTime: ✅ 168.626µs (SLO: <170.000µs 🟡 -0.8%) vs baseline: -0.7% Memory: ✅ 41.067MB (SLO: <46.000MB 📉 -10.7%) vs baseline: +4.6% ✅ import_many_cachedTime: ✅ 131.939µs (SLO: <170.000µs 📉 -22.4%) vs baseline: -0.1% Memory: ✅ 40.957MB (SLO: <46.000MB 📉 -11.0%) vs baseline: +5.8% ✅ import_many_stdlibTime: ✅ 1.258ms (SLO: <1.750ms 📉 -28.1%) vs baseline: +0.3% Memory: ✅ 40.857MB (SLO: <46.000MB 📉 -11.2%) vs baseline: +5.5%
|
|
Slimming down: the only commit needed for 3.15 robustness (current_task() RuntimeError guard) was folded into #17624. The other 5 commits in this PR are 3.16+ future-proofing (defensive guards for asyncio private API removal) and pure type annotations — deferred to a future stack. Closing without merge. |
< Prev PR | Next PR >
Summary
Peels the defensive asyncio introspection hardening out of #17624 into its own standalone PR. These guards are independent of Python 3.15 — they harden
ddtrace/profiling/_asyncio.pyagainst future CPython internal API changes (3.16+) and against runtime edge cases that also apply to 3.10–3.14.Stack
mainchore(tracing): [2/n] support Python 3.15 coroutine and generator wrappingchore(profiling): [3/n] support Python 3.15 for profilingChanges
ddtrace/profiling/_asyncio.py:hasattraccess to every asyncio private API we introspect:_scheduled_tasks,_eager_tasks,_all_tasks,_GatheringFuture,_wait, taskWeakSetinternals. On known versions <3.16 a missing attribute raises with a GitHub issue link; on unknown versions >=3.16 we warn and degrade gracefully.asyncio.get_running_loop/asyncio.current_taskcalls inside our task-link wrappers withtry/except RuntimeErrorso a task completing outside of a running loop — observed on 3.15 — no longer propagates an exception into user code.Protocolclasses_HasSetEventLoop,_HasCreateTaskand explicit type annotations for the attributes we introspect, so the contract we depend on is documented.ddtrace/internal/wrapping/{asyncs,context,generators}.py:Why split this out
Testing
Release notes
No user-facing behavior change beyond graceful handling of future-version attribute removals. Tagging
changelog/no-changelogto match the rest of the 3.15 PR stack (#17531, #17624).