Strengthen precondition to checkRangeStartsWith

and remove resulting dead code
This commit is contained in:
2024-03-18 15:44:44 -07:00
parent 97717cec86
commit 5a0bcf9a5a

View File

@@ -1672,7 +1672,10 @@ Vector<uint8_t> getSearchPath(Arena &arena, Node *n) {
} // GCOVR_EXCL_LINE } // GCOVR_EXCL_LINE
// Return true if the max version among all keys that start with key + [child], // Return true if the max version among all keys that start with key + [child],
// where begin < child < end, is <= readVersion // where begin < child < end, is <= readVersion.
//
// Precondition: transitively, no child of n has a search path that's a longer
// prefix of key than n
bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin, bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
int end, int64_t readVersion, int end, int64_t readVersion,
ConflictSet::Impl *impl) { ConflictSet::Impl *impl) {
@@ -1680,7 +1683,6 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
fprintf(stderr, "%s(%02x,%02x)*\n", printable(key).c_str(), begin, end); fprintf(stderr, "%s(%02x,%02x)*\n", printable(key).c_str(), begin, end);
#endif #endif
auto remaining = key; auto remaining = key;
for (;;) {
if (remaining.size() == 0) { if (remaining.size() == 0) {
return maxBetweenExclusive(n, begin, end) <= readVersion; return maxBetweenExclusive(n, begin, end) <= readVersion;
} }
@@ -1700,7 +1702,8 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
n = child; n = child;
remaining = remaining.subspan(1, remaining.size() - 1); remaining = remaining.subspan(1, remaining.size() - 1);
if (n->partialKeyLen > 0) { assert(n->partialKeyLen > 0);
{
int commonLen = std::min<int>(n->partialKeyLen, remaining.size()); int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
int i = longestCommonPrefix(n->partialKey(), remaining.data(), commonLen); int i = longestCommonPrefix(n->partialKey(), remaining.data(), commonLen);
if (i < commonLen) { if (i < commonLen) {
@@ -1712,10 +1715,7 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
goto downLeftSpine; goto downLeftSpine;
} }
} }
if (commonLen == n->partialKeyLen) { assert(n->partialKeyLen > int(remaining.size()));
// partial key matches
remaining = remaining.subspan(commonLen, remaining.size() - commonLen);
} else if (n->partialKeyLen > int(remaining.size())) {
if (begin < n->partialKey()[remaining.size()] && if (begin < n->partialKey()[remaining.size()] &&
n->partialKey()[remaining.size()] < end) { n->partialKey()[remaining.size()] < end) {
if (n->entryPresent && n->entry.rangeVersion > readVersion) { if (n->entryPresent && n->entry.rangeVersion > readVersion) {
@@ -1725,8 +1725,9 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
} }
return true; return true;
} }
}
} __builtin_unreachable(); // GCOVR_EXCL_LINE
downLeftSpine: downLeftSpine:
if (n == nullptr) { if (n == nullptr) {
return true; return true;