Missing WT_RET in __recovery_file_scan silently discards incomplete-table cleanup errors

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Critical - P2
    • None
    • Affects Version/s: None
    • Component/s: Metadata, RTS
    • Environment:
      GCC 13, Ubuntu 24.04
    • Storage Engines - Foundations, Storage Engines - Persistence
    • 24.599
    • None
    • 1
    • v8.3

      During recovery, __recovery_file_scan (txn_recover.c line 976) calls __recovery_metadata_scan_prefix three times to scan the metadata. The two calls for "file:" and "tiered:" prefixes correctly wrap the return value with WT_RET. The call for the "table:" prefix (line 982), which invokes __metadata_clean_incomplete_table, does not. If the cleanup fails for any reason, for example, __wt_schema_drop returning an error or a config parse failure the non-zero return value is silently discarded and recovery proceeds as if nothing went wrong.

      For ReProduce;
      A csuite test (test_wt<this wt number(I added the WT number later, after this issue was opened>_txn_recovery_error) reproduces the bug and verifies the fix (I attached the before/after outputs on JIRA).
      Without the fix, wiredtiger_open returns 0 despite the cleanup failure and the incomplete
      metadata entry persists. With the fix, wiredtiger_open correctly returns an error.

      Proposed Fix;
      The fix is a one-line change wrap the call with WT_RET(), consistent with the two calls that follow it on lines 991-992.

        1. before_fix_output.txt
          5 kB
        2. after_fix_output.txt
          2 kB

            Assignee:
            Etienne Petrel
            Reporter:
            Tuna KARABACAK (EXT)
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: