model_test ignores the -G conn_logging, timing_stress and checkpoint_crash generator overrides

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • WT12.0.0, 9.1.0-rc0
    • Affects Version/s: None
    • Component/s: Test Model
    • None
    • Storage Engines - Persistence
    • 50.402
    • None
    • None

      Three of model_test's -G generator overrides have no effect.

      conn_logging

      kv_workload_generator::generate_log_configurations() builds a throwaway generator from the static _default_spec rather than the spec the caller passed, so -G conn_logging= is discarded and connection logging stays at its 0.5 default.

      timing_stress

      generate_stress_configurations() has the identical _default_spec bug, so all eleven -G timing_stress.<mode>=<weight> overrides are discarded and every stress mode stays at its equal 0.1 default weight.

      checkpoint_crash

      checkpoint_crash has no UPDATE_SPEC entry in update_spec() (test/model/tools/model_test/main.cpp), so it cannot be tuned at all. checkpoint, crash, evict and restart are all there.

      Reproducer

      -n generates and prints the workload without running it, so these need no database and take a second. From cmake_build/test/model/tools:

      $ ./model_test -n -l 5-6 -S 1 -G conn_logging=0.0 | grep -c 'log=(enabled=true)'
      1     <-- asked for no logging, got logging
      
      $ ./model_test -n -l 5-6 -S 11 -G conn_logging=1.0 | grep -c 'log=(enabled=true)'
      0     <-- asked for logging, got none
      

      With the fix, the first command prints 0 and the second prints 1 for every seed.

      The stress overrides are ignored the same way. Asking for one mode at weight 1.0 with the other ten zeroed:

      $ ./model_test -n -g -l 5-6 -S 1 -G timing_stress.ckpt_slow=1.0,<other ten =0.0>
      timing_stress_for_test=[checkpoint_evict_page]     <-- the default-weighted draw
      

      With the fix this prints [checkpoint_slow] for every seed.

      Why it matters

      Between them these make it impossible to ask for a run with logging deliberately on or off at a chosen checkpoint-crash rate, which is exactly what is needed to test crash/recovery behaviour that depends on logging. It also silently weakens any -G conn_logging or -G timing_stress.* in an Evergreen task definition.

      Definition of done

      • -G conn_logging= controls the generated connection configuration.
      • -G timing_stress.<mode>= controls the stress mode weights.
      • -G checkpoint_crash= controls the checkpoint crash probability.

      Fix

      Split out of the first commit of https://github.com/wiredtiger/wiredtiger/pull/14437 (draft), because it is unrelated to checkpoints. PR: https://github.com/wiredtiger/wiredtiger/pull/14438

            Assignee:
            Etienne Petrel
            Reporter:
            Etienne Petrel
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: