@@ -54,11 +54,13 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
54
54
size_t ProcessedRows = 0 ;
55
55
size_t PackedRows = 0 ;
56
56
ui64 ReadId;
57
+ ui64 SeqNo;
57
58
58
- TResult (ui64 shardId, THolder<TEventHandle<TEvDataShard::TEvReadResult>> readResult, ui64 readId)
59
+ TResult (ui64 shardId, THolder<TEventHandle<TEvDataShard::TEvReadResult>> readResult, ui64 readId, ui64 seqNo )
59
60
: ShardId(shardId)
60
61
, ReadResult(std::move(readResult))
61
62
, ReadId(readId)
63
+ , SeqNo(seqNo)
62
64
{
63
65
}
64
66
};
@@ -983,6 +985,7 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
983
985
CA_LOG_D (" Taken " << Locks.size () << " locks" );
984
986
Reads[id].SerializedContinuationToken = record.GetContinuationToken ();
985
987
988
+ ui64 seqNo = ev->Get ()->Record .GetSeqNo ();
986
989
Reads[id].RegisterMessage (*ev->Get ());
987
990
988
991
@@ -992,7 +995,7 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
992
995
<< " finished = " << ev->Get ()->Record .GetFinished ());
993
996
CA_LOG_T (TStringBuilder () << " read #" << id << " pushed " << DebugPrintCells (ev->Get ()) << " continuation token " << DebugPrintContionuationToken (record.GetContinuationToken ()));
994
997
995
- Results.push ({Reads[id].Shard ->TabletId , THolder<TEventHandle<TEvDataShard::TEvReadResult>>(ev.Release ()), id});
998
+ Results.push ({Reads[id].Shard ->TabletId , THolder<TEventHandle<TEvDataShard::TEvReadResult>>(ev.Release ()), id, seqNo });
996
999
NotifyCA ();
997
1000
}
998
1001
@@ -1057,7 +1060,7 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
1057
1060
}
1058
1061
1059
1062
NMiniKQL::TBytesStatistics PackArrow (TResult& handle, i64 & freeSpace) {
1060
- auto & [shardId, result, batch, _, packed, readId] = handle;
1063
+ auto & [shardId, result, batch, _, packed, readId, seqNo ] = handle;
1061
1064
NMiniKQL::TBytesStatistics stats;
1062
1065
bool hasResultColumns = false ;
1063
1066
if (result->Get ()->GetRowsCount () == 0 ) {
@@ -1144,7 +1147,7 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
1144
1147
}
1145
1148
1146
1149
NMiniKQL::TBytesStatistics PackCells (TResult& handle, i64 & freeSpace) {
1147
- auto & [shardId, result, batch, processedRows, packed, readId] = handle;
1150
+ auto & [shardId, result, batch, processedRows, packed, readId, seqNo ] = handle;
1148
1151
NMiniKQL::TBytesStatistics stats;
1149
1152
batch->reserve (batch->size ());
1150
1153
CA_LOG_D (TStringBuilder () << " enter pack cells method "
@@ -1205,13 +1208,17 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
1205
1208
<< " current is " << handle.ShardId
1206
1209
<< " previous readId is " << ptr->ReadId
1207
1210
<< " current is " << handle.ReadId
1211
+ << " previous seqNo is " << ptr->SeqNo
1212
+ << " current is " << handle.SeqNo
1213
+ << " previous row number is " << ptr->RowIndex
1214
+ << " current is " << rowIndex
1208
1215
<< " key is " << rowRepr;
1209
1216
CA_LOG_E (rowMessage);
1210
1217
Counters->RowsDuplicationsFound ->Inc ();
1211
1218
RuntimeError (rowMessage, NYql::NDqProto::StatusIds::INTERNAL_ERROR, {});
1212
1219
return stats;
1213
1220
}
1214
- DuplicateCheckStats[result] = {.ReadId = readId , .ShardId = handle.ShardId };
1221
+ DuplicateCheckStats[result] = {.ReadId = readId , .ShardId = handle.ShardId , . SeqNo = seqNo, . RowIndex = rowIndex };
1215
1222
}
1216
1223
1217
1224
stats.DataBytes += rowSize;
@@ -1547,6 +1554,8 @@ class TKqpReadActor : public TActorBootstrapped<TKqpReadActor>, public NYql::NDq
1547
1554
struct TDuplicationStats {
1548
1555
ui64 ReadId;
1549
1556
ui64 ShardId;
1557
+ ui64 SeqNo;
1558
+ ui64 RowIndex;
1550
1559
};
1551
1560
THashMap<TString, TDuplicationStats> DuplicateCheckStats;
1552
1561
TVector<TResultColumn> DuplicateCheckExtraColumns;
0 commit comments