From 920815edc03a5eea1560c795640903acbd8e8b4c Mon Sep 17 00:00:00 2001 From: ivanmorozov333 Date: Fri, 12 Jan 2024 11:48:46 +0300 Subject: [PATCH] lock for different client versions usage --- .../columnshard/blobs_action/tier/storage.cpp | 25 +++++-------------- .../columnshard/blobs_action/tier/storage.h | 4 +-- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/ydb/core/tx/columnshard/blobs_action/tier/storage.cpp b/ydb/core/tx/columnshard/blobs_action/tier/storage.cpp index bf9e02e5f87d..5c0db48f42a2 100644 --- a/ydb/core/tx/columnshard/blobs_action/tier/storage.cpp +++ b/ydb/core/tx/columnshard/blobs_action/tier/storage.cpp @@ -11,11 +11,8 @@ namespace NKikimr::NOlap::NBlobOperations::NTier { NWrappers::NExternalStorage::IExternalStorageOperator::TPtr TOperator::GetCurrentOperator() const { - const ui32 idx = CurrentOperatorIdx.Val(); - AFL_VERIFY(idx < ExternalStorageOperators.size())("idx", idx)("size", ExternalStorageOperators.size()); - auto result = ExternalStorageOperators[idx]; - Y_ABORT_UNLESS(result); - return result; + TGuard changeLock(ChangeOperatorLock); + return ExternalStorageOperator; } std::shared_ptr TOperator::DoStartDeclareRemovingAction() { @@ -52,10 +49,8 @@ void TOperator::InitNewExternalOperator(const NColumnShard::NTiers::TManager* ti AFL_VERIFY(extStorageConfig); auto extStorageOperator = extStorageConfig->ConstructStorageOperator(false); extStorageOperator->InitReplyAdapter(std::make_shared()); - ExternalStorageOperators.emplace_back(extStorageOperator); - if (CurrentOperatorIdx.Val() + 1 < (i64)ExternalStorageOperators.size()) { - CurrentOperatorIdx.Inc(); - } + TGuard changeLock(ChangeOperatorLock); + ExternalStorageOperator = extStorageOperator; } TOperator::TOperator(const TString& storageId, const NColumnShard::TColumnShard& shard) @@ -67,20 +62,12 @@ TOperator::TOperator(const TString& storageId, const NColumnShard::TColumnShard& } void TOperator::DoOnTieringModified(const std::shared_ptr& tiers) { - AFL_VERIFY(ExternalStorageOperators.size()); auto* tierManager = tiers->GetManagerOptional(TBase::GetStorageId()); - ui32 cleanCount = ExternalStorageOperators.size() - 1; if (tierManager) { InitNewExternalOperator(tierManager); } else { - cleanCount = ExternalStorageOperators.size(); - } - for (ui32 i = 0; i < cleanCount; ++i) { - if (ExternalStorageOperators[i].use_count() == 1) { - ExternalStorageOperators[i] = nullptr; - } else { - break; - } + TGuard changeLock(ChangeOperatorLock); + ExternalStorageOperator = nullptr; } } diff --git a/ydb/core/tx/columnshard/blobs_action/tier/storage.h b/ydb/core/tx/columnshard/blobs_action/tier/storage.h index b153c9b72ecf..fd2cd725ac81 100644 --- a/ydb/core/tx/columnshard/blobs_action/tier/storage.h +++ b/ydb/core/tx/columnshard/blobs_action/tier/storage.h @@ -14,10 +14,10 @@ class TOperator: public IBlobsStorageOperator { using TBase = IBlobsStorageOperator; const ui64 TabletId; const NActors::TActorId TabletActorId; - TAtomicCounter CurrentOperatorIdx = 0; - std::deque ExternalStorageOperators; std::shared_ptr GCInfo = std::make_shared(); + NWrappers::NExternalStorage::IExternalStorageConfig::TPtr ExternalStorageConfig; + TSpinLock ChangeOperatorLock; NWrappers::NExternalStorage::IExternalStorageOperator::TPtr ExternalStorageOperator; NWrappers::NExternalStorage::IExternalStorageOperator::TPtr GetCurrentOperator() const;