Description
Explicit validation of each known bug fix introduced by the OpenSearch migration PRs. Each item below maps to a specific issue and PR.
Parent sub-epic: #35476
Parent epic: #34164
Test plan reference: Section 12 — Bugs to Validate
Acceptance Criteria
Additional Context
DB query to check for orphaned rows:
SELECT * FROM indicies WHERE index_name = '<deleted_index_name>';
Expected after successful delete (with PR #35342 merged): 0 rows.
Depends on: #35476
Description
Explicit validation of each known bug fix introduced by the OpenSearch migration PRs. Each item below maps to a specific issue and PR.
Parent sub-epic: #35476
Parent epic: #34164
Test plan reference: Section 12 — Bugs to Validate
Acceptance Criteria
[BUG] OS exceptions propagate to client in Phase 1 dual-write (should be fire-and-forget) #35302 / PR fix(opensearch): configurable shadow write log level + phase-aware index tests (#35302) #35389 — OS exceptions propagated to caller in Phase 1 (fire-and-forget contract): Run Scenario B-4. Publish a content item while OS is down. Publish succeeds. No exception reaches the caller. WARN log entry present.
[BUG] OSIndexAPIImpl.getClosedIndexes() not implemented — closed OS indices become invisible #35304 / PR fix(opensearch): implement OSIndexAPIImpl.getClosedIndexes() — fixes closed index 404s #35352 —
getClosedIndexes()stub returned empty list: Run Scenario D-8. Close a non-active OS index. List indices — closed OS index appears (not invisible). Re-open and delete successfully.[BUG] putMapping fails with HTTP 400 on OpenSearch 3.4.0 — ES mapping format incompatibility #35305 / PR fix(opensearch): ensure OS indices always created with custom analyzers — fixes #35305 #35349 —
putMappingreturned 400 on OS 3.4.0: Verifyos-content-settings.jsonis loaded on OS index creation. OS index creation completes without HTTP 400 errors in logs.[BUG] DELETE /api/v1/esindex/{name} does not clean up indicies table — orphaned DB rows #35306 / PR fix(index): clean up indicies DB rows on all physical delete paths (DO NOT MERGE) #35342 —⚠️ PR NOT MERGED at time of writing): Run Scenario D-6. After deleting an index, confirm the
DELETE /v1/esindexleaves orphaned DB row (indiciesDB row is removed. If PR is not yet merged, document the orphaned row as a known bug and mark this item as blocked.fix(ReindexThread): TOCTOU race on BulkProcessor rebuild — use AtomicReference + compareAndSet #35313 / PR fix(reindex): eliminate TOCTOU race in ReindexThread BulkProcessor rebuild #35323 — TOCTOU race on BulkProcessor rebuild: Run concurrent reindex + publish load test. No NPE or stale BulkProcessor in logs.
fix(OSBulkHelper): getIndexName() always returns fallback — wrong type passed to getActiveIndexName #35314 / PR fix(opensearch): resolve active OS working index in OSBulkHelper.getIndexName() (#35314) #35390 —
OSBulkHelper.getIndexName()always returneddotcms_content: In Phase 1 or 2, publish content and inspect the bulk request sent to OS. Confirm the correct index name is used (not the fallbackdotcms_content).fix(opensearch): prevent ES index recreation and spurious reads in Phase 3 #35356 scope / PR fix(opensearch): prevent ES index recreation and spurious reads in Phase 3 #35356 — Phase 3 re-creates ES indices: Run Scenario F-1 (when Phase 3 is unblocked). ES must not be touched in Phase 3.
Additional Context
DB query to check for orphaned rows:
Expected after successful delete (with PR #35342 merged): 0 rows.
Depends on: #35476