6 Commits

Author SHA1 Message Date
83c7f66d67 Remove some redundant nullptr checks
All checks were successful
Tests / Clang total: 825, passed: 825
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 825, passed: 825
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc,aarch64] total: 824, passed: 824
Tests / Coverage total: 823, passed: 823
weaselab/conflict-set/pipeline/head This commit looks good
2024-03-18 16:22:24 -07:00
a5710b8282 Remove performance-only code from debug build for increased coverage 2024-03-18 16:21:55 -07:00
c31eebd5de No caller of CheckRangeRightSide::downLeftSpine has null n 2024-03-18 16:03:41 -07:00
ddeb059968 Remove more dead code 2024-03-18 16:01:56 -07:00
5a0bcf9a5a Strengthen precondition to checkRangeStartsWith
and remove resulting dead code
2024-03-18 15:44:44 -07:00
97717cec86 Remove suspected dead code
Removing it is definitely safe. I suspect that any way to get here would
have already returned from checkRangeRead during the search for the
common prefix
2024-03-18 15:30:15 -07:00
335 changed files with 50 additions and 56 deletions

View File

@@ -1672,7 +1672,10 @@ Vector<uint8_t> getSearchPath(Arena &arena, Node *n) {
} // GCOVR_EXCL_LINE
// 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,
int end, int64_t readVersion,
ConflictSet::Impl *impl) {
@@ -1680,10 +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);
#endif
auto remaining = key;
for (;;) {
if (maxVersion(n, impl) <= readVersion) {
return true;
}
if (remaining.size() == 0) {
return maxBetweenExclusive(n, begin, end) <= readVersion;
}
@@ -1703,7 +1702,8 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
n = child;
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 i = longestCommonPrefix(n->partialKey(), remaining.data(), commonLen);
if (i < commonLen) {
@@ -1715,10 +1715,7 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
goto downLeftSpine;
}
}
if (commonLen == n->partialKeyLen) {
// partial key matches
remaining = remaining.subspan(commonLen, remaining.size() - commonLen);
} else if (n->partialKeyLen > int(remaining.size())) {
assert(n->partialKeyLen > int(remaining.size()));
if (begin < n->partialKey()[remaining.size()] &&
n->partialKey()[remaining.size()] < end) {
if (n->entryPresent && n->entry.rangeVersion > readVersion) {
@@ -1728,8 +1725,9 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
}
return true;
}
}
}
__builtin_unreachable(); // GCOVR_EXCL_LINE
downLeftSpine:
if (n == nullptr) {
return true;
@@ -1836,9 +1834,7 @@ struct CheckRangeLeftSide {
remaining =
remaining.subspan(commonLen, remaining.size() - commonLen);
} else if (n->partialKeyLen > int(remaining.size())) {
if (searchPathLen < prefixLen) {
return downLeftSpine();
}
assert(searchPathLen >= prefixLen);
if (n->entryPresent && n->entry.rangeVersion > readVersion) {
ok = false;
return true;
@@ -2017,10 +2013,7 @@ struct CheckRangeRightSide {
bool downLeftSpine() {
phase = DownLeftSpine;
if (n == nullptr) {
ok = true;
return true;
}
assert(n != nullptr);
return false;
}
};
@@ -2356,6 +2349,9 @@ Iterator firstGeq(Node *n, const std::span<const uint8_t> key) {
goto downLeftSpine;
} else {
n = nextSibling(n);
if (n == nullptr) {
return {nullptr, 1};
}
goto downLeftSpine;
}
}
@@ -2386,9 +2382,6 @@ Iterator firstGeq(Node *n, const std::span<const uint8_t> key) {
}
}
downLeftSpine:
if (n == nullptr) {
return {nullptr, 1};
}
for (;;) {
if (n->entryPresent) {
return {n, 1};
@@ -2438,9 +2431,14 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
return;
}
this->oldestVersion = oldestVersion;
#ifdef NDEBUG
// This is here for performance reasons, since we want to amortize the cost
// of storing the search path as a string. In tests, we want to exercise the
// rest of the code often.
if (keyUpdates < 100) {
return;
}
#endif
Node *n = firstGeq(root, removalKey).n;
// There's no way to erase removalKey without introducing a key after it
assert(n != nullptr);
@@ -2468,9 +2466,6 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
removalKey = {};
return;
}
if (keyUpdates == 0) {
keyUpdates = 10;
}
removalKeyArena = Arena();
removalKey = getSearchPath(removalKeyArena, n);
}
@@ -2511,7 +2506,7 @@ int64_t &maxVersion(Node *n, ConflictSet::Impl *impl) {
return impl->rootMaxVersion;
}
switch (n->getType()) {
case Type_Node0:
case Type_Node0: // GCOVR_EXCL_LINE
__builtin_unreachable(); // GCOVR_EXCL_LINE
case Type_Node3: {
auto *n3 = static_cast<Node3 *>(n);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More