Fixes 30119: Stabilize integration-test CI#30120
Conversation
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
|
| + "ON DUPLICATE KEY UPDATE failureReason = VALUES(failureReason), " | ||
| + "status = VALUES(status), entityType = VALUES(entityType), retryCount = 0, " | ||
| + "claimedAt = NULL, claimToken = NULL", | ||
| connectionType = MYSQL) |
There was a problem hiding this comment.
Preserve queued propagation context
failureReason now contains the durable propagation context, but this conflict update replaces it unconditionally. If a worker claims a propagation retry and another indexing failure enqueues the same entity, the new plain failure reason clears that context and supersedes the worker's claim. The next worker reindexes the primary document but skips propagateEntityAfterRetry, leaving related search documents stale. Preserve or merge the existing propagation context when replacing a queue row.
Context Used: CLAUDE.md (source)
Code Review 👍 Approved with suggestions 9 resolved / 10 findingsStabilizes integration tests through deterministic outcome classification and robust cache consistency, while addressing search retry races and relationship revision fencing. Consider addressing the potential for stuck states in the context file extraction service due to retry exhaustion. 💡 Edge Case: Embedding generation failure indexes doc without vectorWhen an entity's state has changed (no reusable cached embedding), ✅ 9 resolved✅ Bug: Unbounded conditional-update retry can spin indefinitely
✅ Edge Case: failedRecords==0 branch ignores recorded PROCESS-stage failures
✅ Bug: Advisory lock ties up a pooled connection, risks pool starvation
✅ Bug: Session advisory lock can leak to pooled connection on release failure
✅ Performance: Postgres lock key hashing can over-serialize distinct suites
...and 4 more resolved from earlier reviews 🤖 Prompt for agentsOptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
| @@ -13471,22 +13511,22 @@ void upsert( | |||
| @Bind("entityType") String entityType); | |||
There was a problem hiding this comment.
Preserve queued propagation context
This conflict update still replaces failureReason unconditionally. If a queued retry contains encoded propagation context and another ordinary failure is enqueued for the same entity, the new reason removes that context. The worker then reindexes the primary document, but getPropagationContext returns empty and the required inherited-field, tag, certification, service-style, or related-entity updates are never replayed. Merge the existing propagation marker into the replacement reason when the new enqueue does not provide one.
Context Used: CLAUDE.md (source)



Describe your changes:
Fixes #30119
This change makes Java, Playwright, and Python integration-test outcomes deterministic without reducing parallel throughput.
It builds each Java runtime once before four concurrent isolation lanes, classifies assertion, setup, infrastructure, missing-report, cancellation, and hung-test outcomes, and retains fail-closed diagnostics.
It also fixes hard-delete cache consistency, stale context/search updates, bulk-update fallback ordering, restore/test-suite update races, and retry-dependent Oracle, Trino, and Playwright readiness checks.
The Playwright zero-retry policy remains shadow-only while stable retry signatures are collected.
Type of change:
High-level design:
parallel,global-state,multi-node, andretry-queueFailsafe lanes with unchanged required check namesTests:
Use cases covered
Unit tests
TestCaseRepositoryTestandSearchRepositoryTest: 22 passedBackend integration tests
HardDeleteCacheConsistencyITMissing fenced relationship update; fixed behavior passed 1/1 against MySQL and ElasticsearchIncludemode under parallel workersPython integration tests
Ingestion integration tests
Playwright (UI) tests
playwright-summarypassedManual testing performed
actionlinton all 16 changed workflowsbash -n, YAML parsing, and targeted Docker-storage helper validationUI screen recording / screenshots:
Not applicable — test synchronization changed, not product UI behavior.
Checklist:
Fixes <issue-number>: <short explanation>.Fixes #<issue-number>above.Greptile Summary
This PR makes integration-test outcomes deterministic and strengthens search consistency. The main changes are:
Confidence Score: 4/5
The retry upsert should be fixed before merging.
openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java
Important Files Changed
Comments Outside Diff (1)
openmetadata-service/src/main/java/org/openmetadata/service/drive/ContextFileExtractionService.java, line 286-296 (link)Three rapid optimistic-lock conflicts make this helper return
false, after which callers abandon the remaining extraction transition. In the result and failure paths, the context file can remain inAnalyzingindefinitely instead of reaching a terminal or retryable state.Context Used: CLAUDE.md (source)
Reviews (33): Last reviewed commit: "fix(migration): execute retry claim toke..." | Re-trigger Greptile
Context used: