fix(burstiq): bound profiler memory, null-safe sample data, capped retry wait#30238
fix(burstiq): bound profiler memory, null-safe sample data, capped retry wait#30238akashverma0786 wants to merge 9 commits into
Conversation
✅ PR checks passedThe linked issue has a description and all required Shipping project fields set. Thanks! |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
- sampler: normalize NaN/NaT sample cells to None so uploads emit JSON null, not "nan" - client: respect_retry_after_header=False so a 503 Retry-After can't hang a call for hours - tests: null normalization, retry flag
3c364f6 to
5b330b9
Compare
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
🔴 Playwright Results — workflow failedValidated commit ✅ 105 passed · ❌ 2 failed · 🟡 0 flaky · ⏭️ 3 skipped · 🧰 0 lifecycle flaky PerformanceBlocking targets: ✅ met · Optimization targets: 🟡 in progress Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting. 🕒 Full workflow signal wall (to summary) 45m 14s ⏱️ Max setup 3m 4s · max shard execution 12m 12s · max shard-job elapsed before upload 17m 17s · reporting 4s 🌐 205.01 requests/attempt · 1.74 app boots/UI scenario · 0.00% common-shard skew Optimization targets still in progress:
Genuine Failures (failed on all attempts)❌
|
Reintroduces a row cap for the no-profileSample path so get_dataframes can't materialize an unbounded BurstIQ chain into memory. Logs a warning when the cap applies instead of silently truncating.
Code Review ✅ Approved 2 resolved / 2 findingsBounds profiling memory at 1M rows and normalizes missing sample values to JSON-compatible nulls. Caps retry wait times by ignoring server-directed retry headers, resolving potential multi-hour request hangs. ✅ 2 resolved✅ Quality: Cap silently truncates profiling for chains over 1M rows
✅ Performance: Removing row cap makes unsampled profiles load full chain into memory
OptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
|



FIX #30438
What
Two fixes to the BurstIQ connector's sampling / client path.
1. Null-safe sample data (no more
"nan"strings)BurstIQ omits absent fields per record, so reindexing pages to the column union leaves
NaN/NaTgaps, anddropna(how="all")deliberately keeps partially-filled rows. Those gaps reached the sample-data sanitizer as non-finite floats and were serialized as the strings"nan"/"NaT"instead of JSONnull._fetch_rowsnow normalizes missing markers toNone(guarded withis_scalarso list/dict cells are left alone). This affects sample-data display/upload only — profiler metrics use a separate path and are unchanged.2. Cap the retry wait (no multi-hour hangs)
The client's
urllib3Retryused the defaultrespect_retry_after_header=Truewith no cap (urllib3 2.6.1), so a503carrying a largeRetry-Aftercould make a single request sleep for the server-dictated duration (potentially hours), with no total-time budget. Settingrespect_retry_after_header=Falsebounds the worst-case wait to our own backoff.Testing
test_burstiq_sampler.py+test_burstiq_client.py— 36/36 pass, including 2 new:test_missing_cells_become_none_not_nan— gaps serialize asnull, not"nan"test_session_retry_ignores_server_retry_after—respect_retry_after_headeris offruff checkandruff format --checkclean.Notes
Summary by Gitar
_MAX_PROFILE_ROWS(1M) to prevent potential OOM errors during ingestion.profileSampleis configured to notify users of memory bounding.Noneusingto_nullto ensure JSON serialization handles them asnullinstead of string"nan".respect_retry_after_header=FalseinBurstIQClientto prevent server-sideRetry-Afterheaders from causing multi-hour request hangs.test_no_sample_caps_at_max_profile_rowsto verify memory bounding behavior.This will update automatically on new commits.
Greptile Summary
This PR improves resilience in the BurstIQ sampling and client paths. The main changes are:
Confidence Score: 5/5
This looks safe to merge.
Important Files Changed
Reviews (10): Last reviewed commit: "Merge branch 'main' into fix/burstiq-pro..." | Re-trigger Greptile
Context used (3)