@@ -114,12 +114,14 @@ class TPartition : public TActorBootstrapped<TPartition> {
114
114
115
115
void AddNewWriteBlob (std::pair<TKey, ui32>& res, TEvKeyValue::TEvRequest* request, bool headCleared, const TActorContext& ctx);
116
116
void AnswerCurrentWrites (const TActorContext& ctx);
117
- void CancelAllWritesOnIdle (const TActorContext& ctx);
118
- void CancelAllWritesOnWrite (const TActorContext& ctx, TEvKeyValue::TEvRequest* request, const TString& errorStr, const TWriteMsg& p, TPartitionSourceManager::TModificationBatch& sourceIdBatch, NPersQueue::NErrorCode::EErrorCode errorCode = NPersQueue::NErrorCode::BAD_REQUEST);
117
+ void AnswerCurrentReplies (const TActorContext& ctx);
118
+ void CancelOneWriteOnWrite (const TActorContext& ctx,
119
+ const TString& errorStr,
120
+ const TWriteMsg& p,
121
+ NPersQueue::NErrorCode::EErrorCode errorCode);
119
122
void ClearOldHead (const ui64 offset, const ui16 partNo, TEvKeyValue::TEvRequest* request);
120
123
void CreateMirrorerActor ();
121
124
void DoRead (TEvPQ::TEvRead::TPtr&& ev, TDuration waitQuotaTime, const TActorContext& ctx);
122
- void FailBadClient (const TActorContext& ctx);
123
125
void FillReadFromTimestamps (const TActorContext& ctx);
124
126
void FilterDeadlinedWrites (const TActorContext& ctx);
125
127
void FilterDeadlinedWrites (const TActorContext& ctx, TMessageQueue& requests);
@@ -205,33 +207,24 @@ class TPartition : public TActorBootstrapped<TPartition> {
205
207
void UpdateAvailableSize (const TActorContext& ctx);
206
208
207
209
void AddMetaKey (TEvKeyValue::TEvRequest* request);
208
- void BecomeIdle ();
209
- void BecomeWrite ();
210
210
void CheckHeadConsistency () const ;
211
211
void HandlePendingRequests (const TActorContext& ctx);
212
212
void HandleQuotaWaitingRequests (const TActorContext& ctx);
213
- void HandleRequests (const TActorContext& ctx);
214
213
void RequestQuotaForWriteBlobRequest (size_t dataSize, ui64 cookie);
215
214
bool RequestBlobQuota ();
216
215
void RequestBlobQuota (size_t quotaSize);
217
216
void ConsumeBlobQuota ();
218
- void WritePendingBlob (THolder<TEvKeyValue::TEvRequest> request);
219
217
void UpdateAfterWriteCounters (bool writeComplete);
220
218
void UpdateUserInfoEndOffset (const TInstant& now);
221
219
void UpdateWriteBufferIsFullState (const TInstant& now);
222
- void CancelReserveRequests (const TActorContext& ctx);
223
- void CancelRequests (const TActorContext& ctx, TMessageQueue& requests);
224
220
225
221
TInstant GetWriteTimeEstimate (ui64 offset) const ;
226
- bool AppendHeadWithNewWrites (TEvKeyValue::TEvRequest* request, const TActorContext& ctx,
227
- TPartitionSourceManager::TModificationBatch& sourceIdBatch);
228
222
bool CleanUp (TEvKeyValue::TEvRequest* request, const TActorContext& ctx);
229
223
230
224
// Removes blobs that are no longer required. Blobs are no longer required if the storage time of all messages
231
225
// stored in this blob has expired and they have been read by all important consumers.
232
226
bool CleanUpBlobs (TEvKeyValue::TEvRequest *request, const TActorContext& ctx);
233
227
bool IsQuotingEnabled () const ;
234
- bool ProcessWrites (TEvKeyValue::TEvRequest* request, TInstant now, const TActorContext& ctx);
235
228
bool WaitingForPreviousBlobQuota () const ;
236
229
bool WaitingForSubDomainQuota (const TActorContext& ctx, const ui64 withSize = 0 ) const ;
237
230
size_t GetQuotaRequestSize (const TEvKeyValue::TEvRequest& request);
@@ -265,7 +258,6 @@ class TPartition : public TActorBootstrapped<TPartition> {
265
258
void ProcessDistrTx (const TActorContext& ctx);
266
259
267
260
void AddImmediateTx (TSimpleSharedPtr<TEvPersQueue::TEvProposeTransaction> event);
268
- void RemoveImmediateTx ();
269
261
void ProcessImmediateTxs (const TActorContext& ctx);
270
262
void ProcessImmediateTx (const NKikimrPQ::TEvProposeTransaction& tx,
271
263
const TActorContext& ctx);
@@ -299,8 +291,7 @@ class TPartition : public TActorBootstrapped<TPartition> {
299
291
ui64 offset, ui32 gen, ui32 step, const TString& session,
300
292
ui64 readOffsetRewindSum,
301
293
ui64 readRuleGeneration);
302
- void AddCmdWriteTxMeta (NKikimrClient::TKeyValueRequest& request,
303
- ui64 step, ui64 txId);
294
+ void AddCmdWriteTxMeta (NKikimrClient::TKeyValueRequest& request);
304
295
void AddCmdWriteUserInfos (NKikimrClient::TKeyValueRequest& request);
305
296
void AddCmdWriteConfig (NKikimrClient::TKeyValueRequest& request);
306
297
void AddCmdDeleteRange (NKikimrClient::TKeyValueRequest& request,
@@ -330,7 +321,7 @@ class TPartition : public TActorBootstrapped<TPartition> {
330
321
331
322
void BeginChangePartitionConfig (const NKikimrPQ::TPQTabletConfig& config,
332
323
const TActorContext& ctx);
333
- void OnProcessTxsAndUserActsWriteComplete (ui64 cookie, const TActorContext& ctx);
324
+ void OnProcessTxsAndUserActsWriteComplete (const TActorContext& ctx);
334
325
void EndChangePartitionConfig (NKikimrPQ::TPQTabletConfig&& config,
335
326
NPersQueue::TTopicConverterPtr topicConverter,
336
327
const TActorContext& ctx);
@@ -469,6 +460,7 @@ class TPartition : public TActorBootstrapped<TPartition> {
469
460
switch (ev->GetTypeRewrite ()) {
470
461
CFunc (TEvents::TSystem::Wakeup, HandleWakeup);
471
462
HFuncTraced (TEvKeyValue::TEvResponse, Handle );
463
+ HFuncTraced (TEvPQ::TEvHandleWriteResponse, Handle );
472
464
HFuncTraced (TEvPQ::TEvBlobResponse, Handle );
473
465
HFuncTraced (TEvPQ::TEvWrite, HandleOnIdle);
474
466
HFuncTraced (TEvPQ::TEvRead, Handle );
@@ -516,67 +508,10 @@ class TPartition : public TActorBootstrapped<TPartition> {
516
508
};
517
509
}
518
510
519
- STFUNC (StateWrite)
520
- {
521
- NPersQueue::TCounterTimeKeeper keeper (TabletCounters.Cumulative ()[COUNTER_PQ_TABLET_CPU_USAGE]);
522
-
523
- ALOG_TRACE (NKikimrServices::PERSQUEUE, EventStr (" StateWrite" , ev));
524
-
525
- TRACE_EVENT (NKikimrServices::PERSQUEUE);
526
- switch (ev->GetTypeRewrite ()) {
527
- CFunc (TEvents::TSystem::Wakeup, HandleWakeup);
528
- HFuncTraced (TEvKeyValue::TEvResponse, Handle );
529
- HFuncTraced (TEvPQ::TEvHandleWriteResponse, Handle );
530
- HFuncTraced (TEvPQ::TEvBlobResponse, Handle );
531
- HFuncTraced (TEvPQ::TEvWrite, HandleOnWrite);
532
- HFuncTraced (TEvPQ::TEvRead, Handle );
533
- HFuncTraced (TEvPQ::TEvApproveReadQuota, Handle );
534
- HFuncTraced (TEvPQ::TEvReadTimeout, Handle );
535
- HFuncTraced (TEvents::TEvPoisonPill, Handle );
536
- HFuncTraced (TEvPQ::TEvMonRequest, HandleMonitoring);
537
- HFuncTraced (TEvPQ::TEvGetMaxSeqNoRequest, Handle );
538
- HFuncTraced (TEvPQ::TEvGetClientOffset, Handle );
539
- HFuncTraced (TEvPQ::TEvUpdateWriteTimestamp, Handle );
540
- HFuncTraced (TEvPQ::TEvSetClientInfo, Handle );
541
- HFuncTraced (TEvPQ::TEvPartitionOffsets, Handle );
542
- HFuncTraced (TEvPQ::TEvPartitionStatus, Handle );
543
- HFuncTraced (TEvPersQueue::TEvReportPartitionError, Handle );
544
- HFuncTraced (TEvPQ::TEvChangeOwner, Handle );
545
- HFuncTraced (TEvPQ::TEvChangePartitionConfig, Handle );
546
- HFuncTraced (TEvPersQueue::TEvHasDataInfo, Handle );
547
- HFuncTraced (TEvPQ::TEvMirrorerCounters, Handle );
548
- HFuncTraced (TEvPQ::TEvProxyResponse, Handle );
549
- HFuncTraced (TEvPQ::TEvError, Handle );
550
- HFuncTraced (TEvPQ::TEvReserveBytes, Handle );
551
- HFuncTraced (TEvPQ::TEvGetPartitionClientInfo, Handle );
552
- HFuncTraced (TEvPQ::TEvPipeDisconnected, Handle );
553
- HFuncTraced (TEvPQ::TEvUpdateAvailableSize, HandleOnWrite);
554
- HFuncTraced (TEvPQ::TEvQuotaDeadlineCheck, Handle );
555
- HFuncTraced (TEvPQ::TEvApproveWriteQuota, Handle );
556
- HFuncTraced (TEvPQ::TEvRegisterMessageGroup, HandleOnWrite);
557
- HFuncTraced (TEvPQ::TEvDeregisterMessageGroup, HandleOnWrite);
558
- HFuncTraced (TEvPQ::TEvSplitMessageGroup, HandleOnWrite);
559
- HFuncTraced (TEvPersQueue::TEvProposeTransaction, Handle );
560
- HFuncTraced (TEvPQ::TEvTxCalcPredicate, Handle );
561
- HFuncTraced (TEvPQ::TEvGetWriteInfoRequest, Handle );
562
- HFuncTraced (TEvPQ::TEvProposePartitionConfig, Handle );
563
- HFuncTraced (TEvPQ::TEvTxCommit, Handle );
564
- HFuncTraced (TEvPQ::TEvTxRollback, Handle );
565
- HFuncTraced (TEvPQ::TEvSubDomainStatus, Handle );
566
- HFuncTraced (TEvPQ::TEvCheckPartitionStatusRequest, Handle );
567
- HFuncTraced (NReadQuoterEvents::TEvQuotaUpdated, Handle );
568
- HFuncTraced (NReadQuoterEvents::TEvAccountQuotaCountersUpdated, Handle );
569
- HFuncTraced (NReadQuoterEvents::TEvQuotaCountersUpdated, Handle );
570
- HFuncTraced (TEvPQ::TEvProcessChangeOwnerRequests, Handle );
571
- default :
572
- ALOG_ERROR (NKikimrServices::PERSQUEUE, " Unexpected " << EventStr (" StateWrite" , ev));
573
- break ;
574
- };
575
- }
576
-
577
511
private:
578
512
enum class EProcessResult {
579
513
Continue,
514
+ Reply,
580
515
Abort,
581
516
Break
582
517
};
@@ -600,7 +535,7 @@ class TPartition : public TActorBootstrapped<TPartition> {
600
535
601
536
static void RemoveMessages (TMessageQueue& src, TMessageQueue& dst);
602
537
void RemovePendingRequests (TMessageQueue& requests);
603
- void RemoveQuotaWaitingRequests ( );
538
+ void RemoveMessagesToQueue (TMessageQueue& requests );
604
539
605
540
private:
606
541
ui64 TabletID;
@@ -639,8 +574,6 @@ class TPartition : public TActorBootstrapped<TPartition> {
639
574
640
575
TMessageQueue PendingRequests;
641
576
TMessageQueue QuotaWaitingRequests;
642
- TMessageQueue Requests;
643
- TMessageQueue Responses;
644
577
645
578
THead Head;
646
579
THead NewHead;
@@ -672,30 +605,57 @@ class TPartition : public TActorBootstrapped<TPartition> {
672
605
673
606
template <class T > void EnsureUserActionAndTransactionEventsFrontIs () const ;
674
607
675
- bool ProcessUserActionOrTransaction (TEvPQ::TEvSetClientInfo& event, const TActorContext& ctx);
676
- bool ProcessUserActionOrTransaction (const TEvPersQueue::TEvProposeTransaction& event, const TActorContext& ctx);
677
- bool ProcessUserActionOrTransaction (TTransaction& tx, const TActorContext& ctx);
608
+ EProcessResult ProcessUserActionOrTransaction (TEvPQ::TEvSetClientInfo& event,
609
+ TEvKeyValue::TEvRequest* request,
610
+ const TActorContext& ctx);
611
+ EProcessResult ProcessUserActionOrTransaction (const TEvPersQueue::TEvProposeTransaction& event,
612
+ TEvKeyValue::TEvRequest* request,
613
+ const TActorContext& ctx);
614
+ EProcessResult ProcessUserActionOrTransaction (TTransaction& tx,
615
+ TEvKeyValue::TEvRequest* request,
616
+ const TActorContext& ctx);
617
+ EProcessResult ProcessUserActionOrTransaction (TMessage& msg,
618
+ TEvKeyValue::TEvRequest* request,
619
+ const TActorContext& ctx);
620
+
621
+ bool FirstEvent = true ;
622
+ bool HaveWriteMsg = false ;
623
+ bool HaveData = false ;
624
+ bool HaveCheckDisk = false ;
625
+ bool HaveDrop = false ;
626
+ bool HeadCleared = false ;
627
+ TMaybe<TPartitionSourceManager::TModificationBatch> SourceIdBatch;
628
+ TMaybe<ProcessParameters> Parameters;
629
+
630
+ void BeginHandleRequests (TEvKeyValue::TEvRequest* request, const TActorContext& ctx);
631
+ void EndHandleRequests (TEvKeyValue::TEvRequest* request, const TActorContext& ctx);
632
+ void BeginProcessWrites (const TActorContext& ctx);
633
+ void EndProcessWrites (TEvKeyValue::TEvRequest* request, const TActorContext& ctx);
634
+ void BeginAppendHeadWithNewWrites (const TActorContext& ctx);
635
+ void EndAppendHeadWithNewWrites (TEvKeyValue::TEvRequest* request, const TActorContext& ctx);
678
636
679
637
//
680
638
// user actions and transactions
681
639
//
682
640
using TUserActionAndTransactionEvent =
683
641
std::variant<TSimpleSharedPtr<TEvPQ::TEvSetClientInfo>, // user actions
684
642
TSimpleSharedPtr<TEvPersQueue::TEvProposeTransaction>, // immediate transaction
685
- TTransaction>; // distributed transaction or update config
643
+ TTransaction, // distributed transaction or update config
644
+ TMessage>;
686
645
std::deque<TUserActionAndTransactionEvent> UserActionAndTransactionEvents;
687
646
size_t ImmediateTxCount = 0 ;
688
647
THashMap<TString, size_t > UserActCount;
689
648
THashMap<TString, TUserInfoBase> PendingUsersInfo;
690
649
TVector<std::pair<TActorId, std::unique_ptr<IEventBase>>> Replies;
691
650
THashSet<TString> AffectedUsers;
692
- bool UsersInfoWriteInProgress = false ;
651
+ bool KVWriteInProgress = false ;
693
652
bool TxInProgress = false ;
694
653
TMaybe<ui64> PlanStep;
695
654
TMaybe<ui64> TxId;
696
655
bool TxIdHasChanged = false ;
697
656
TSimpleSharedPtr<TEvPQ::TEvChangePartitionConfig> ChangeConfig;
698
657
bool SendChangeConfigReply = true ;
658
+ TMessageQueue Responses;
699
659
//
700
660
//
701
661
//
0 commit comments