Skip to content

Integration-test hardening + bootstrap race tolerance + XML docs#120

Merged
bfarmer67 merged 2 commits intomainfrom
devs/bfarmer/integration-test-hardening
May 5, 2026
Merged

Integration-test hardening + bootstrap race tolerance + XML docs#120
bfarmer67 merged 2 commits intomainfrom
devs/bfarmer/integration-test-hardening

Conversation

@bfarmer67
Copy link
Copy Markdown
Contributor

Summary

Two scope-distinct improvements bundled per the established release cadence (v2.2.1):

Dispatcher / integration-test hardening (commit 5563b5e):

  • StatementDispatcher: pass CAS query params (if_seq_no/if_primary_term) via IRequestParameters instead of embedding them in the path string (OpenSearch.Net rejects embedded query strings); add CasPutParameters.
  • Handle OpenSearchClientException in DispatchUpdateSettingsAsync and DispatchReindexAsync for ThrowExceptions=true clients.
  • SafeDefaultMergeMiddleware: co-inject conflicts: proceed with op_type: create on REINDEX to prevent abort-on-conflict defeating idempotency (ADR-0011).
  • R-24c gap-fill tests: handle both ThrowExceptions modes; defensive cleanup against container-teardown races.
  • InitializeTestContainers: HYPERBEE_TESTS_PROVIDERS_ONLY env gate to scope startup; HYPERBEE_TESTS_SKIP_SINGLE_NODE support.
  • CouchbaseTestContainer: remove erroneous port 80 mapping.

Public-surface gap closure (commit 2528250):

  • LedgerIndexInitStep / LockIndexInitStep: tolerate the TOCTOU race between Exists() and Create() by detecting resource_already_exists_exception in both client modes. Ledger step still verifies the existing mapping on race-loss.
  • OpenSearchMigrationOptions: full XML docs on every public type, enum value, property, const, and ctor; lift R-19 / R-29 / PA-2 rationale from line comments into <summary>/<remarks>; add <see cref> links between related options.
  • OpenSearchExceptions: full XML docs on every exception type and ctor.

Test plan

  • Provider builds clean: 0 warnings, 0 errors across net8/net9/net10.
  • Unit tests: 356/356 pass on net10.
  • Integration tests (non-MultiNode OpenSearch suite): 75/75 pass across all 3 frameworks.
  • Multi-node OpenSearch tests: not run locally (Docker resource constraints — 3 JVMs); CI handles via R-28b multi_node_tests.yml.

bfarmer67 added 2 commits May 4, 2026 16:20
- StatementDispatcher: pass CAS query params (if_seq_no/if_primary_term) via
  IRequestParameters instead of embedding in path string (OpenSearch.Net rejects
  paths with query strings); add CasPutParameters class
- StatementDispatcher: handle OpenSearchClientException in DispatchUpdateSettingsAsync
  and DispatchReindexAsync for ThrowExceptions=true clients
- SafeDefaultMergeMiddleware: co-inject conflicts:proceed with op_type:create on
  REINDEX to prevent abort-on-conflict defeating idempotency (ADR-0011)
- R-24c gap-fill tests: handle both ThrowExceptions modes in DynamicStrict assertion;
  make LedgerWrite cleanup defensive against container teardown races
- InitializeTestContainers: add HYPERBEE_TESTS_PROVIDERS_ONLY env gate to scope
  container startup; add HYPERBEE_TESTS_SKIP_SINGLE_NODE support
- CouchbaseTestContainer: remove erroneous port 80 mapping
- LedgerIndexInitStep / LockIndexInitStep: tolerate the TOCTOU race between
  Exists() and Create() by detecting `resource_already_exists_exception` in
  both client modes (response-based and exception-based). On race-loss the
  ledger step still verifies the existing mapping; the lock step succeeds.
- OpenSearchMigrationOptions: add XML docs to every public type, enum
  value, property, const, and ctor; lift R-19 / R-29 / PA-2 rationale
  from line comments into <summary>/<remarks>; add <see cref> links
  between related options (LockRenewInterval <-> LockStaleAfter, etc.).
- OpenSearchExceptions: add XML docs to every exception type and ctor;
  document RecordId/StatementIndex/FailedStatementIndex properties.
@bfarmer67 bfarmer67 merged commit e7a099e into main May 5, 2026
10 checks passed
@bfarmer67 bfarmer67 deleted the devs/bfarmer/integration-test-hardening branch May 5, 2026 00:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant