Browse Source

dont rebuild s3 client in case same config (#2352)

ivanmorozov333 1 year ago
parent
commit
627c051f40

+ 7 - 0
ydb/core/tx/columnshard/blobs_action/tier/storage.cpp

@@ -49,11 +49,18 @@ void TOperator::InitNewExternalOperator(const NColumnShard::NTiers::TManager* ti
     } else {
         settings.SetEndpoint("nowhere");
     }
+    {
+        TGuard<TSpinLock> changeLock(ChangeOperatorLock);
+        if (CurrentS3Settings && CurrentS3Settings->SerializeAsString() == settings.SerializeAsString()) {
+            return;
+        }
+    }
     auto extStorageConfig = NWrappers::NExternalStorage::IExternalStorageConfig::Construct(settings);
     AFL_VERIFY(extStorageConfig);
     auto extStorageOperator = extStorageConfig->ConstructStorageOperator(false);
     extStorageOperator->InitReplyAdapter(std::make_shared<NOlap::NBlobOperations::NTier::TRepliesAdapter>(GetStorageId()));
     TGuard<TSpinLock> changeLock(ChangeOperatorLock);
+    CurrentS3Settings = settings;
     ExternalStorageOperator = extStorageOperator;
 }
 

+ 1 - 1
ydb/core/tx/columnshard/blobs_action/tier/storage.h

@@ -13,7 +13,7 @@ private:
     using TBase = IBlobsStorageOperator;
     const NActors::TActorId TabletActorId;
     std::shared_ptr<TGCInfo> GCInfo = std::make_shared<TGCInfo>();
-
+    std::optional<NKikimrSchemeOp::TS3Settings> CurrentS3Settings;
     NWrappers::NExternalStorage::IExternalStorageConfig::TPtr InitializationConfig;
     NWrappers::NExternalStorage::IExternalStorageConfig::TPtr ExternalStorageConfig;
     TSpinLock ChangeOperatorLock;