Skip to content

Commit a98470d

Browse files
author
babenko
committed
Add detailed diff to 'Row differs in input and output chunks'
commit_hash:f08566636493f766d50bc0f25336e8dc021399ef
1 parent c7a2455 commit a98470d

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed

yt/yt/client/table_client/unversioned_row.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2186,6 +2186,24 @@ bool TBitwiseUnversionedValueRangeEqual::operator()(TUnversionedValueRange lhs,
21862186
return true;
21872187
}
21882188

2189+
void TBitwiseUnversionedValueRangeEqual::FormatDiff(TStringBuilderBase* builder, TUnversionedValueRange lhs, TUnversionedValueRange rhs)
2190+
{
2191+
if (lhs.size() != rhs.size()) {
2192+
builder->AppendFormat("Value count mismatch: %v vs %v\n",
2193+
lhs.size(),
2194+
rhs.size());
2195+
return;
2196+
}
2197+
for (size_t index = 0; index < lhs.size(); ++index) {
2198+
if (!TBitwiseUnversionedValueEqual()(lhs[index], rhs[index])) {
2199+
builder->AppendFormat("Value mismatch at index %v\n",
2200+
index);
2201+
TBitwiseUnversionedValueEqual::FormatDiff(builder, lhs[index], rhs[index]);
2202+
break;
2203+
}
2204+
}
2205+
}
2206+
21892207
////////////////////////////////////////////////////////////////////////////////
21902208

21912209
size_t TBitwiseUnversionedRowHash::operator()(TUnversionedRow row) const
@@ -2198,6 +2216,11 @@ bool TBitwiseUnversionedRowEqual::operator()(TUnversionedRow lhs, TUnversionedRo
21982216
return TBitwiseUnversionedValueRangeEqual()(lhs.Elements(), rhs.Elements());
21992217
}
22002218

2219+
void TBitwiseUnversionedRowEqual::FormatDiff(TStringBuilderBase* builder, TUnversionedRow lhs, TUnversionedRow rhs)
2220+
{
2221+
TBitwiseUnversionedValueRangeEqual::FormatDiff(builder, lhs.Elements(), rhs.Elements());
2222+
}
2223+
22012224
////////////////////////////////////////////////////////////////////////////////
22022225

22032226
} // namespace NYT::NTableClient

yt/yt/client/table_client/unversioned_row.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,7 @@ struct TBitwiseUnversionedValueRangeHash
966966
struct TBitwiseUnversionedValueRangeEqual
967967
{
968968
bool operator()(TUnversionedValueRange lhs, TUnversionedValueRange rhs) const;
969+
static void FormatDiff(TStringBuilderBase* builder, TUnversionedValueRange lhs, TUnversionedValueRange rhs);
969970
};
970971

971972
////////////////////////////////////////////////////////////////////////////////
@@ -978,6 +979,7 @@ struct TBitwiseUnversionedRowHash
978979
struct TBitwiseUnversionedRowEqual
979980
{
980981
bool operator()(TUnversionedRow lhs, TUnversionedRow rhs) const;
982+
static void FormatDiff(TStringBuilderBase* builder, TUnversionedRow lhs, TUnversionedRow rhs);
981983
};
982984

983985
////////////////////////////////////////////////////////////////////////////////

yt/yt/client/table_client/unversioned_value.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,80 @@ bool TBitwiseUnversionedValueEqual::operator()(const TUnversionedValue& lhs, con
239239
}
240240
}
241241

242+
void TBitwiseUnversionedValueEqual::FormatDiff(
243+
TStringBuilderBase* builder,
244+
const TUnversionedValue& lhs,
245+
const TUnversionedValue& rhs)
246+
{
247+
if (lhs.Id != rhs.Id) {
248+
builder->AppendFormat("Value id mismatch: %v vs %v\n",
249+
lhs.Id,
250+
rhs.Id);
251+
return;
252+
}
253+
if (lhs.Flags != rhs.Flags) {
254+
builder->AppendFormat("Value flags mismatch: %v vs %v\n",
255+
lhs.Flags,
256+
rhs.Flags);
257+
return;
258+
}
259+
if (lhs.Type != rhs.Type) {
260+
builder->AppendFormat("Value type mismatch: %v vs %v\n",
261+
lhs.Type,
262+
rhs.Type);
263+
return;
264+
}
265+
switch (lhs.Type) {
266+
case EValueType::Int64:
267+
if (lhs.Data.Int64 != rhs.Data.Int64) {
268+
builder->AppendFormat("\"int64\" value mismatch: %v vs %v\n",
269+
lhs.Data.Int64,
270+
rhs.Data.Int64);
271+
}
272+
break;
273+
case EValueType::Uint64:
274+
if (lhs.Data.Uint64 != rhs.Data.Uint64) {
275+
builder->AppendFormat("\"uint64\" value mismatch: %v vs %v\n",
276+
lhs.Data.Uint64,
277+
rhs.Data.Uint64);
278+
}
279+
break;
280+
case EValueType::Double:
281+
if (lhs.Data.Double != rhs.Data.Double) {
282+
builder->AppendFormat("\"double\" value mismatch: %v vs %v\n",
283+
lhs.Data.Double,
284+
rhs.Data.Double);
285+
}
286+
break;
287+
case EValueType::Boolean:
288+
if (lhs.Data.Boolean != rhs.Data.Boolean) {
289+
builder->AppendFormat("\"boolean\" value mismatch: %v vs %v\n",
290+
lhs.Data.Boolean,
291+
rhs.Data.Boolean);
292+
}
293+
break;
294+
case EValueType::String:
295+
case EValueType::Any:
296+
case EValueType::Composite:
297+
if (lhs.Length != rhs.Length) {
298+
builder->AppendFormat("%Qlv value length mismatch: %v vs %v\n",
299+
lhs.Type,
300+
lhs.Length,
301+
rhs.Length);
302+
break;
303+
}
304+
if (::memcmp(lhs.Data.String, rhs.Data.String, lhs.Length) != 0) {
305+
builder->AppendFormat("%Qlv value mismatch: %v vs %v\n",
306+
lhs.Type,
307+
DumpRangeToHex(TRef::FromStringBuf(lhs.AsStringBuf())),
308+
DumpRangeToHex(TRef::FromStringBuf(rhs.AsStringBuf())));
309+
}
310+
break;
311+
default:
312+
break;
313+
}
314+
}
315+
242316
////////////////////////////////////////////////////////////////////////////////
243317

244318
} // namespace NYT::NTableClient

yt/yt/client/table_client/unversioned_value.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ struct TBitwiseUnversionedValueHash
100100
struct TBitwiseUnversionedValueEqual
101101
{
102102
bool operator()(const TUnversionedValue& lhs, const TUnversionedValue& rhs) const;
103+
static void FormatDiff(TStringBuilderBase* builder, const TUnversionedValue& lhs, const TUnversionedValue& rhs);
103104
};
104105

105106
////////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)