@@ -447,6 +447,40 @@ class TAbortWriteTransaction: public NTabletFlatExecutor::TTransactionBase<TColu
447447 ui64 Cookie;
448448};
449449
450+ bool TColumnShard::TWriteTask::Execute (TColumnShard* owner, const TActorContext& ctx) {
451+ auto overloadStatus = owner->CheckOverloaded (PathId);
452+ if (overloadStatus == EOverloadStatus::OverloadMetadata) {
453+ AFL_INFO (NKikimrServices::TX_COLUMNSHARD_WRITE)(" event" , " wait_overload" )(" status" , overloadStatus);
454+ return false ;
455+ }
456+ owner->Counters .GetCSCounters ().WritingCounters ->OnWritingTaskDequeue (TMonotonic::Now () - Created);
457+ if (overloadStatus != EOverloadStatus::None) {
458+ std::unique_ptr<NActors::IEventBase> result = NEvents::TDataEvents::TEvWriteResult::BuildError (
459+ owner->TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED, " overload data error" );
460+ owner->OverloadWriteFail (overloadStatus, NEvWrite::TWriteMeta (0 , PathId, SourceId, {}, TGUID::CreateTimebased ().AsGuidString ()),
461+ ArrowData->GetSize (), Cookie, std::move (result), ctx);
462+ return true ;
463+ }
464+
465+ owner->OperationsManager ->RegisterLock (LockId, owner->Generation ());
466+ auto writeOperation = owner->OperationsManager ->RegisterOperation (
467+ PathId, LockId, Cookie, GranuleShardingVersionId, ModificationType, AppDataVerified ().FeatureFlags .GetEnableWritePortionsOnInsert ());
468+
469+ AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD_WRITE)(" writing_size" , ArrowData->GetSize ())(" operation_id" , writeOperation->GetIdentifier ())(
470+ " in_flight" , owner->Counters .GetWritesMonitor ()->GetWritesInFlight ())(
471+ " size_in_flight" , owner->Counters .GetWritesMonitor ()->GetWritesSizeInFlight ());
472+ owner->Counters .GetWritesMonitor ()->OnStartWrite (ArrowData->GetSize ());
473+
474+ AFL_VERIFY (writeOperation);
475+ writeOperation->SetBehaviour (Behaviour);
476+ NOlap::TWritingContext wContext (owner->TabletID (), owner->SelfId (), Schema, owner->StoragesManager ,
477+ owner->Counters .GetIndexationCounters ().SplitterCounters , owner->Counters .GetCSCounters ().WritingCounters , NOlap::TSnapshot::Max (),
478+ writeOperation->GetActivityChecker ());
479+ ArrowData->SetSeparationPoints (owner->GetIndexAs <NOlap::TColumnEngineForLogs>().GetGranulePtrVerified (PathId)->GetBucketPositions ());
480+ writeOperation->Start (*owner, ArrowData, SourceId, wContext);
481+ return true ;
482+ }
483+
450484void TColumnShard::Handle (NEvents::TDataEvents::TEvWrite::TPtr& ev, const TActorContext& ctx) {
451485 TMemoryProfileGuard mpg (" NEvents::TDataEvents::TEvWrite" );
452486 NActors::TLogContextGuard gLogging =
@@ -560,11 +594,8 @@ void TColumnShard::Handle(NEvents::TDataEvents::TEvWrite::TPtr& ev, const TActor
560594 return ;
561595 }
562596
563- auto overloadStatus = CheckOverloaded (pathId);
564- if (overloadStatus != EOverloadStatus::None) {
565- std::unique_ptr<NActors::IEventBase> result = NEvents::TDataEvents::TEvWriteResult::BuildError (
566- TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED, " overload data error" );
567- OverloadWriteFail (overloadStatus, NEvWrite::TWriteMeta (0 , pathId, source, {}, TGUID::CreateTimebased ().AsGuidString ()), arrowData->GetSize (), cookie, std::move (result), ctx);
597+ if (!AppDataVerified ().ColumnShardConfig .GetWritingEnabled ()) {
598+ sendError (" writing disabled" , NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED);
568599 return ;
569600 }
570601
@@ -580,25 +611,8 @@ void TColumnShard::Handle(NEvents::TDataEvents::TEvWrite::TPtr& ev, const TActor
580611 lockId = record.GetLockTxId ();
581612 }
582613
583- if (!AppDataVerified ().ColumnShardConfig .GetWritingEnabled ()) {
584- sendError (" writing disabled" , NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED);
585- return ;
586- }
587-
588- OperationsManager->RegisterLock (lockId, Generation ());
589- auto writeOperation = OperationsManager->RegisterOperation (
590- pathId, lockId, cookie, granuleShardingVersionId, *mType , AppDataVerified ().FeatureFlags .GetEnableWritePortionsOnInsert ());
591-
592- AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD_WRITE)(" writing_size" , arrowData->GetSize ())(" operation_id" , writeOperation->GetIdentifier ())(
593- " in_flight" , Counters.GetWritesMonitor ()->GetWritesInFlight ())(" size_in_flight" , Counters.GetWritesMonitor ()->GetWritesSizeInFlight ());
594- Counters.GetWritesMonitor ()->OnStartWrite (arrowData->GetSize ());
595-
596- Y_ABORT_UNLESS (writeOperation);
597- writeOperation->SetBehaviour (behaviour);
598- NOlap::TWritingContext wContext (TabletID (), SelfId (), schema, StoragesManager, Counters.GetIndexationCounters ().SplitterCounters ,
599- Counters.GetCSCounters ().WritingCounters , NOlap::TSnapshot::Max (), writeOperation->GetActivityChecker ());
600- arrowData->SetSeparationPoints (GetIndexAs<NOlap::TColumnEngineForLogs>().GetGranulePtrVerified (pathId)->GetBucketPositions ());
601- writeOperation->Start (*this , arrowData, source, wContext);
614+ WriteTasksQueue.Enqueue (TWriteTask (arrowData, schema, source, granuleShardingVersionId, pathId, cookie, lockId, *mType , behaviour));
615+ WriteTasksQueue.Drain (false , ctx);
602616}
603617
604618} // namespace NKikimr::NColumnShard
0 commit comments