Skip to content

Commit ac92ce0

Browse files
authored
Datashard: DISK_SPACE_EXHAUSTED error (#8318)
1 parent cb032f1 commit ac92ce0

File tree

9 files changed

+32
-7
lines changed

9 files changed

+32
-7
lines changed

ydb/core/kqp/executer_actor/kqp_data_executer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,7 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
842842
case NKikimrDataEvents::TEvWriteResult::STATUS_ABORTED: {
843843
return ReplyErrorAndDie(Ydb::StatusIds::ABORTED, issues);
844844
}
845+
case NKikimrDataEvents::TEvWriteResult::STATUS_DISK_SPACE_EXHAUSTED:
845846
case NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR: {
846847
return ReplyErrorAndDie(Ydb::StatusIds::INTERNAL_ERROR, issues);
847848
}

ydb/core/kqp/runtime/kqp_write_actor.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,20 @@ class TKqpDirectWriteActor : public TActorBootstrapped<TKqpDirectWriteActor>, pu
425425
}
426426
return;
427427
}
428+
case NKikimrDataEvents::TEvWriteResult::STATUS_DISK_SPACE_EXHAUSTED: {
429+
CA_LOG_E("Got DISK_SPACE_EXHAUSTED for table `"
430+
<< SchemeEntry->TableId.PathId.ToString() << "`."
431+
<< " ShardID=" << ev->Get()->Record.GetOrigin() << ","
432+
<< " Sink=" << this->SelfId() << "."
433+
<< getIssues().ToOneLineString());
434+
435+
RuntimeError(
436+
TStringBuilder() << "Got DISK_SPACE_EXHAUSTED for table `"
437+
<< SchemeEntry->TableId.PathId.ToString() << "`.",
438+
NYql::NDqProto::StatusIds::PRECONDITION_FAILED,
439+
getIssues());
440+
return;
441+
}
428442
case NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED: {
429443
CA_LOG_W("Got OVERLOADED for table `"
430444
<< SchemeEntry->TableId.PathId.ToString() << "`."

ydb/core/protos/counters_datashard.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ enum ECumulativeCounters {
147147
COUNTER_WRITE_CANCELLED = 109 [(CounterOpts) = {Name: "WriteCancelled"}];
148148
COUNTER_WRITE_ROWS = 110 [(CounterOpts) = {Name: "WriteRows"}];
149149
COUNTER_WRITE_BYTES = 111 [(CounterOpts) = {Name: "WriteBytes"}];
150+
COUNTER_WRITE_DISK_SPACE_EXHAUSTED = 112 [(CounterOpts) = {Name: "WriteDiskSpaceExhausted"}];
151+
COUNTER_PREPARE_DISK_SPACE_EXHAUSTED = 113 [(CounterOpts) = {Name: "PrepareSpaceExhausted"}];
150152
}
151153

152154
enum EPercentileCounters {

ydb/core/protos/data_events.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ message TEvWriteResult {
126126
STATUS_BAD_REQUEST = 7;
127127
STATUS_SCHEME_CHANGED = 8;
128128
STATUS_LOCKS_BROKEN = 9;
129+
STATUS_DISK_SPACE_EXHAUSTED = 10;
129130
}
130131

131132
// Status

ydb/core/tx/datashard/check_data_tx_unit.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,9 @@ EExecutionStatus TCheckDataTxUnit::Execute(TOperation::TPtr op,
212212
// Updates are not allowed when database is out of space
213213
TString err = "Cannot perform writes: database is out of disk space";
214214

215-
DataShard.IncCounter(COUNTER_PREPARE_OUT_OF_SPACE);
215+
DataShard.IncCounter(COUNTER_PREPARE_DISK_SPACE_EXHAUSTED);
216216

217-
BuildResult(op)->AddError(NKikimrTxDataShard::TError::OUT_OF_SPACE, err);
217+
BuildResult(op)->AddError(NKikimrTxDataShard::TError::DISK_SPACE_EXHAUSTED, err);
218218
op->Abort(EExecutionUnitKind::FinishPropose);
219219

220220
LOG_LOG_S_THROTTLE(DataShard.GetLogThrottler(TDataShard::ELogThrottlerType::CheckDataTxUnit_Execute), ctx, NActors::NLog::PRI_ERROR, NKikimrServices::TX_DATASHARD, err);

ydb/core/tx/datashard/check_write_unit.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ EExecutionStatus TCheckWriteUnit::Execute(TOperation::TPtr op,
8888
// Updates are not allowed when database is out of space
8989
TString err = "Cannot perform writes: database is out of disk space";
9090

91-
DataShard.IncCounter(COUNTER_WRITE_OUT_OF_SPACE);
91+
DataShard.IncCounter(COUNTER_WRITE_DISK_SPACE_EXHAUSTED);
9292

93-
writeOp->SetError(NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED, err);
93+
writeOp->SetError(NKikimrDataEvents::TEvWriteResult::STATUS_DISK_SPACE_EXHAUSTED, err);
9494
op->Abort(EExecutionUnitKind::FinishProposeWrite);
9595

9696
DataShard.SetOverloadSubscribed(writeOp->GetWriteTx()->GetOverloadSubscribe(), writeOp->GetRecipient(), op->GetTarget(), ERejectReasons::YellowChannels, writeOp->GetWriteResult()->Record);

ydb/core/tx/datashard/datashard__op_rows.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ static bool MaybeReject(TDataShard* self, TEvRequest& ev, const TActorContext& c
203203
Reject<TEvResponse, TEvRequest>(self, ev, txDesc, rejectReasons, rejectDescription, &OutOfSpace, ctx, logThrottlerType);
204204
return true;
205205
} else if (self->IsSubDomainOutOfSpace()) {
206-
self->IncCounter(COUNTER_PREPARE_OUT_OF_SPACE);
206+
self->IncCounter(COUNTER_PREPARE_DISK_SPACE_EXHAUSTED);
207207
rejectReasons = ERejectReasons::DiskSpace;
208208
rejectDescription = "Cannot perform writes: database is out of disk space";
209209
Reject<TEvResponse, TEvRequest>(self, ev, txDesc, rejectReasons, rejectDescription, &DiskSpaceExhausted, ctx, logThrottlerType);

ydb/core/tx/datashard/datashard__write.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,9 @@ NKikimrDataEvents::TEvWriteResult::EStatus NEvWrite::TConvertor::ConvertErrCode(
293293
case NKikimrTxDataShard::TError_EKind_SCHEME_CHANGED:
294294
return NKikimrDataEvents::TEvWriteResult::STATUS_SCHEME_CHANGED;
295295
case NKikimrTxDataShard::TError_EKind_OUT_OF_SPACE:
296-
case NKikimrTxDataShard::TError_EKind_DISK_SPACE_EXHAUSTED:
297296
return NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED;
297+
case NKikimrTxDataShard::TError_EKind_DISK_SPACE_EXHAUSTED:
298+
return NKikimrDataEvents::TEvWriteResult::STATUS_DISK_SPACE_EXHAUSTED;
298299
default:
299300
return NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR;
300301
}

ydb/core/tx/datashard/datashard_impl.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3276,7 +3276,13 @@ class TDataShard
32763276
ev->Record.MutableTableStats()->SetImmediateTxCompleted(TabletCounters->Cumulative()[COUNTER_PREPARE_IMMEDIATE].Get() + TabletCounters->Cumulative()[COUNTER_WRITE_IMMEDIATE].Get());
32773277
ev->Record.MutableTableStats()->SetPlannedTxCompleted(TabletCounters->Cumulative()[COUNTER_PLANNED_TX_COMPLETE].Get());
32783278
ev->Record.MutableTableStats()->SetTxRejectedByOverload(TabletCounters->Cumulative()[COUNTER_PREPARE_OVERLOADED].Get() + TabletCounters->Cumulative()[COUNTER_WRITE_OVERLOADED].Get());
3279-
ev->Record.MutableTableStats()->SetTxRejectedBySpace(TabletCounters->Cumulative()[COUNTER_PREPARE_OUT_OF_SPACE].Get() + TabletCounters->Cumulative()[COUNTER_WRITE_OUT_OF_SPACE].Get());
3279+
ev->Record.MutableTableStats()->SetTxRejectedBySpace(
3280+
TabletCounters->Cumulative()[COUNTER_PREPARE_OUT_OF_SPACE].Get()
3281+
+ TabletCounters->Cumulative()[COUNTER_PREPARE_DISK_SPACE_EXHAUSTED].Get()
3282+
+ TabletCounters->Cumulative()[COUNTER_WRITE_OUT_OF_SPACE].Get()
3283+
+ TabletCounters->Cumulative()[COUNTER_WRITE_DISK_SPACE_EXHAUSTED].Get()
3284+
);
3285+
32803286
ev->Record.MutableTableStats()->SetTxCompleteLagMsec(TabletCounters->Simple()[COUNTER_TX_COMPLETE_LAG].Get());
32813287
ev->Record.MutableTableStats()->SetInFlightTxCount(TabletCounters->Simple()[COUNTER_TX_IN_FLY].Get()
32823288
+ TabletCounters->Simple()[COUNTER_IMMEDIATE_TX_IN_FLY].Get());

0 commit comments

Comments
 (0)