Skip to content

Commit 5c36245

Browse files
authored
schemeshard: make direct creation of TAlterExtSubDomain impossible (#9157)
KIKIMR-21965 Enforce creation of `TAlterExtSubDomain` operations only through `CreateCompatibleAlterExtSubDomain()` to ensure all proper state checking. ### Changelog category * Not for changelog
1 parent dc45aff commit 5c36245

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

ydb/core/tx/schemeshard/schemeshard__operation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1263,7 +1263,7 @@ TVector<ISubOperation::TPtr> TOperation::ConstructParts(const TTxTransaction& tx
12631263
case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSubDomain:
12641264
return {CreateSubDomain(NextPartId(), tx)};
12651265
case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSubDomain:
1266-
return {CreateCompatibleSubdomainAlter(context.SS, NextPartId(), tx)};
1266+
return CreateCompatibleSubdomainAlter(NextPartId(), tx, context);
12671267
case NKikimrSchemeOp::EOperationType::ESchemeOpDropSubDomain:
12681268
return {CreateDropSubdomain(NextPartId(), tx)};
12691269
case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropSubDomain:

ydb/core/tx/schemeshard/schemeshard__operation_part.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ ISubOperation::TPtr CreateAlterSubDomain(TOperationId id, const TTxTransaction&
493493
ISubOperation::TPtr CreateAlterSubDomain(TOperationId id, TTxState::ETxState state);
494494

495495
ISubOperation::TPtr CreateCompatibleSubdomainDrop(TSchemeShard* ss, TOperationId id, const TTxTransaction& tx);
496-
ISubOperation::TPtr CreateCompatibleSubdomainAlter(TSchemeShard* ss, TOperationId id, const TTxTransaction& tx);
496+
TVector<ISubOperation::TPtr> CreateCompatibleSubdomainAlter(TOperationId id, const TTxTransaction& tx, TOperationContext& context);
497497

498498
ISubOperation::TPtr CreateUpgradeSubDomain(TOperationId id, const TTxTransaction& tx);
499499
ISubOperation::TPtr CreateUpgradeSubDomain(TOperationId id, TTxState::ETxState state);
@@ -514,10 +514,10 @@ ISubOperation::TPtr CreateExtSubDomain(TOperationId id, TTxState::ETxState state
514514

515515
// Alter
516516
TVector<ISubOperation::TPtr> CreateCompatibleAlterExtSubDomain(TOperationId nextId, const TTxTransaction& tx, TOperationContext& context);
517-
ISubOperation::TPtr CreateAlterExtSubDomain(TOperationId id, const TTxTransaction& tx);
518517
ISubOperation::TPtr CreateAlterExtSubDomain(TOperationId id, TTxState::ETxState state);
519-
ISubOperation::TPtr CreateAlterExtSubDomainCreateHive(TOperationId id, const TTxTransaction& tx);
520518
ISubOperation::TPtr CreateAlterExtSubDomainCreateHive(TOperationId id, TTxState::ETxState state);
519+
//NOTE: no variants to construct individual suboperations directly from TTxTransaction --
520+
// -- it should be possible only through CreateCompatibleAlterExtSubDomain
521521

522522
// Drop
523523
ISubOperation::TPtr CreateForceDropExtSubDomain(TOperationId id, const TTxTransaction& tx);

ydb/core/tx/schemeshard/schemeshard__operation_upgrade_subdomain.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,13 +1530,13 @@ ISubOperation::TPtr CreateCompatibleSubdomainDrop(TSchemeShard* ss, TOperationId
15301530
return CreateForceDropSubDomain(id, tx);
15311531
}
15321532

1533-
ISubOperation::TPtr CreateCompatibleSubdomainAlter(TSchemeShard* ss, TOperationId id, const TTxTransaction& tx) {
1533+
TVector<ISubOperation::TPtr> CreateCompatibleSubdomainAlter(TOperationId id, const TTxTransaction& tx, TOperationContext& context) {
15341534
const auto& info = tx.GetSubDomain();
15351535

15361536
const TString& parentPathStr = tx.GetWorkingDir();
15371537
const TString& name = info.GetName();
15381538

1539-
TPath path = TPath::Resolve(parentPathStr, ss).Dive(name);
1539+
TPath path = TPath::Resolve(parentPathStr, context.SS).Dive(name);
15401540

15411541
{
15421542
TPath::TChecker checks = path.Check();
@@ -1546,15 +1546,16 @@ ISubOperation::TPtr CreateCompatibleSubdomainAlter(TSchemeShard* ss, TOperationI
15461546
.NotDeleted();
15471547

15481548
if (!checks) {
1549-
return CreateAlterSubDomain(id, tx);
1549+
return {CreateAlterSubDomain(id, tx)};
15501550
}
15511551
}
15521552

15531553
if (path.Base()->IsExternalSubDomainRoot()) {
1554-
return CreateAlterExtSubDomain(id, tx);
1554+
// plain subdomains don't have subdomain/tenant hives so only single operation should be returned here
1555+
return CreateCompatibleAlterExtSubDomain(id, tx, context);
15551556
}
15561557

1557-
return CreateAlterSubDomain(id, tx);
1558+
return {CreateAlterSubDomain(id, tx)};
15581559
}
15591560

15601561
}

0 commit comments

Comments
 (0)