-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: Test Python
-
None
-
Storage Engines, Storage Engines - Foundations
-
SE Foundations - 2025-08-29, SE Foundations - 2025-09-12
-
3
Multithreaded tests don't work with the disagg hook. The problem is that currently, the hook functions uses thread local storage to get the current testcase object. The testcase object stores, for example, a list of URIs that have been transformed from "table:" names to "layered:" names.
For example, run
python3 ../test/suite/run.py --hook disagg -v 2 checkpoint02
and it hangs. Looking at the output from the test:
$ cat ../../build/WT_TEST/test_checkpoint02.0/std* Exception in thread Thread-2: Traceback (most recent call last): File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner self.run() File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/wtthread.py", line 174, in run c = sess.open_cursor(self.uris[0], None, None) File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/wthooks.py", line 204, in <lambda> f = lambda self, *args: hooked_function(self, orig_func, hook_info_name, *args) File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/wthooks.py", line 127, in hooked_function ret = call_func(self, *args) File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/hook_disagg.py", line 338, in <lambda> session_open_cursor_replace(orig_session_open_cursor, s, uri, todup, config)) File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/hook_disagg.py", line 253, in session_open_cursor_replace uri = replace_uri(uri) File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/hook_disagg.py", line 182, in replace_uri if is_layered(uri): File "/home/dda/wt/git/wt-14782-python-disagg-triage-checkpoint/test/suite/hook_disagg.py", line 174, in is_layered return uri in testcase.layered_uris
In this case, the thread is calling open_cursor, and that function is transforming the URIs, for which it needs the testcase.
I think the solution might be to pass the test case object to the thread on creation, and in the thread, do this:
threadLocal = threading.local() threadLocal.currentTestCase = testcase
- is related to
-
WT-15438 Failed to promote a node to primary due to reconfigure returning WT_NOTFOUND
-
- Closed
-
-
WT-15247 Unexpected keys observed after connection reopen for disagg
-
- Closed
-
-
WT-15300 Set backlink LSN in __wt_disagg_put_meta
-
- Closed
-
-
WT-15210 Change eviction to scrub eviction when the cache usage is less than eviction target
-
- Open
-
-
WT-15198 Data Validation for Leader/Follower Mode in Disagg (test/format)
-
- Closed
-
-
WT-15240 Enable test_timestamp*.py for disagg in Evergreen
-
- Closed
-
-
WT-15412 Add a table id as part of the WT_BLOCK_DISAGG struct
-
- Closed
-
-
WT-15428 Bypass materialisation frontier check on standby for eviction
-
- Closed
-
-
WT-15424 Add extra logging for disaggregated storage
-
- Closed
-
-
WT-15389 Saved update lists with deletes are lost when building a delta
-
- Closed
-
-
WT-15431 test/format (disagg.mode=leader) test/mode (disagg) assertion failure upd_memsize == 0
-
- Closed
-
- related to
-
WT-14911 Verify that the ingest table is always empty for primary
-
- Closed
-