Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-4359

txn-recover should return WT_TRY_SALVAGE instead of WT_NOTFOUND in cases where a log files are missing or corrupt

    • Type: Icon: Bug Bug
    • Resolution: Duplicate
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None
    • Storage NYC 2018-11-05

      In certain corruption scenarios, __wt_txn_recover can return WT_NOTFOUND and results in the inability to attempt a salvage.

      Cases that I am aware of in v4.0. I was able to obtain these stacktraces by starting mongod on .wt and .turtle metadata files provided by a customer with data corruption.

      When log files are missing:
      __wt_log_scan()

      #0  __wt_log_scan (session=0x5555594478a0, lsnp=lsnp@entry=0x55555cb2d010, flags=flags@entry=0, func=func@entry=0x5555560bce30 <__txn_log_recover>, cookie=cookie@entry=0x7fffffffa850) at src/third_party/wiredtiger/src/log/log.c:2290
      #1  0x00005555560be3b7 in __wt_txn_recover (session=0x5555594478a0, session@entry=0x555559447000) at src/third_party/wiredtiger/src/txn/txn_recover.c:621
      #2  0x0000555556048f57 in __wt_connection_workers (session=session@entry=0x555559447000, cfg=cfg@entry=0x7fffffffaac0) at src/third_party/wiredtiger/src/conn/conn_open.c:225
      #3  0x0000555556045b83 in wiredtiger_open (home=<optimized out>, event_handler=event_handler@entry=0x55555940db18, config=<optimized out>, connectionp=connectionp@entry=0x55555940db08) at src/third_party/wiredtiger/src/conn/conn_api.c:2761
      #4  0x000055555600b803 in mongo::WiredTigerKVEngine::_openWiredTiger (this=this@entry=0x55555940db00, path="/home/louis/Downloads/SERVER-37249/tmp",
          wtOpenConfig="create,cache_size=31631M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close"...)
          at src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp:605
      

      Even when --nojournal is used, WT_NOTFOUND is still returned
      __recovery_file_scan()

      #0  __recovery_file_scan (r=r@entry=0x7fffffffa820) at src/third_party/wiredtiger/src/txn/txn_recover.c:507
      #1  0x00005555560be3f0 in __wt_txn_recover (session=0x5555594478a0, session@entry=0x555559447000) at src/third_party/wiredtiger/src/txn/txn_recover.c:574
      #2  0x0000555556048f57 in __wt_connection_workers (session=session@entry=0x555559447000, cfg=cfg@entry=0x7fffffffaa90) at src/third_party/wiredtiger/src/conn/conn_open.c:225
      #3  0x0000555556045b83 in wiredtiger_open (home=<optimized out>, event_handler=event_handler@entry=0x55555940db18, config=<optimized out>, connectionp=connectionp@entry=0x55555940db08) at src/third_party/wiredtiger/src/conn/conn_api.c:2761
      #4  0x000055555600b803 in mongo::WiredTigerKVEngine::_openWiredTiger (this=this@entry=0x55555940db00, path="/home/louis/Downloads/SERVER-37249/tmp",
          wtOpenConfig="create,cache_size=31631M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close"...)
          at src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp:605
      #5  0x00005555560118b6 in mongo::WiredTigerKVEngine::WiredTigerKVEngine (this=0x55555940db00, canonicalName=..., path="/home/louis/Downloads/SERVER-37249/tmp", cs=<optimized out>, extraOpenOptions=..., cacheSizeMB=<optimized out>, durable=false, ephemeral=false, repair=true,
          readOnly=false) at src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp:520
      

            Assignee:
            louis.williams@mongodb.com Louis Williams
            Reporter:
            louis.williams@mongodb.com Louis Williams
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: