Description
Validate index naming behavior for two key scenarios: a clean install starting directly in Phase 1, and a production-style migration catchup where an existing ES index is present when Phase 2 is first activated.
Parent sub-epic: #35476
Parent epic: #34164
Test plan reference: Section 9 — Scenario E
Acceptance Criteria
E-1 — Fresh install (same index name in ES and OS):
E-2 — Migration catchup (different index names per provider):
Additional Context
DB validation queries:
-- Verify rows per provider
SELECT
CASE WHEN index_name LIKE 'os::%' THEN 'OS' ELSE 'ES' END AS provider,
COUNT(*) AS row_count
FROM indicies
GROUP BY 1;
-- OS rows only
SELECT * FROM indicies WHERE index_name LIKE 'os::%';
Depends on: #35476
Description
Validate index naming behavior for two key scenarios: a clean install starting directly in Phase 1, and a production-style migration catchup where an existing ES index is present when Phase 2 is first activated.
Parent sub-epic: #35476
Parent epic: #34164
Test plan reference: Section 9 — Scenario E
Acceptance Criteria
E-1 — Fresh install (same index name in ES and OS):
FEATURE_FLAG_OPEN_SEARCH_PHASE=1. Bootstrap creates both ES and OS indices simultaneously.indiciesDB table has two rows per logical index: one plain ES name, oneos::prefixed OS name. Both share the same timestamp.cluster_<id>.working_20260421...).E-2 — Migration catchup (different index names per provider):
cluster_<id>.working_<old_timestamp>present.indiciestable has one row per logical index (noos::rows).FEATURE_FLAG_OPEN_SEARCH_PHASE=2. Restart.indiciestable shows two rows for the working index:cluster_<id>.working_<old>(ES) andos::cluster_<id>.working_<new>(OS). Timestamps are different.GET /v1/esindexlists both indices with their respective timestamps.Additional Context
DB validation queries:
Depends on: #35476