diff options
author | Etienne Petrel <etienne.petrel@mongodb.com> | 2022-08-02 01:27:22 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-08-02 01:57:15 +0000 |
commit | 979d9725ddaab30d35eefd4e14d42ec333c80824 (patch) | |
tree | e784dce84526ddbd12d3302f242ece1a94ef7df7 /src/third_party/wiredtiger/tools | |
parent | d335548cf9f33a902027510f8d2cbae1ff5be384 (diff) | |
download | mongo-979d9725ddaab30d35eefd4e14d42ec333c80824.tar.gz |
Import wiredtiger: c7a2c31856313ed42842b0ab69179b6b1f6a2eb2 from branch mongodb-master
ref: 030b7d7147..c7a2c31856
for: 6.1.0-rc0
WT-9667 Enhance the core dump tree walk script to print all the leaf pages of a root page (#8168)
Diffstat (limited to 'src/third_party/wiredtiger/tools')
-rw-r--r-- | src/third_party/wiredtiger/tools/gdb/wt_debug_script_update.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/third_party/wiredtiger/tools/gdb/wt_debug_script_update.py b/src/third_party/wiredtiger/tools/gdb/wt_debug_script_update.py index 13a04c18ef9..9580355fa94 100644 --- a/src/third_party/wiredtiger/tools/gdb/wt_debug_script_update.py +++ b/src/third_party/wiredtiger/tools/gdb/wt_debug_script_update.py @@ -70,6 +70,8 @@ def dump_update_chain(update_chain): if can_bson: try: obj = bson.decode_all(val_bytes)[0] + if obj["_id"]['id'] and obj["_id"]["id"].subtype == 4: + obj["_id"]["id"] = obj["_id"]["id"].as_uuid() except: pass print(' ' + '\n '.join(str(wt_val).split('\n')) + " " + str(obj) + " =>") @@ -86,6 +88,9 @@ def dump_insert_list(wt_insert): def dump_skip_list(wt_insert_head): wt_insert = wt_insert_head['head'][0] + if wt_insert.address == 0: + print(" Null insert list.") + return idx = 0 while True: if not wt_insert: @@ -115,7 +120,7 @@ def dump_modified(leaf_page): if not row_leaf_update: print("No update list") else: - print("Update list:") + print("Update list (({}){}):".format(leaf_page.type.name, leaf_page.address)) leaf_num_entries = int(leaf_page['entries']) for i in range(0, leaf_num_entries): dump_update_chain(row_leaf_update[i]) @@ -128,8 +133,8 @@ def dump_disk(leaf_page): print("No page loaded from disk.") return dbg('on-disk page:', dsk) - wt_page_header_size = 28 - wt_block_header_size = 12 + wt_page_header_size = 28 # defined as WT_PAGE_HEADER_SIZE in btmem.h + wt_block_header_size = 12 # defined as WT_BLOCK_HEADER_SIZE in block.h page_bytes = gdb.selected_inferior().read_memory(int(dsk.address) + wt_page_header_size + wt_block_header_size, int(dsk['mem_size'])).tobytes() print("Dsk:\n" + str(page_bytes)) @@ -138,13 +143,16 @@ def dump_handle(dhandle): btree = get_btree_handle(dhandle) root = btree['root'] root_page = root['page'].dereference() - dbg('btree', get_btree_handle(user)) + #dbg('btree', get_btree_handle(user)) dbg('root', btree['root']) dbg('root page', root_page) rpindex = root_page['u']['intl']['__index'].dereference() dbg('rpindex', rpindex) - dbg('rp-pre-index', rpindex['index'].dereference().dereference()) - leaf_page = rpindex['index'].dereference().dereference()['page'].dereference() - dbg('leaf', leaf_page) - dump_disk(leaf_page) - dump_modified(leaf_page) + leaf_num_entries = int(rpindex['entries']) + #dbg('rp-pre-index', rpindex['index'].dereference().dereference()) + for i in range(0, leaf_num_entries): + leaf_page = rpindex['index'][i].dereference()['page'].dereference() + dbg('leaf page', i) + dbg('leaf', leaf_page) + dump_disk(leaf_page) + dump_modified(leaf_page) |