File tree Expand file tree Collapse file tree 5 files changed +41
-0
lines changed Expand file tree Collapse file tree 5 files changed +41
-0
lines changed Original file line number Diff line number Diff 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
195197message TEvInitTenantSchemeShard {
Original file line number Diff line number Diff 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 ()) {
Original file line number Diff line number Diff 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 }
Original file line number Diff line number Diff 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);
Original file line number Diff line number Diff 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 ;
You can’t perform that action at this time.
0 commit comments