diff options
author | Luke Chen <luke.chen@mongodb.com> | 2020-04-09 14:39:22 +1000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-09 04:59:48 +0000 |
commit | c6a6e086082e42e6cbb4fe466e75a883714df877 (patch) | |
tree | d8ca6e23bc871f81c2da54e5257370fcc8405fa5 | |
parent | f6aa02a52d2ca5926fc142e7c421ce842553b2a5 (diff) | |
download | mongo-c6a6e086082e42e6cbb4fe466e75a883714df877.tar.gz |
Import wiredtiger: 2a9cabc3100088666ae5b1e9f430bcfd1c6172f4 from branch mongodb-4.2
ref: 070699625d..2a9cabc310
for: 4.2.6
WT-5966 4.4 downgrade can result in 4.2 core dumps if cells are ignored
-rw-r--r-- | src/third_party/wiredtiger/import.data | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/btree/bt_handle.c | 24 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/btree/bt_page.c | 94 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/conn/conn_api.c | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/cell.h | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/cell.i | 67 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/connection.h | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/extern.h | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/reconcile.i | 14 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/reconcile/rec_col.c | 22 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/reconcile/rec_row.c | 16 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/reconcile/rec_write.c | 3 |
12 files changed, 128 insertions, 119 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 1cc34a69cab..eedce57dc92 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-4.2", - "commit": "070699625d32ab31ed553697339e698075faf3fd" + "commit": "2a9cabc3100088666ae5b1e9f430bcfd1c6172f4" } diff --git a/src/third_party/wiredtiger/src/btree/bt_handle.c b/src/third_party/wiredtiger/src/btree/bt_handle.c index ebaebc84a01..c7865c4eeab 100644 --- a/src/third_party/wiredtiger/src/btree/bt_handle.c +++ b/src/third_party/wiredtiger/src/btree/bt_handle.c @@ -15,30 +15,6 @@ static int __btree_preload(WT_SESSION_IMPL *); static int __btree_tree_open_empty(WT_SESSION_IMPL *, bool); /* - * __wt_btree_page_version_config -- - * Select a Btree page format. - */ -void -__wt_btree_page_version_config(WT_SESSION_IMPL *session) -{ - WT_CONNECTION_IMPL *conn; - - conn = S2C(session); - -/* - * Write timestamp format pages if at the right version or if configured at build-time. - * - * The timestamp page format is written starting with WiredTiger version 10.0.0. We need only - * compare the major version as the minor version is zero. - */ -#define WT_VERSION_TS_MAJOR 10 - __wt_process.page_version_ts = conn->compat_major >= WT_VERSION_TS_MAJOR; -#if defined(HAVE_PAGE_VERSION_TS) - __wt_process.page_version_ts = true; -#endif -} - -/* * __btree_clear -- * Clear a Btree, either on handle discard or re-open. */ diff --git a/src/third_party/wiredtiger/src/btree/bt_page.c b/src/third_party/wiredtiger/src/btree/bt_page.c index 8bb8c7f1894..1402e772dca 100644 --- a/src/third_party/wiredtiger/src/btree/bt_page.c +++ b/src/third_party/wiredtiger/src/btree/bt_page.c @@ -10,9 +10,9 @@ static void __inmem_col_fix(WT_SESSION_IMPL *, WT_PAGE *); static void __inmem_col_int(WT_SESSION_IMPL *, WT_PAGE *); -static int __inmem_col_var(WT_SESSION_IMPL *, WT_PAGE *, uint64_t, size_t *, bool); +static int __inmem_col_var(WT_SESSION_IMPL *, WT_PAGE *, uint64_t, size_t *); static int __inmem_row_int(WT_SESSION_IMPL *, WT_PAGE *, size_t *); -static int __inmem_row_leaf(WT_SESSION_IMPL *, WT_PAGE *, bool); +static int __inmem_row_leaf(WT_SESSION_IMPL *, WT_PAGE *, size_t *, bool); static int __inmem_row_leaf_entries(WT_SESSION_IMPL *, const WT_PAGE_HEADER *, uint32_t *); /* @@ -206,13 +206,13 @@ __wt_page_inmem(WT_SESSION_IMPL *session, WT_REF *ref, const void *image, uint32 __inmem_col_int(session, page); break; case WT_PAGE_COL_VAR: - WT_ERR(__inmem_col_var(session, page, dsk->recno, &size, check_unstable)); + WT_ERR(__inmem_col_var(session, page, dsk->recno, &size)); break; case WT_PAGE_ROW_INT: WT_ERR(__inmem_row_int(session, page, &size)); break; case WT_PAGE_ROW_LEAF: - WT_ERR(__inmem_row_leaf(session, page, check_unstable)); + WT_ERR(__inmem_row_leaf(session, page, &size, check_unstable)); break; default: WT_ERR(__wt_illegal_value(session, page->type)); @@ -313,36 +313,11 @@ __inmem_col_var_repeats(WT_SESSION_IMPL *session, WT_PAGE *page, uint32_t *np) } /* - * __unstable_skip -- - * Optionally skip unstable entries - */ -static inline bool -__unstable_skip(WT_SESSION_IMPL *session, const WT_PAGE_HEADER *dsk, WT_CELL_UNPACK *unpack) -{ - /* - * We should never see a prepared cell, it implies an unclean shutdown followed by a downgrade - * (clean shutdown rolls back any prepared cells). Complain and ignore the row. - */ - if (F_ISSET(unpack, WT_CELL_UNPACK_PREPARE)) { - __wt_err(session, EINVAL, "unexpected prepared cell found, ignored"); - return (true); - } - - /* - * Skip unstable entries after downgrade to releases without validity windows and from previous - * wiredtiger_open connections. - */ - return ((unpack->stop_ts != WT_TS_MAX || unpack->stop_txn != WT_TXN_MAX) && - (S2C(session)->base_write_gen > dsk->write_gen || !__wt_process.page_version_ts)); -} - -/* * __inmem_col_var -- * Build in-memory index for variable-length, data-only leaf pages in column-store trees. */ static int -__inmem_col_var( - WT_SESSION_IMPL *session, WT_PAGE *page, uint64_t recno, size_t *sizep, bool check_unstable) +__inmem_col_var(WT_SESSION_IMPL *session, WT_PAGE *page, uint64_t recno, size_t *sizep) { WT_BTREE *btree; WT_CELL_UNPACK unpack; @@ -366,12 +341,6 @@ __inmem_col_var( indx = 0; cip = page->pg_var; WT_CELL_FOREACH_BEGIN (session, btree, page->dsk, unpack) { - /* Optionally skip unstable values */ - if (check_unstable && __unstable_skip(session, page->dsk, &unpack)) { - --page->entries; - continue; - } - WT_COL_PTR_SET(cip, WT_PAGE_DISK_OFFSET(page, unpack.cell)); cip++; @@ -554,11 +523,47 @@ __inmem_row_leaf_entries(WT_SESSION_IMPL *session, const WT_PAGE_HEADER *dsk, ui } /* + * __inmem_row_leaf_tombstone -- + * Add row-store tombstones required by 4.4 downgrade. (Similar code is not included for + * column-store, MongoDB does not use the column-store functionality.) + */ +static int +__inmem_row_leaf_tombstone(WT_SESSION_IMPL *session, WT_PAGE *page, WT_ROW *rip, size_t *sizep) +{ + WT_BTREE *btree; + WT_UPDATE **upd_array, *upd; + + btree = S2BT(session); + + /* + * Give the page a modify structure and allocate the per-page update array if this is the first + * tombstone seen. + * + * Mark tree dirty, unless the handle is read-only. We'd like to discard the tombstones, but if + * the handle is read-only, we're not able to do so.) + */ + if (page->modify == NULL) { + WT_RET(__wt_page_modify_init(session, page)); + if (!F_ISSET(btree, WT_BTREE_READONLY)) + __wt_page_modify_set(session, page); + WT_RET(__wt_calloc_def(session, page->entries, &page->modify->mod_row_update)); + } + + /* Cleared memory matches the lowest possible transaction ID and timestamp, do nothing. */ + WT_RET(__wt_update_alloc(session, NULL, &upd, sizep, WT_UPDATE_TOMBSTONE)); + upd_array = page->modify->mod_row_update; + upd->next = upd_array[WT_ROW_SLOT(page, rip)]; + upd_array[WT_ROW_SLOT(page, rip)] = upd; + + return (0); +} + +/* * __inmem_row_leaf -- * Build in-memory index for row-store leaf pages. */ static int -__inmem_row_leaf(WT_SESSION_IMPL *session, WT_PAGE *page, bool check_unstable) +__inmem_row_leaf(WT_SESSION_IMPL *session, WT_PAGE *page, size_t *sizep, bool check_unstable) { WT_BTREE *btree; WT_CELL_UNPACK unpack; @@ -586,25 +591,18 @@ __inmem_row_leaf(WT_SESSION_IMPL *session, WT_PAGE *page, bool check_unstable) ++rip; break; case WT_CELL_VALUE: - /* Optionally skip unstable values */ - if (check_unstable && __unstable_skip(session, page->dsk, &unpack)) { - --rip; - --page->entries; - } - /* * Simple values without compression can be directly referenced on the page to avoid * repeatedly unpacking their cells. */ if (!btree->huffman_value) __wt_row_leaf_value_set(page, rip - 1, &unpack); - break; + + /* FALLTHROUGH */ case WT_CELL_VALUE_OVFL: /* Optionally skip unstable values */ - if (check_unstable && __unstable_skip(session, page->dsk, &unpack)) { - --rip; - --page->entries; - } + if (F_ISSET(&unpack, WT_CELL_UNPACK_TOMBSTONE) && check_unstable) + WT_RET(__inmem_row_leaf_tombstone(session, page, rip - 1, sizep)); break; default: return (__wt_illegal_value(session, unpack.type)); diff --git a/src/third_party/wiredtiger/src/conn/conn_api.c b/src/third_party/wiredtiger/src/conn/conn_api.c index 65580de7a7b..67b213e85f9 100644 --- a/src/third_party/wiredtiger/src/conn/conn_api.c +++ b/src/third_party/wiredtiger/src/conn/conn_api.c @@ -2491,7 +2491,6 @@ wiredtiger_open(const char *home, WT_EVENT_HANDLER *event_handler, const char *c } WT_ERR(__wt_verbose_config(session, cfg)); WT_ERR(__wt_timing_stress_config(session, cfg)); - __wt_btree_page_version_config(session); /* Set up operation tracking if configured. */ WT_ERR(__wt_conn_optrack_setup(session, cfg, false)); diff --git a/src/third_party/wiredtiger/src/include/cell.h b/src/third_party/wiredtiger/src/include/cell.h index 782e2105ce2..3651284391c 100644 --- a/src/third_party/wiredtiger/src/include/cell.h +++ b/src/third_party/wiredtiger/src/include/cell.h @@ -188,6 +188,7 @@ struct __wt_cell_unpack { #define WT_CELL_UNPACK_OVERFLOW 0x1u /* cell is an overflow */ #define WT_CELL_UNPACK_PREPARE 0x2u /* cell is part of a prepared transaction */ #define WT_CELL_UNPACK_TIME_PAIRS_CLEARED 0x4u /* time pairs are cleared because of restart */ +#define WT_CELL_UNPACK_TOMBSTONE 0x8u /* cell is never visible */ /* AUTOMATIC FLAG VALUE GENERATION STOP */ uint8_t flags; diff --git a/src/third_party/wiredtiger/src/include/cell.i b/src/third_party/wiredtiger/src/include/cell.i index 91815677dd0..f9a1485718a 100644 --- a/src/third_party/wiredtiger/src/include/cell.i +++ b/src/third_party/wiredtiger/src/include/cell.i @@ -64,12 +64,12 @@ __cell_pack_value_validity(WT_SESSION_IMPL *session, uint8_t **pp, wt_timestamp_ wt_timestamp_t start_ts, uint64_t start_txn, wt_timestamp_t durable_stop_ts, wt_timestamp_t stop_ts, uint64_t stop_txn, bool prepare) { +#ifdef MONGODB44_WITH_TIMESTAMP_PAGE_FORMAT uint8_t flags, *flagsp; - /* Historic page versions and globally visible values have no associated validity window. */ - if (!__wt_process.page_version_ts || - (durable_start_ts == WT_TS_NONE && start_ts == WT_TS_NONE && start_txn == WT_TXN_NONE && - durable_stop_ts == WT_TS_NONE && stop_ts == WT_TS_MAX && stop_txn == WT_TXN_MAX)) { + /* Globally visible values have no associated validity window. */ + if (durable_start_ts == WT_TS_NONE && start_ts == WT_TS_NONE && start_txn == WT_TXN_NONE && + durable_stop_ts == WT_TS_NONE && stop_ts == WT_TS_MAX && stop_txn == WT_TXN_MAX) { ++*pp; return; } @@ -120,6 +120,18 @@ __cell_pack_value_validity(WT_SESSION_IMPL *session, uint8_t **pp, wt_timestamp_ if (prepare) LF_SET(WT_CELL_PREPARE); *flagsp = flags; +#else + WT_UNUSED(session); + WT_UNUSED(durable_start_ts); + WT_UNUSED(start_ts); + WT_UNUSED(start_txn); + WT_UNUSED(durable_stop_ts); + WT_UNUSED(stop_ts); + WT_UNUSED(stop_txn); + WT_UNUSED(prepare); + + ++*pp; +#endif } /* @@ -180,13 +192,13 @@ __cell_pack_addr_validity(WT_SESSION_IMPL *session, uint8_t **pp, wt_timestamp_t wt_timestamp_t oldest_start_ts, uint64_t oldest_start_txn, wt_timestamp_t stop_durable_ts, wt_timestamp_t newest_stop_ts, uint64_t newest_stop_txn) { +#ifdef MONGODB44_WITH_TIMESTAMP_PAGE_FORMAT uint8_t flags, *flagsp; - /* Historic page versions and globally visible values have no associated validity window. */ - if (!__wt_process.page_version_ts || - (start_durable_ts == WT_TS_NONE && stop_durable_ts == WT_TS_NONE && - oldest_start_ts == WT_TS_NONE && oldest_start_txn == WT_TXN_NONE && - newest_stop_ts == WT_TS_MAX && newest_stop_txn == WT_TXN_MAX)) { + /* Globally visible values have no associated validity window. */ + if (start_durable_ts == WT_TS_NONE && stop_durable_ts == WT_TS_NONE && + oldest_start_ts == WT_TS_NONE && oldest_start_txn == WT_TXN_NONE && + newest_stop_ts == WT_TS_MAX && newest_stop_txn == WT_TXN_MAX) { ++*pp; return; } @@ -253,6 +265,17 @@ __cell_pack_addr_validity(WT_SESSION_IMPL *session, uint8_t **pp, wt_timestamp_t LF_SET(WT_CELL_TS_DURABLE_STOP); } *flagsp = flags; +#else + WT_UNUSED(session); + WT_UNUSED(start_durable_ts); + WT_UNUSED(oldest_start_ts); + WT_UNUSED(oldest_start_txn); + WT_UNUSED(stop_durable_ts); + WT_UNUSED(newest_stop_ts); + WT_UNUSED(newest_stop_txn); + + ++*pp; +#endif } /* @@ -734,6 +757,29 @@ __wt_cell_leaf_value_parse(WT_PAGE *page, WT_CELL *cell) } /* + * __unstable_skip -- + * Optionally skip unstable entries in the MongoDB 4.2 release. + */ +static inline bool +__unstable_skip(WT_SESSION_IMPL *session, WT_CELL_UNPACK *unpack) +{ + /* + * We should never see a prepared cell, it implies an unclean shutdown followed by a downgrade + * (clean shutdown rolls back any prepared cells). Complain and ignore the row. + */ + if (F_ISSET(unpack, WT_CELL_UNPACK_PREPARE)) { + __wt_err(session, EINVAL, "unexpected prepared cell found, ignored"); + return (true); + } + + /* + * Skip unstable entries after downgrade to releases without validity windows and from previous + * wiredtiger_open connections. + */ + return (unpack->stop_ts != WT_TS_MAX || unpack->stop_txn != WT_TXN_MAX); +} + +/* * __wt_cell_unpack_safe -- * Unpack a WT_CELL into a structure, with optional boundary checks. */ @@ -1011,6 +1057,9 @@ restart: return (WT_ERROR); /* Unknown cell type. */ } + if (__unstable_skip(session, unpack)) + F_SET(unpack, WT_CELL_UNPACK_TOMBSTONE); + /* * Check the original cell against the full cell length (this is a diagnostic as well, we may be * copying the cell from the page and we need the right length). diff --git a/src/third_party/wiredtiger/src/include/connection.h b/src/third_party/wiredtiger/src/include/connection.h index 54d1213173a..1bed17bad88 100644 --- a/src/third_party/wiredtiger/src/include/connection.h +++ b/src/third_party/wiredtiger/src/include/connection.h @@ -19,8 +19,6 @@ struct __wt_process { /* Locked: connection queue */ TAILQ_HEAD(__wt_connection_impl_qh, __wt_connection_impl) connqh; - bool page_version_ts; /* timestamp version page formats */ - /* Checksum functions */ #define __wt_checksum(chunk, len) __wt_process.checksum(chunk, len) uint32_t (*checksum)(const void *, size_t); diff --git a/src/third_party/wiredtiger/src/include/extern.h b/src/third_party/wiredtiger/src/include/extern.h index 595d3fddf92..6f686251363 100644 --- a/src/third_party/wiredtiger/src/include/extern.h +++ b/src/third_party/wiredtiger/src/include/extern.h @@ -1586,7 +1586,6 @@ extern void __wt_btcur_init(WT_SESSION_IMPL *session, WT_CURSOR_BTREE *cbt); extern void __wt_btcur_iterate_setup(WT_CURSOR_BTREE *cbt); extern void __wt_btcur_open(WT_CURSOR_BTREE *cbt); extern void __wt_btree_huffman_close(WT_SESSION_IMPL *session); -extern void __wt_btree_page_version_config(WT_SESSION_IMPL *session); extern void __wt_cache_stats_update(WT_SESSION_IMPL *session); extern void __wt_capacity_throttle(WT_SESSION_IMPL *session, uint64_t bytes, WT_THROTTLE_TYPE type); extern void __wt_checkpoint_progress(WT_SESSION_IMPL *session, bool closing); diff --git a/src/third_party/wiredtiger/src/include/reconcile.i b/src/third_party/wiredtiger/src/include/reconcile.i index 955d43c289d..722545767a5 100644 --- a/src/third_party/wiredtiger/src/include/reconcile.i +++ b/src/third_party/wiredtiger/src/include/reconcile.i @@ -47,6 +47,8 @@ __wt_rec_addr_ts_init(WT_RECONCILE *r, wt_timestamp_t *newest_durable_ts, wt_timestamp_t *oldest_start_tsp, uint64_t *oldest_start_txnp, wt_timestamp_t *newest_stop_tsp, uint64_t *newest_stop_txnp) { + WT_UNUSED(r); + /* * If the page format supports address timestamps (and not fixed-length column-store, where we * don't maintain timestamps at all), set the oldest/newest timestamps to values at the end of @@ -58,13 +60,11 @@ __wt_rec_addr_ts_init(WT_RECONCILE *r, wt_timestamp_t *newest_durable_ts, *oldest_start_txnp = WT_TXN_MAX; *newest_stop_tsp = WT_TS_NONE; *newest_stop_txnp = WT_TXN_NONE; - if (!__wt_process.page_version_ts || r->page->type == WT_PAGE_COL_FIX) { - *newest_durable_ts = WT_TS_NONE; - *oldest_start_tsp = WT_TS_NONE; - *oldest_start_txnp = WT_TXN_NONE; - *newest_stop_tsp = WT_TS_MAX; - *newest_stop_txnp = WT_TXN_MAX; - } + *newest_durable_ts = WT_TS_NONE; + *oldest_start_tsp = WT_TS_NONE; + *oldest_start_txnp = WT_TXN_NONE; + *newest_stop_tsp = WT_TS_MAX; + *newest_stop_txnp = WT_TXN_MAX; } /* diff --git a/src/third_party/wiredtiger/src/reconcile/rec_col.c b/src/third_party/wiredtiger/src/reconcile/rec_col.c index 3dcce6c8c36..7538d0d8da6 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_col.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_col.c @@ -880,12 +880,9 @@ compare: * record number, we've been doing that all along. */ if (rle != 0) { - if ((!__wt_process.page_version_ts || - (last.start_ts == start_ts && last.start_txn == start_txn && - last.stop_ts == stop_ts && last.stop_txn == stop_txn)) && - ((deleted && last.deleted) || - (!deleted && !last.deleted && last.value->size == size && - memcmp(last.value->data, data, size) == 0))) { + if ((deleted && last.deleted) || + (!deleted && !last.deleted && last.value->size == size && + memcmp(last.value->data, data, size) == 0)) { rle += repeat_count; continue; } @@ -994,9 +991,7 @@ compare: */ if (src_recno < n) { deleted = true; - if (last.deleted && (!__wt_process.page_version_ts || - (last.start_ts == start_ts && last.start_txn == start_txn && - last.stop_ts == stop_ts && last.stop_txn == stop_txn))) { + if (last.deleted) { /* * The record adjustment is decremented by one so we can naturally fall into the * RLE accounting below, where we increment rle by one, then continue in the @@ -1053,12 +1048,9 @@ compare: * the same thing. */ if (rle != 0) { - if ((!__wt_process.page_version_ts || - (last.start_ts == start_ts && last.start_txn == start_txn && - last.stop_ts == stop_ts && last.stop_txn == stop_txn)) && - ((deleted && last.deleted) || - (!deleted && !last.deleted && last.value->size == size && - memcmp(last.value->data, data, size) == 0))) { + if ((deleted && last.deleted) || + (!deleted && !last.deleted && last.value->size == size && + memcmp(last.value->data, data, size) == 0)) { ++rle; goto next; } diff --git a/src/third_party/wiredtiger/src/reconcile/rec_row.c b/src/third_party/wiredtiger/src/reconcile/rec_row.c index bc24c661b27..e5ab6910b9f 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_row.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_row.c @@ -531,16 +531,14 @@ static bool __rec_row_zero_len(WT_SESSION_IMPL *session, wt_timestamp_t start_ts, uint64_t start_txn, wt_timestamp_t stop_ts, uint64_t stop_txn) { - /* Before timestamps were stored on pages, it was always possible. */ - if (!__wt_process.page_version_ts) - return (true); + WT_UNUSED(session); + WT_UNUSED(start_ts); + WT_UNUSED(start_txn); + WT_UNUSED(stop_ts); + WT_UNUSED(stop_txn); - /* - * The item must be globally visible because we're not writing anything on the page. - */ - return ((stop_ts == WT_TS_MAX && stop_txn == WT_TXN_MAX) && - ((start_ts == WT_TS_NONE && start_txn == WT_TXN_NONE) || - __wt_txn_visible_all(session, start_txn, start_ts))); + /* Before timestamps were stored on pages, it was always possible. */ + return (true); } /* diff --git a/src/third_party/wiredtiger/src/reconcile/rec_write.c b/src/third_party/wiredtiger/src/reconcile/rec_write.c index 3911ff2f1ea..62d480bb02f 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_write.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_write.c @@ -1653,8 +1653,7 @@ __rec_split_write_header(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_REC_CHUNK F_SET(dsk, WT_PAGE_LAS_UPDATE); dsk->unused = 0; - - dsk->version = __wt_process.page_version_ts ? WT_PAGE_VERSION_TS : WT_PAGE_VERSION_ORIG; + dsk->version = WT_PAGE_VERSION_ORIG; /* Clear the memory owned by the block manager. */ memset(WT_BLOCK_HEADER_REF(dsk), 0, btree->block_header); |