From e8982074f27cfb2de29029a9909f268890114c90 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Sat, 12 Oct 2024 17:10:19 -0700 Subject: [PATCH] Add short-circuiting back for range common prefix search --- ConflictSet.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 7828817..74caad2 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -3318,7 +3318,8 @@ PRESERVE_NONE void begin(CheckJob *job, CheckContext *context) { MUSTTAIL return done_common_prefix_iter(job, context); } - auto c = getChild(job->n, job->remaining[0]); + auto [c, maxV] = getChildAndMaxVersion(job->n, job->remaining[0]); + job->maxV = maxV; job->child = c; if (job->child == nullptr) { MUSTTAIL return done_common_prefix_iter(job, context); @@ -3351,11 +3352,18 @@ void common_prefix_iter(CheckJob *job, CheckContext *context) { ++context->tls->range_read_iterations_accum; + if (job->maxV <= job->readVersion) { + job->setResult(true); + ++context->tls->range_read_short_circuit_accum; + MUSTTAIL return complete(job, context); + } + if (job->remaining.size() == 0) { MUSTTAIL return done_common_prefix_iter(job, context); } - auto c = getChild(child, job->remaining[0]); + auto [c, maxV] = getChildAndMaxVersion(child, job->remaining[0]); + job->maxV = maxV; job->child = c; if (job->child == nullptr) { MUSTTAIL return done_common_prefix_iter(job, context);