@@ -41,6 +41,7 @@ static constexpr ui32 CACHE_SIZE = 100_MB;
4141static constexpr ui32 MAX_BYTES = 25_MB;
4242static constexpr ui32 MAX_SOURCE_ID_LENGTH = 2048 ;
4343static constexpr ui32 MAX_HEARTBEAT_SIZE = 2_KB;
44+ static constexpr ui32 MAX_TXS = 1000 ;
4445
4546struct TChangeNotification {
4647 TChangeNotification (const TActorId& actor, const ui64 txId)
@@ -3274,10 +3275,6 @@ void TPersQueue::HandleDataTransaction(TAutoPtr<TEvPersQueue::TEvProposeTransact
32743275 return ;
32753276 }
32763277
3277- //
3278- // TODO(abcdef): сохранить пока инициализируемся. TEvPersQueue::TEvHasDataInfo::TPtr как образец. не только конфиг. Inited==true
3279- //
3280-
32813278 if (txBody.OperationsSize () <= 0 ) {
32823279 PQ_LOG_D (" TxId " << event.GetTxId () << " empty list of operations" );
32833280 SendProposeTransactionAbort (ActorIdFromProto (event.GetSourceActor ()),
@@ -3346,7 +3343,6 @@ void TPersQueue::HandleDataTransaction(TAutoPtr<TEvPersQueue::TEvProposeTransact
33463343 return ;
33473344 }
33483345
3349-
33503346 if (txBody.GetImmediate ()) {
33513347 PQ_LOG_D (" immediate transaction" );
33523348 TPartitionId originalPartitionId (txBody.GetOperations (0 ).GetPartitionId ());
@@ -3360,6 +3356,15 @@ void TPersQueue::HandleDataTransaction(TAutoPtr<TEvPersQueue::TEvProposeTransact
33603356
33613357 ctx.Send (partition.Actor , ev.Release ());
33623358 } else {
3359+ if ((EvProposeTransactionQueue.size () + Txs.size ()) >= MAX_TXS) {
3360+ SendProposeTransactionAbort (ActorIdFromProto (event.GetSourceActor ()),
3361+ event.GetTxId (),
3362+ NKikimrPQ::TError::ERROR,
3363+ " too many transactions" ,
3364+ ctx);
3365+ return ;
3366+ }
3367+
33633368 PQ_LOG_D (" distributed transaction" );
33643369 EvProposeTransactionQueue.emplace_back (ev.Release ());
33653370
0 commit comments