Share TSS range-read mismatch trace extraction

This commit is contained in:
Trevor Clinkenbeard 2026-07-22 10:01:48 -07:00
parent cce59c835f
commit e3247b4815
1 changed files with 19 additions and 34 deletions

View File

@ -235,19 +235,25 @@ static std::string hexStringRef(const StringRef& s) {
return result;
}
template <class Request, class Reply>
static void traceKeyValuesDiff(TraceEvent& event,
const KeySelectorRef& begin,
const KeySelectorRef& end,
Version version,
int limit,
int limitBytes,
const VectorRef<KeyValueRef>& ssKV,
bool ssMore,
const VectorRef<KeyValueRef>& tssKV,
bool tssMore,
const Request& request,
const Reply& source,
const Reply& target,
const ComparisonType& type) {
traceKeyValuesSummary(
event, begin, end, version, limit, limitBytes, ssKV.size(), ssMore, tssKV.size(), tssMore, type);
const auto& ssKV = source.data;
const auto& tssKV = target.data;
traceKeyValuesSummary(event,
request.begin,
request.end,
request.version,
request.limit,
request.limitBytes,
ssKV.size(),
source.more,
tssKV.size(),
target.more,
type);
bool mismatchFound = false;
for (int i = 0; i < std::max(ssKV.size(), tssKV.size()); i++) {
if (i >= ssKV.size() || i >= tssKV.size() || ssKV[i] != tssKV[i]) {
@ -279,17 +285,7 @@ void TSS_traceMismatch(TraceEvent& event,
const GetKeyValuesReply& src,
const GetKeyValuesReply& tss,
const ComparisonType& type) {
traceKeyValuesDiff(event,
req.begin,
req.end,
req.version,
req.limit,
req.limitBytes,
src.data,
src.more,
tss.data,
tss.more,
type);
traceKeyValuesDiff(event, req, src, tss, type);
}
// range reads and flat map
@ -334,24 +330,13 @@ const char* LB_mismatchTraceName(const GetKeyValuesStreamRequest& req, const Com
return type == TSS_COMPARISON ? "TSSMismatchGetKeyValuesStream" : "ReplicaMismatchGetKeyValuesStream";
}
// TODO this is all duplicated from above, simplify?
template <>
void TSS_traceMismatch(TraceEvent& event,
const GetKeyValuesStreamRequest& req,
const GetKeyValuesStreamReply& src,
const GetKeyValuesStreamReply& tss,
const ComparisonType& type) {
traceKeyValuesDiff(event,
req.begin,
req.end,
req.version,
req.limit,
req.limitBytes,
src.data,
src.more,
tss.data,
tss.more,
type);
traceKeyValuesDiff(event, req, src, tss, type);
}
template <>