Skip to content

Commit 2c3d1e3

Browse files
lock for different client versions usage (#961)
1 parent a03a2bc commit 2c3d1e3

File tree

2 files changed

+8
-21
lines changed

2 files changed

+8
-21
lines changed

ydb/core/tx/columnshard/blobs_action/tier/storage.cpp

+6-19
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@
1111
namespace NKikimr::NOlap::NBlobOperations::NTier {
1212

1313
NWrappers::NExternalStorage::IExternalStorageOperator::TPtr TOperator::GetCurrentOperator() const {
14-
const ui32 idx = CurrentOperatorIdx.Val();
15-
AFL_VERIFY(idx < ExternalStorageOperators.size())("idx", idx)("size", ExternalStorageOperators.size());
16-
auto result = ExternalStorageOperators[idx];
17-
Y_ABORT_UNLESS(result);
18-
return result;
14+
TGuard<TSpinLock> changeLock(ChangeOperatorLock);
15+
return ExternalStorageOperator;
1916
}
2017

2118
std::shared_ptr<IBlobsDeclareRemovingAction> TOperator::DoStartDeclareRemovingAction() {
@@ -52,10 +49,8 @@ void TOperator::InitNewExternalOperator(const NColumnShard::NTiers::TManager* ti
5249
AFL_VERIFY(extStorageConfig);
5350
auto extStorageOperator = extStorageConfig->ConstructStorageOperator(false);
5451
extStorageOperator->InitReplyAdapter(std::make_shared<NOlap::NBlobOperations::NTier::TRepliesAdapter>());
55-
ExternalStorageOperators.emplace_back(extStorageOperator);
56-
if (CurrentOperatorIdx.Val() + 1 < (i64)ExternalStorageOperators.size()) {
57-
CurrentOperatorIdx.Inc();
58-
}
52+
TGuard<TSpinLock> changeLock(ChangeOperatorLock);
53+
ExternalStorageOperator = extStorageOperator;
5954
}
6055

6156
TOperator::TOperator(const TString& storageId, const NColumnShard::TColumnShard& shard)
@@ -67,20 +62,12 @@ TOperator::TOperator(const TString& storageId, const NColumnShard::TColumnShard&
6762
}
6863

6964
void TOperator::DoOnTieringModified(const std::shared_ptr<NColumnShard::TTiersManager>& tiers) {
70-
AFL_VERIFY(ExternalStorageOperators.size());
7165
auto* tierManager = tiers->GetManagerOptional(TBase::GetStorageId());
72-
ui32 cleanCount = ExternalStorageOperators.size() - 1;
7366
if (tierManager) {
7467
InitNewExternalOperator(tierManager);
7568
} else {
76-
cleanCount = ExternalStorageOperators.size();
77-
}
78-
for (ui32 i = 0; i < cleanCount; ++i) {
79-
if (ExternalStorageOperators[i].use_count() == 1) {
80-
ExternalStorageOperators[i] = nullptr;
81-
} else {
82-
break;
83-
}
69+
TGuard<TSpinLock> changeLock(ChangeOperatorLock);
70+
ExternalStorageOperator = nullptr;
8471
}
8572
}
8673

ydb/core/tx/columnshard/blobs_action/tier/storage.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ class TOperator: public IBlobsStorageOperator {
1414
using TBase = IBlobsStorageOperator;
1515
const ui64 TabletId;
1616
const NActors::TActorId TabletActorId;
17-
TAtomicCounter CurrentOperatorIdx = 0;
18-
std::deque<NWrappers::NExternalStorage::IExternalStorageOperator::TPtr> ExternalStorageOperators;
1917
std::shared_ptr<TGCInfo> GCInfo = std::make_shared<TGCInfo>();
18+
2019
NWrappers::NExternalStorage::IExternalStorageConfig::TPtr ExternalStorageConfig;
20+
TSpinLock ChangeOperatorLock;
2121
NWrappers::NExternalStorage::IExternalStorageOperator::TPtr ExternalStorageOperator;
2222

2323
NWrappers::NExternalStorage::IExternalStorageOperator::TPtr GetCurrentOperator() const;

0 commit comments

Comments
 (0)