Move checkRangeStartsWith out of finishCheckRangeRead
This is incrementally closer to where we want to be I think
This commit is contained in:
@@ -2673,17 +2673,7 @@ bool finishCheckRangeRead(int lcp, Node *n, std::span<const uint8_t> begin,
|
|||||||
std::span<const uint8_t> end,
|
std::span<const uint8_t> end,
|
||||||
InternalVersionT readVersion, ReadContext *tls) {
|
InternalVersionT readVersion, ReadContext *tls) {
|
||||||
|
|
||||||
if (lcp == int(begin.size())) {
|
return checkRangeLeftSide(n, begin, lcp + 1, readVersion, tls) &&
|
||||||
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) &&
|
|
||||||
checkRangeRightSide(n, end, 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->end = job->end.subspan(consumed, int(job->end.size()) - consumed);
|
||||||
job->lcp -= 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->result = finishCheckRangeRead(job->lcp, job->n, job->begin, job->end,
|
||||||
job->readVersion, context->tls)
|
job->readVersion, context->tls)
|
||||||
? ConflictSet::Commit
|
? ConflictSet::Commit
|
||||||
|
Reference in New Issue
Block a user