diff options
author | ilnaz <ilnaz@ydb.tech> | 2023-02-13 11:43:31 +0300 |
---|---|---|
committer | ilnaz <ilnaz@ydb.tech> | 2023-02-13 11:43:31 +0300 |
commit | c906f2aa4677e77f0a08542f044177d01f3f1c2a (patch) | |
tree | 5fc21bf944116a9638c4d0d12b5d31571c05956e | |
parent | cf46221fda88961656f0dcf1f05e22b719cafd11 (diff) | |
download | ydb-c906f2aa4677e77f0a08542f044177d01f3f1c2a.tar.gz |
(refactoring) Common TDeleteParts
10 files changed, 99 insertions, 326 deletions
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_common.h b/ydb/core/tx/schemeshard/schemeshard__operation_common.h index 69e639b9435..9ea35987a4a 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_common.h +++ b/ydb/core/tx/schemeshard/schemeshard__operation_common.h @@ -132,17 +132,15 @@ public: } // namespace NTableState class TCreateParts: public TSubOperationState { -private: - TOperationId OperationId; + const TOperationId OperationId; TString DebugHint() const override { - return TStringBuilder() - << "TCreateParts" - << " operationId: " << OperationId; + return TStringBuilder() << "TCreateParts" + << " opId# " << OperationId; } public: - TCreateParts(TOperationId id) + explicit TCreateParts(const TOperationId& id) : OperationId(id) { IgnoreMessages(DebugHint(), {}); @@ -416,39 +414,91 @@ public: } }; +class TDeleteParts: public TSubOperationState { +protected: + const TOperationId OperationId; + const TTxState::ETxState NextState; + + TString DebugHint() const override { + return TStringBuilder() << "TDeleteParts" + << " opId# " << OperationId << " "; + } + + void DeleteShards(TOperationContext& context) { + const auto* txState = context.SS->FindTx(OperationId); + + // Initiate asynchronous deletion of all shards + for (const auto& shard : txState->Shards) { + context.OnComplete.DeleteShard(shard.Idx); + } + } + +public: + explicit TDeleteParts(const TOperationId& id, TTxState::ETxState nextState = TTxState::Propose) + : OperationId(id) + , NextState(nextState) + { + IgnoreMessages(DebugHint(), {}); + } + + bool ProgressState(TOperationContext& context) override { + LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, + "[" << context.SS->TabletID() << "] " << DebugHint() << "ProgressState"); + DeleteShards(context); + + NIceDb::TNiceDb db(context.GetDB()); + context.SS->ChangeTxState(db, OperationId, NextState); + return true; + } +}; + +class TDeletePartsAndDone: public TDeleteParts { +public: + explicit TDeletePartsAndDone(const TOperationId& id) + : TDeleteParts(id) + { + Y_UNUSED(NextState); + } + + bool ProgressState(TOperationContext& context) override { + LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, + "[" << context.SS->TabletID() << "] " << DebugHint() << "ProgressState"); + DeleteShards(context); + + context.OnComplete.DoneOperation(OperationId); + return true; + } +}; + class TDone: public TSubOperationState { protected: - TOperationId OperationId; + const TOperationId OperationId; TString DebugHint() const override { - return TStringBuilder() - << "TDone operationId#" << OperationId; + return TStringBuilder() << "TDone" + << " opId# " << OperationId; } public: - TDone(TOperationId id) + explicit TDone(const TOperationId& id) : OperationId(id) { IgnoreMessages(DebugHint(), AllIncomingEvents()); } bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard" << ssId); + "[" << context.SS->TabletID() << "] " << DebugHint() << "ProgressState"); - TTxState* txState = context.SS->FindTx(OperationId); + const auto* txState = context.SS->FindTx(OperationId); - TPathId pathId = txState->TargetPathId; + const auto& pathId = txState->TargetPathId; Y_VERIFY(context.SS->PathsById.contains(pathId)); TPathElement::TPtr path = context.SS->PathsById.at(pathId); - Y_VERIFY_S(path->PathState != TPathElement::EPathState::EPathStateNoChanges, - "with context" - << ", PathState: " << NKikimrSchemeOp::EPathState_Name(path->PathState) - << ", PathId: " << path->PathId - << ", PathName: " << path->Name); + Y_VERIFY_S(path->PathState != TPathElement::EPathState::EPathStateNoChanges, "with context" + << ", PathState: " << NKikimrSchemeOp::EPathState_Name(path->PathState) + << ", PathId: " << path->PathId + << ", PathName: " << path->Name); if (path->IsPQGroup() && txState->IsCreate()) { TPathElement::TPtr parentDir = context.SS->PathsById.at(path->ParentPathId); diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_bsv.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_bsv.cpp index e6fdf799068..7af2e704f99 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_bsv.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_bsv.cpp @@ -9,44 +9,6 @@ namespace { using namespace NKikimr; using namespace NSchemeShard; -class TDeleteParts: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropBlockStoreVolume TDeleteParts" - << ", operationId: " << OperationId; - } - -public: - TDeleteParts(TOperationId id) - : OperationId(id) - { - IgnoreMessages(DebugHint(), {}); - } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - Y_VERIFY(txState->TxType == TTxState::TxDropBlockStoreVolume); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - NIceDb::TNiceDb db(context.GetDB()); - context.SS->ChangeTxState(db, OperationId, TTxState::Propose); - return true; - } -}; - class TPropose: public TSubOperationState { private: TOperationId OperationId; diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_extsubdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_extsubdomain.cpp index 6f149786ec7..b600e49bb61 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_extsubdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_extsubdomain.cpp @@ -9,41 +9,13 @@ namespace { using namespace NKikimr; using namespace NSchemeShard; -class TDeletePrivateShards: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropExtSubdomain TDeletePrivateShards" - << ", operationId: " << OperationId; - } - +class TDeletePrivateShards: public TDeleteParts { public: - TDeletePrivateShards(TOperationId id) - : OperationId(id) + explicit TDeletePrivateShards(const TOperationId& id) + : TDeleteParts(id, TTxState::Done) { IgnoreMessages(DebugHint(), AllIncomingEvents()); } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - NIceDb::TNiceDb db(context.GetDB()); - context.SS->ChangeTxState(db, OperationId, TTxState::Done); - return true; - } }; class TDeleteExternalShards: public TSubOperationState { diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_fs.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_fs.cpp index 355725f3261..29af89fcfa2 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_fs.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_fs.cpp @@ -12,46 +12,6 @@ using namespace NSchemeShard; //////////////////////////////////////////////////////////////////////////////// -class TDeleteParts: public TSubOperationState { -private: - const TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropFileStore::TDeleteParts" - << ", operationId: " << OperationId; - } - -public: - TDeleteParts(TOperationId id) - : OperationId(id) - { - IgnoreMessages(DebugHint(), {}); - } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - auto* txState = context.SS->FindTx(OperationId); - Y_VERIFY(txState->TxType == TTxState::TxDropFileStore); - - // Initiate asynchronous deletion of all shards - for (const auto& shard: txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - NIceDb::TNiceDb db(context.GetDB()); - context.SS->ChangeTxState(db, OperationId, TTxState::Propose); - return true; - } -}; - -//////////////////////////////////////////////////////////////////////////////// - class TPropose: public TSubOperationState { private: const TOperationId OperationId; diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_kesus.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_kesus.cpp index e4f6f303172..2e753ecf42b 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_kesus.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_kesus.cpp @@ -9,44 +9,6 @@ namespace { using namespace NKikimr; using namespace NSchemeShard; -class TDeleteParts: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropKesus TDeleteParts" - << ", operationId: " << OperationId; - } - -public: - TDeleteParts(TOperationId id) - : OperationId(id) - { - IgnoreMessages(DebugHint(), {}); - } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - Y_VERIFY(txState->TxType == TTxState::TxDropKesus); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - NIceDb::TNiceDb db(context.GetDB()); - context.SS->ChangeTxState(db, OperationId, TTxState::Propose); - return true; - } -}; - class TPropose: public TSubOperationState { private: TOperationId OperationId; diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp index 42cbaa77cf7..766fac5b249 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp @@ -118,43 +118,15 @@ public: } }; -class TDeleteParts: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropPQ TProposedDeletePart" - << ", operationId: " << OperationId; - } - +class TDeleteParts: public ::NKikimr::NSchemeShard::TDeleteParts { public: - TDeleteParts(TOperationId id) - : OperationId(id) + explicit TDeleteParts(const TOperationId& id) + : ::NKikimr::NSchemeShard::TDeleteParts(id) { - IgnoreMessages(DebugHint(), {TEvPersQueue::TEvDropTabletReply::EventType}); - } - - bool ProgressState(TOperationContext& context) override { - auto ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - NIceDb::TNiceDb db(context.GetDB()); - context.SS->ChangeTxState(db, OperationId, TTxState::Propose); - context.OnComplete.ActivateTx(OperationId); - return true; + IgnoreMessages(DebugHint(), { + TEvPersQueue::TEvDropTabletReply::EventType, + }); } - }; class TPropose: public TSubOperationState { diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_replication.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_replication.cpp index aa085db4c3b..edb2254dd4b 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_replication.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_replication.cpp @@ -105,44 +105,16 @@ private: }; // TDropParts -class TDeleteParts: public TSubOperationState { - TString DebugHint() const override { - return TStringBuilder() - << "TDropReplication TDeleteParts" - << " opId# " << OperationId << " "; - } - +class TDeleteParts: public ::NKikimr::NSchemeShard::TDeleteParts { public: - explicit TDeleteParts(TOperationId id) - : OperationId(id) + explicit TDeleteParts(const TOperationId& id) + : ::NKikimr::NSchemeShard::TDeleteParts(id) { IgnoreMessages(DebugHint(), { NReplication::TEvController::TEvDropReplicationResult::EventType, }); } - - bool ProgressState(TOperationContext& context) override { - LOG_I(DebugHint() << "ProgressState"); - - TTxState* txState = context.SS->FindTx(OperationId); - Y_VERIFY(txState); - Y_VERIFY(txState->TxType == TTxState::TxDropReplication); - - for (const auto& shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - NIceDb::TNiceDb db(context.GetDB()); - context.SS->ChangeTxState(db, OperationId, TTxState::Propose); - context.OnComplete.ActivateTx(OperationId); - - return true; - } - -private: - const TOperationId OperationId; - -}; // TDeleteParts +}; class TPropose: public TSubOperationState { TString DebugHint() const override { diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_solomon.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_solomon.cpp index e5277373572..fe176bfc7fe 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_solomon.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_solomon.cpp @@ -9,39 +9,14 @@ namespace { using namespace NKikimr; using namespace NSchemeShard; -class TDeleteParts: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropSolomon TDeleteParts" - << ", operationId: " << OperationId; - } - +class TDeleteParts: public TDeletePartsAndDone { public: - TDeleteParts(TOperationId id) - : OperationId(id) + explicit TDeleteParts(const TOperationId& id) + : TDeletePartsAndDone(id) { - IgnoreMessages(DebugHint(), {TEvPrivate::TEvOperationPlan::EventType}); - } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - context.OnComplete.DoneOperation(OperationId); - return true; + IgnoreMessages(DebugHint(), { + TEvPrivate::TEvOperationPlan::EventType, + }); } }; diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_subdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_subdomain.cpp index 5e6a9149129..b698f843866 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_subdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_subdomain.cpp @@ -9,39 +9,14 @@ namespace { using namespace NKikimr; using namespace NSchemeShard; -class TDeleteParts: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropSubdomain TDeleteParts" - << " operationId#" << OperationId; - } - +class TDeleteParts: public TDeletePartsAndDone { public: - TDeleteParts(TOperationId id) - : OperationId(id) + explicit TDeleteParts(const TOperationId& id) + : TDeletePartsAndDone(id) { - IgnoreMessages(DebugHint(), {TEvPrivate::TEvOperationPlan::EventType}); - } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - context.OnComplete.DoneOperation(OperationId); - return true; + IgnoreMessages(DebugHint(), { + TEvPrivate::TEvOperationPlan::EventType, + }); } }; diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_unsafe.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_unsafe.cpp index 8aba08a66e2..8a68e7a33f0 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_unsafe.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_unsafe.cpp @@ -9,40 +9,13 @@ namespace { using namespace NKikimr; using namespace NSchemeShard; -class TProposedDeletePart: public TSubOperationState { -private: - TOperationId OperationId; - - TString DebugHint() const override { - return TStringBuilder() - << "TDropForceUnsafe TProposedDeletePart" - << ", operationId: " << OperationId; - } - +class TProposedDeletePart: public TDeletePartsAndDone { public: - TProposedDeletePart(TOperationId id) - : OperationId(id) + explicit TProposedDeletePart(const TOperationId& id) + : TDeletePartsAndDone(id) { IgnoreMessages(DebugHint(), AllIncomingEvents()); } - - bool ProgressState(TOperationContext& context) override { - TTabletId ssId = context.SS->SelfTabletId(); - - LOG_INFO_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, - DebugHint() << " ProgressState" - << ", at schemeshard: " << ssId); - - TTxState* txState = context.SS->FindTx(OperationId); - - // Initiate asynchronous deletion of all shards - for (auto shard : txState->Shards) { - context.OnComplete.DeleteShard(shard.Idx); - } - - context.OnComplete.DoneOperation(OperationId); - return true; - } }; class TPropose: public TSubOperationState { |