Skip to content

Commit 8304d63

Browse files
Merge 97ec914 into e04e58d
2 parents e04e58d + 97ec914 commit 8304d63

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

ydb/core/tx/columnshard/columnshard__write.cpp

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)