schema_disagg_abort panics on first publish because the stress test never sets the stable disaggregated schema epoch

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Gone away
    • Priority: Major - P3
    • None
    • Affects Version/s: None
    • Component/s: Schema Management
    • Storage Engines - Foundations
    • 258.345
    • Storage Execution 2026-08-03
    • None
    • Not Needed

      Summary

      Since WT-18176 (962a690012, "Require the stable disaggregated schema epoch to be set
      before publishing"), every schema_disagg_abort csuite task fails immediately with a panic.

      Failing tasks

      All on wiredtiger-disagg, variants amazon2023-disagg-stress and
      amazon2023-disagg-asan-stress:

      • schema-disagg-abort-test-disagg-1
      • schema-disagg-abort-smoke-test-disagg-1
      • schema-disagg-abort-switch-test-disagg-1

      Example: task

      #3  __wt_abort (session=0x73437fc9bae0) at src/os_common/os_abort.c:32
      #4  __wt_panic_func (..., func="__schema_publish_disagg_schema_epoch", line=45,
            fmt="publish requires the stable disaggregated schema epoch to be set")
      #5  __schema_publish_disagg_schema_epoch (uri="table:schema_0_6", schema_epoch=1)
            at src/schema/schema_publish.c:45
      #6  __wt_schema_publish (...) at src/schema/schema_publish.c:88
      #7  __session_publish (...) at src/session/session_api.c:1428
      

      Root cause

      The test has a bootstrap cycle. Its timestamp thread is the only place that sets the stable
      schema epoch, and it derives the value from min(published_epoch) across the schema
      workers, skipping while that minimum is 0 (test/csuite/schema_disagg_abort/workload.c:308).
      So the stable epoch stays unset until the first WT_SESSION::publish — which is exactly
      the call WT-18176 now turns into a panic. The failure is deterministic, not a flake.

      The stable epoch is in-memory only (txn_global->has_stable_disaggregated_schema_epoch is
      set solely by WT_CONNECTION::set_timestamp; there is no recovery path), so each connection
      open needs it set again — including the step-down reopen in the test's switch mode.

      Fix

      In workload_run_phase(), reserve one epoch from the shared counter and set it as the
      stable disaggregated schema epoch before the phase's workers start. The reserved value sits
      above every epoch already published (so set_timestamp never moves the epoch backwards)
      and below every epoch the phase is about to publish (so the schema_epoch > stable check
      still holds).

            Assignee:
            Wei Hu
            Reporter:
            Wei Hu
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: