Conversation
…tatus 500 Databricks' paginated run list returns boundary runs more than once (inclusive start_time_to), producing duplicate-timestamp PipelineStatus rows. OpenMetadata stores one status per timestamp, so the Postgres bulk status upsert failed with "ON CONFLICT DO UPDATE command cannot affect row a second time" (HTTP 500), dropping run history for the affected pipelines. Skip already-seen start_times before yielding. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
✅ PR checks passedThe linked issue has a description and all required Shipping project fields set. Thanks! |
🔴 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) 51m 23s ⏱️ Max setup 3m 4s · max shard execution 12m 27s · max shard-job elapsed before upload 20m 55s · reporting 4s 🌐 204.13 requests/attempt · 1.74 app boots/UI scenario · 0.00% common-shard skew Optimization targets still in progress:
Genuine Failures (failed on all attempts)❌
|
Code Review ✅ ApprovedDeduplicates Databricks pipeline runs by start_time in yield_pipeline_status to prevent bulk status 500 errors on PostgreSQL. No issues found. OptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
|



Describe your changes:
Fixes #30459
I made the Databricks pipeline connector dedupe job runs by
start_timebefore building the bulkPipelineStatuspayload, because OpenMetadata stores a single status per timestamp(entityFQNHash, extension, timestamp)and Databricks' paginated run list returns boundary runs more than once (inclusivestart_time_to). Those duplicate-timestamp rows made the server-side bulk upsert fail on PostgreSQL withERROR: ON CONFLICT DO UPDATE command cannot affect row a second time(HTTP 500), dropping run history for the affected pipelines. The fix skips already-seenstart_times inyield_pipeline_status, so each bulk request carries at most one status per timestamp.Type of change:
High-level design:
N/A — small change.
Tests:
Use cases covered
start_timeno longer 500s on/status/bulk; only one status per timestamp is sent.Unit tests
ingestion/tests/unit/topology/pipeline/test_databricks_pipeline.py(test_yield_pipeline_status_deduplicates_run_timestamps).test_yield_pipeline_statusis unchanged. All 6 tests in the file pass.Backend integration tests
Ingestion integration tests
Playwright (UI) tests
Manual testing performed
/status/bulkrequests raisedorg.postgresql.util.PSQLException: ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time, and every timestamp in a failing batch appeared 2+ times.UI screen recording / screenshots:
Not applicable.
Checklist:
Fixes <issue-number>: <short explanation>Fixes #30459above.Greptile Summary
Fixes Databricks pipeline-status bulk ingestion failures by:
start_timebefore constructing the bulk status payload.Confidence Score: 5/5
The PR appears safe to merge.
No blocking failures remain within the scope of the follow-up review.
Important Files Changed
Reviews (2): Last reviewed commit: "Merge branch 'main' into lusaka" | Re-trigger Greptile