-
Type: Bug
-
Resolution: Duplicate
-
Priority: Major - P3
-
None
-
Affects Version/s: 4.2.6
-
Component/s: None
-
None
I've found two ways to trigger the following assertion on the tip of mongodb-4.2 (4c2230d922d5698d67be1c6b29be54ea3dde379d) when opening datafiles left behind by mongodb-4.4 (5b5d7988560a20dbe827a1fa16c0481e6c0e2821).
The assertion:
[1585840139:661667][10257:0x7ff5a069b740], wt, file:collection.wt, WT_SESSION.open_cursor: __wt_check_addr_validity, 156: an oldest start timestamp (0, 30) newer than its durable start timestamp (0, 0): WT_PANIC: WiredTiger library panic
I believe these have the same root cause, but I wanted to make sure it was clear that MongoDB can arrive with these files in multiple paths that the server considers rather disparate. Following are two short-hand WT programs:
Case 1, using use_timestamp=false on close:
/* Sets `use_timestamps=<bool>` on WT_CONNECTION::close config/destruction. */ const bool useTimestampsAtShutdown = false; WtConn conn("./WT_HOME_case1", "config_base=false", useTimestampsAtShutdown); conn.setRelease("3.3"); { WtSession session = conn.getSession(); invariantWTOKEasy(session.createTable(collTableUri)); session.alterTableLogging(collTableUri, false); } invariantWTOKEasy(conn.setOldestTimestamp(10)); invariantWTOKEasy(conn.setStableTimestamp(20)); WtSession insertSession = conn.getSession(); insertSession.begin(); WtCursor collCursor = insertSession.openCursor(collTableUri); collCursor.insert(0, 0); insertSession.setTimestamp(30); insertSession.commit();
Case 2: use_timestamp=true on close where the last insert TS is < the updated stable TS:
/* Sets `use_timestamps=<bool>` on WT_CONNECTION::close config/destruction. */ const bool useTimestampsAtShutdown = true; WtConn conn("./WT_HOME_case2", "config_base=false", useTimestampsAtShutdown); conn.setRelease("3.3"); { WtSession session = conn.getSession(); invariantWTOKEasy(session.createTable(collTableUri)); session.alterTableLogging(collTableUri, false); } invariantWTOKEasy(conn.setOldestTimestamp(10)); invariantWTOKEasy(conn.setStableTimestamp(20)); WtSession insertSession = conn.getSession(); insertSession.begin(); WtCursor collCursor = insertSession.openCursor(collTableUri); collCursor.insert(0, 0); insertSession.setTimestamp(30); insertSession.commit(); conn.setStableTimestamp(40);
Running the wt tool built on mongo-4.2 to dump the table:collection results in the following:
dgottlieb@chimichurri ~/xgen/scratch$ ../wiredtiger42/wt -C "config_base=false" -h WT_HOME_case1 dump "table:collection" [1585840139:661667][10257:0x7ff5a069b740], wt, file:collection.wt, WT_SESSION.open_cursor: __wt_check_addr_validity, 156: an oldest start timestamp (0, 30) newer than its durable start timestamp (0, 0): WT_PANIC: WiredTiger library panic dgottlieb@chimichurri ~/xgen/scratch$ ../wiredtiger42/wt -C "config_base=false" -h WT_HOME_case2 dump "table:collection" [1585840143:958542][10284:0x7f9ee4809740], wt, file:collection.wt, WT_SESSION.open_cursor: __wt_check_addr_validity, 156: an oldest start timestamp (0, 30) newer than its durable start timestamp (0, 0): WT_PANIC: WiredTiger library panic
Attached are the following for both cases:
- unprocessed cpp programs to be linked against mongodb-4.4 that generate problematic datafies
- the included include/wt_raii.h file needed to compile the unprocessed cpp files
- Preprocessed versions of both programs
- Data directories output by both programs that a 4.2 linked wt CLI program will be unable to dump.
- duplicates
-
WT-5934 Stop validating timestamps read from disk in 4.2
- Closed
- is depended on by
-
SERVER-47219 Correct downgrade_after_rollback_via_refetch to not binary downgrade on crash
- Closed
-
SERVER-43849 Write NotMaster error in upgrade_downgrade_cluster due to stale RS status in mongos
- Closed