mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-01 13:45:53 +00:00
Before this patch, Alternator's Query and Scan operations convert an entire result page to JSON without yielding. For a page of maximum size (1MB) and tiny rows, this can cause a significant stall - the test included in this patch reported stalls of 14-26ms on my laptop. The problem is the describe_items() function, which does this conversion immediately, without yielding. This patch changes this function to return a future, and use the result_set::visit_gently() method instead of visit() that yields when needed. This patch does not completely eliminate stalls in the test, but on my laptop usually reduces them to around 5ms. It appears that the remaining stalls some from other places not fixed in this PR, such as perhaps query_page::handle_result(), and will need to be fixed by additional patches. The test included in this patch is useful for manually reproducing the stall, but not useful as a regression test: It is slow (requiring a couple of seconds to set up the large partition) and doesn't check anything, and can't even report the stall without modifying the test runner. So the test is skipped by default (using the "veryslow" marker) and can be enabled and run manually by developers who want to continue working on #17995. Refs #17995. Signed-off-by: Nadav Har'El <nyh@scylladb.com>