From b0bc68a14ec585bf869dc84ce0412ee72740ded2 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Fri, 11 Oct 2024 17:52:04 -0700 Subject: [PATCH] Move checkRangeStartsWith out of finishCheckRangeRead This is incrementally closer to where we want to be I think --- ConflictSet.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 08a4b23..3d02172 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2673,17 +2673,7 @@ bool finishCheckRangeRead(int lcp, Node *n, std::span begin, std::span end, InternalVersionT readVersion, ReadContext *tls) { - if (lcp == int(begin.size())) { - return checkRangeRightSide(n, end, lcp, readVersion, tls); - } - - // This makes it safe to check maxVersion within checkRangeLeftSide. If this - // were false, then we would have returned above since lcp == begin.size(). - assert(!(n->parent == nullptr && begin.size() == 0)); - - return checkRangeStartsWith(n, begin.subspan(0, lcp), begin[lcp], end[lcp], - readVersion, tls) && - checkRangeLeftSide(n, begin, lcp + 1, readVersion, tls) && + return checkRangeLeftSide(n, begin, lcp + 1, readVersion, tls) && checkRangeRightSide(n, end, lcp + 1, readVersion, tls); } @@ -3462,6 +3452,25 @@ FLATTEN PRESERVE_NONE void done_common_prefix_iter(CheckJob *job, job->end = job->end.subspan(consumed, int(job->end.size()) - consumed); job->lcp -= consumed; + if (job->lcp == int(job->begin.size())) { + *job->result = checkRangeRightSide(job->n, job->end, job->lcp, + job->readVersion, context->tls) + ? ConflictSet::Commit + : ConflictSet::Conflict; + MUSTTAIL return complete(job, context); + } + + // This makes it safe to check maxVersion within checkRangeLeftSide. If this + // were false, then we would have returned above since lcp == begin.size(). + assert(!(job->n->parent == nullptr && job->begin.size() == 0)); + + if (!checkRangeStartsWith(job->n, job->begin.subspan(0, job->lcp), + job->begin[job->lcp], job->end[job->lcp], + job->readVersion, context->tls)) { + *job->result = ConflictSet::Conflict; + MUSTTAIL return complete(job, context); + } + *job->result = finishCheckRangeRead(job->lcp, job->n, job->begin, job->end, job->readVersion, context->tls) ? ConflictSet::Commit