@@ -487,13 +487,13 @@ void TColumnShard::Handle(NEvents::TDataEvents::TEvWrite::TPtr& ev, const TActor
487487 return ;
488488 }
489489
490+ const auto sendError = [&](const TString& message, const NKikimrDataEvents::TEvWriteResult::EStatus status) {
491+ Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
492+ auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (TabletID (), 0 , status, message);
493+ ctx.Send (source, result.release (), 0 , cookie);
494+ };
490495 if (behaviour == EOperationBehaviour::CommitWriteLock) {
491496 auto commitOperation = std::make_shared<TCommitOperation>(TabletID ());
492- const auto sendError = [&](const TString& message, const NKikimrDataEvents::TEvWriteResult::EStatus status) {
493- Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
494- auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (TabletID (), 0 , status, message);
495- ctx.Send (source, result.release (), 0 , cookie);
496- };
497497 auto conclusionParse = commitOperation->Parse (*ev->Get ());
498498 if (conclusionParse.IsFail ()) {
499499 sendError (conclusionParse.GetErrorMessage (), NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST);
@@ -536,48 +536,34 @@ void TColumnShard::Handle(NEvents::TDataEvents::TEvWrite::TPtr& ev, const TActor
536536 const std::optional<NEvWrite::EModificationType> mType =
537537 TEnumOperator<NEvWrite::EModificationType>::DeserializeFromProto (operation.GetType ());
538538 if (!mType ) {
539- Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
540- auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST,
541- " operation " + NKikimrDataEvents::TEvWrite::TOperation::EOperationType_Name (operation.GetType ()) + " is not supported" );
542- ctx.Send (source, result.release (), 0 , cookie);
539+ sendError (" operation " + NKikimrDataEvents::TEvWrite::TOperation::EOperationType_Name (operation.GetType ()) + " is not supported" ,
540+ NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST);
543541 return ;
544542 }
545543
546544 if (!operation.GetTableId ().HasSchemaVersion ()) {
547- Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
548- auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (
549- TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, " schema version not set" );
550- ctx.Send (source, result.release (), 0 , cookie);
545+ sendError (" schema version not set" , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST);
551546 return ;
552547 }
553548
554549 auto schema = TablesManager.GetPrimaryIndex ()->GetVersionedIndex ().GetSchemaOptional (operation.GetTableId ().GetSchemaVersion ());
555550 if (!schema) {
556- Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
557- auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (
558- TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, " unknown schema version" );
559- ctx.Send (source, result.release (), 0 , cookie);
551+ sendError (" unknown schema version" , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST);
560552 return ;
561553 }
562554
563555 const auto pathId = operation.GetTableId ().GetTableId ();
564556
565557 if (!TablesManager.IsReadyForWrite (pathId)) {
566- Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
567- auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (
568- TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR, " table not writable" );
569- ctx.Send (source, result.release (), 0 , cookie);
558+ sendError (" table not writable" , NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR);
570559 return ;
571560 }
572561
573562 Counters.GetColumnTablesCounters ()->GetPathIdCounter (pathId)->OnWriteEvent ();
574563
575564 auto arrowData = std::make_shared<TArrowData>(schema);
576565 if (!arrowData->Parse (operation, NEvWrite::TPayloadReader<NEvents::TDataEvents::TEvWrite>(*ev->Get ()))) {
577- Counters.GetTabletCounters ()->IncCounter (COUNTER_WRITE_FAIL);
578- auto result = NEvents::TDataEvents::TEvWriteResult::BuildError (
579- TabletID (), 0 , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, " parsing data error" );
580- ctx.Send (source, result.release (), 0 , cookie);
566+ sendError (" parsing data error" , NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST);
581567 return ;
582568 }
583569
@@ -603,6 +589,11 @@ void TColumnShard::Handle(NEvents::TDataEvents::TEvWrite::TPtr& ev, const TActor
603589 lockId = record.GetLockTxId ();
604590 }
605591
592+ if (!AppDataVerified ().ColumnShardConfig .GetWritingEnabled ()) {
593+ sendError (" writing disabled" , NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED);
594+ return ;
595+ }
596+
606597 OperationsManager->RegisterLock (lockId, Generation ());
607598 auto writeOperation = OperationsManager->RegisterOperation (
608599 pathId, lockId, cookie, granuleShardingVersionId, *mType , AppDataVerified ().FeatureFlags .GetEnableWritePortionsOnInsert ());
0 commit comments