Skip to content

Commit 2fecb4b

Browse files
authored
Merge 1e16ce3 into a20c225
2 parents a20c225 + 1e16ce3 commit 2fecb4b

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed

ydb/core/protos/flat_tx_scheme.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ message TSchemeLimits {
190190

191191
optional uint64 MaxExports = 16;
192192
optional uint64 MaxImports = 17;
193+
194+
optional uint64 MaxOlapTableColumns = 18;
193195
}
194196

195197
message TEvInitTenantSchemeShard {

ydb/core/tx/schemeshard/olap/operations/alter_table.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,28 @@ class TAlterColumnTable: public TSubOperation {
312312
return result;
313313
}
314314

315+
NSchemeShard::TPath parentPath = NSchemeShard::TPath::Resolve(parentPathStr, context.SS);
316+
auto domainInfo = parentPath.DomainInfo();
317+
const TSchemeLimits& limits = domainInfo->GetSchemeLimits();
318+
319+
if (Transaction.HasAlterColumnTable()) {
320+
auto& alterSchema = Transaction.GetAlterColumnTable().GetAlterSchema();
321+
TTablesStorage::TTableReadGuard table = context.SS->ColumnTables.at(path->PathId);
322+
ui64 curCols = table->Description.GetSchema().GetColumns().size();
323+
ui64 dropCols = alterSchema.GetDropColumns().size();
324+
ui64 addCols = alterSchema.GetAddColumns().size();
325+
if (curCols + addCols - dropCols > limits.MaxOlapTableColumns) {
326+
TString errStr = TStringBuilder()
327+
<< "Too many columns"
328+
<< ": current:" << curCols
329+
<< ", new: " << addCols
330+
<< ", dropping: " << dropCols
331+
<< ". Limit: " << limits.MaxOlapTableColumns;
332+
result->SetError(NKikimrScheme::StatusSchemeError, errStr);
333+
return result;
334+
}
335+
}
336+
315337
NIceDb::TNiceDb db(context.GetDB());
316338

317339
if (update->GetShardIds().size()) {

ydb/core/tx/schemeshard/olap/operations/create_table.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,11 +681,23 @@ class TCreateColumnTable: public TSubOperation {
681681
TProposeErrorCollector errors(*result);
682682
TColumnTableInfo::TPtr tableInfo;
683683
bool needUpdateObject = false;
684+
auto domainInfo = parentPath.DomainInfo();
685+
const TSchemeLimits& limits = domainInfo->GetSchemeLimits();
686+
684687
if (storeInfo) {
685688
TOlapPresetConstructor tableConstructor(*storeInfo);
686689
tableInfo = tableConstructor.BuildTableInfo(createDescription, context, errors);
687690
needUpdateObject = tableConstructor.GetNeedUpdateObject();
688691
} else {
692+
ui64 columnCount = createDescription.schema().columns().size();
693+
if (columnCount > limits.MaxOlapTableColumns) {
694+
TString errStr = TStringBuilder()
695+
<< "Too many columns"
696+
<< ". new: " << columnCount
697+
<< ". Limit: " << limits.MaxOlapTableColumns;
698+
result->SetError(NKikimrScheme::StatusSchemeError, errStr);
699+
return result;
700+
}
689701
TOlapTableConstructor tableConstructor;
690702
tableInfo = tableConstructor.BuildTableInfo(createDescription, context, errors);
691703
}

ydb/core/tx/schemeshard/schemeshard_types.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ TSchemeLimits TSchemeLimits::FromProto(const NKikimrScheme::TSchemeLimits& proto
2020
if (proto.HasMaxTableColumns()) {
2121
result.MaxTableColumns = proto.GetMaxTableColumns();
2222
}
23+
if (proto.HasMaxOlapTableColumns()) {
24+
result.MaxOlapTableColumns = proto.GetMaxOlapTableColumns();
25+
}
2326
if (proto.HasMaxTableColumnNameLength()) {
2427
result.MaxTableColumnNameLength = proto.GetMaxTableColumnNameLength();
2528
}
@@ -69,6 +72,7 @@ NKikimrScheme::TSchemeLimits TSchemeLimits::AsProto() const {
6972
result.SetMaxAclBytesSize(MaxAclBytesSize);
7073

7174
result.SetMaxTableColumns(MaxTableColumns);
75+
result.SetMaxOlapTableColumns(MaxOlapTableColumns);
7276
result.SetMaxTableColumnNameLength(MaxTableColumnNameLength);
7377
result.SetMaxTableKeyColumns(MaxTableKeyColumns);
7478
result.SetMaxTableIndices(MaxTableIndices);

ydb/core/tx/schemeshard/schemeshard_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ struct TSchemeLimits {
3939

4040
// table
4141
ui64 MaxTableColumns = 200;
42+
ui64 MaxOlapTableColumns = 10000;
4243
ui64 MaxTableColumnNameLength = 255;
4344
ui64 MaxTableKeyColumns = 20;
4445
ui64 MaxTableIndices = 20;

0 commit comments

Comments
 (0)