diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2022-12-06 17:45:07 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2022-12-06 17:45:07 +0300 |
commit | 9e4e82616cb855b6e6c487c3fe3c5aa138f51f62 (patch) | |
tree | c5ea811e504ffd82a241c20a00225eff8a7e0b9d | |
parent | 2551eb05cb2595b27bb0a3626ece533042e06d82 (diff) | |
download | ydb-9e4e82616cb855b6e6c487c3fe3c5aa138f51f62.tar.gz |
wait tiering ready for usage
-rw-r--r-- | ydb/core/testlib/common_helper.cpp | 2 | ||||
-rw-r--r-- | ydb/core/tx/columnshard/columnshard.cpp | 7 | ||||
-rw-r--r-- | ydb/core/tx/columnshard/columnshard_impl.cpp | 10 | ||||
-rw-r--r-- | ydb/core/tx/columnshard/columnshard_impl.h | 5 | ||||
-rw-r--r-- | ydb/core/tx/columnshard/ut_columnshard_schema.cpp | 11 | ||||
-rw-r--r-- | ydb/core/tx/tiering/common.h | 5 | ||||
-rw-r--r-- | ydb/core/tx/tiering/manager.cpp | 4 | ||||
-rw-r--r-- | ydb/core/tx/tiering/manager.h | 1 | ||||
-rw-r--r-- | ydb/core/tx/tiering/ut/ut_tiers.cpp | 2 |
9 files changed, 39 insertions, 8 deletions
diff --git a/ydb/core/testlib/common_helper.cpp b/ydb/core/testlib/common_helper.cpp index f3574b9326f..20e271c7349 100644 --- a/ydb/core/testlib/common_helper.cpp +++ b/ydb/core/testlib/common_helper.cpp @@ -47,11 +47,11 @@ void THelper::StartSchemaRequest(const TString& request, const bool expectSucces auto session = f.GetValueSync().GetSession(); session.ExecuteSchemeQuery(request).Subscribe([rrPtr, expectation](NYdb::TAsyncStatus f) { - *rrPtr = true; TStringStream ss; f.GetValueSync().GetIssues().PrintTo(ss, false); Cerr << ss.Str() << Endl; Y_VERIFY(expectation == f.GetValueSync().IsSuccess()); + *rrPtr = true; }); }); const TInstant start = TInstant::Now(); diff --git a/ydb/core/tx/columnshard/columnshard.cpp b/ydb/core/tx/columnshard/columnshard.cpp index 1c2807c66fb..2aff76c3873 100644 --- a/ydb/core/tx/columnshard/columnshard.cpp +++ b/ydb/core/tx/columnshard/columnshard.cpp @@ -29,10 +29,15 @@ void TColumnShard::SwitchToWork(const TActorContext& ctx) { IndexingActor = ctx.Register(CreateIndexingActor(TabletID(), ctx.SelfID)); CompactionActor = ctx.Register(CreateCompactionActor(TabletID(), ctx.SelfID)); EvictionActor = ctx.Register(CreateEvictionActor(TabletID(), ctx.SelfID)); + ui32 tieringsCount = 0; for (auto&& i : Tables) { ActivateTiering(i.first, i.second.TieringUsage); + tieringsCount += (i.second.TieringUsage ? 1 : 0); + } + TieringWaiting = tieringsCount; + if (!TieringWaiting) { + SignalTabletActive(ctx); } - SignalTabletActive(ctx); } void TColumnShard::OnActivateExecutor(const TActorContext& ctx) { diff --git a/ydb/core/tx/columnshard/columnshard_impl.cpp b/ydb/core/tx/columnshard/columnshard_impl.cpp index 38cdf1da14a..fed718c4328 100644 --- a/ydb/core/tx/columnshard/columnshard_impl.cpp +++ b/ydb/core/tx/columnshard/columnshard_impl.cpp @@ -1038,8 +1038,18 @@ TActorId TColumnShard::GetS3ActorForTier(const TString& tierId) const { return Tiers->GetStorageActorId(tierId); } +void TColumnShard::Handle(NTiers::TEvTiersManagerReadyForUsage::TPtr& /*ev*/) { + Y_VERIFY(Tiers); + Y_VERIFY(Tiers->IsReadyForUsage()); + if (TieringWaiting) { + TieringWaiting = false; + SignalTabletActive(TActivationContext::AsActorContext()); + } +} + void TColumnShard::Handle(NMetadataProvider::TEvRefreshSubscriberData::TPtr& ev) { Y_VERIFY(Tiers); + ALS_INFO(NKikimrServices::TX_COLUMNSHARD) << "test handle NMetadataProvider::TEvRefreshSubscriberData" << ev->Get()->GetSnapshot()->SerializeToString(); Tiers->TakeConfigs(ev->Get()->GetSnapshot(), nullptr); } diff --git a/ydb/core/tx/columnshard/columnshard_impl.h b/ydb/core/tx/columnshard/columnshard_impl.h index dccaba39515..26a7b82debc 100644 --- a/ydb/core/tx/columnshard/columnshard_impl.h +++ b/ydb/core/tx/columnshard/columnshard_impl.h @@ -12,6 +12,7 @@ #include <ydb/core/tablet_flat/flat_cxx_database.h> #include <ydb/core/tablet_flat/tablet_flat_executed.h> #include <ydb/core/tablet_flat/tablet_flat_executor.h> +#include <ydb/core/tx/tiering/common.h> #include <ydb/core/tx/tiering/manager.h> #include <ydb/core/tx/time_cast/time_cast.h> #include <ydb/core/tx/tx_processing.h> @@ -125,6 +126,8 @@ class TColumnShard void Handle(TEvPrivate::TEvForget::TPtr& ev, const TActorContext& ctx); void Handle(TEvBlobStorage::TEvCollectGarbageResult::TPtr& ev, const TActorContext& ctx); void Handle(NMetadataProvider::TEvRefreshSubscriberData::TPtr& ev); + void Handle(NTiers::TEvTiersManagerReadyForUsage::TPtr& ev); + ITransaction* CreateTxInitSchema(); ITransaction* CreateTxRunGc(); @@ -227,6 +230,7 @@ protected: HFunc(TEvPrivate::TEvScanStats, Handle); HFunc(TEvPrivate::TEvReadFinished, Handle); HFunc(TEvPrivate::TEvPeriodicWakeup, Handle); + hFunc(NTiers::TEvTiersManagerReadyForUsage, Handle); default: if (!HandleDefaultEvents(ev, ctx)) { LOG_S_WARN("TColumnShard.StateWork at " << TabletID() @@ -357,6 +361,7 @@ private: TActorId EvictionActor; TActorId StatsReportPipe; + bool TieringWaiting = false; std::shared_ptr<TTiersManager> Tiers; std::unique_ptr<TTabletCountersBase> TabletCountersPtr; TTabletCountersBase* TabletCounters; diff --git a/ydb/core/tx/columnshard/ut_columnshard_schema.cpp b/ydb/core/tx/columnshard/ut_columnshard_schema.cpp index 177d543072e..1d28938a97f 100644 --- a/ydb/core/tx/columnshard/ut_columnshard_schema.cpp +++ b/ydb/core/tx/columnshard/ut_columnshard_schema.cpp @@ -335,15 +335,15 @@ public: } void WaitEvents(TTestBasicRuntime& runtime, const TActorId sender, const ui32 attemption, const ui32 expectedDeltaSuccess, const TDuration timeout) { - const TInstant startInstant = Now(); + const TInstant startInstant = TAppData::TimeProvider->Now(); const TInstant deadline = startInstant + timeout; Cerr << "START_WAITING(" << attemption << "): " << SerializeToString() << Endl; - while (Now() < deadline) { + while (TAppData::TimeProvider->Now() < deadline) { if (PopRestartTabletOnPutData()) { RebootTablet(runtime, TTestTxConfig::TxTablet0, sender); } Cerr << "IN_WAITING(" << attemption << "):" << SerializeToString() << Endl; - runtime.DispatchEvents(TDispatchOptions(), TDuration::Seconds(5)); + runtime.SimulateSleep(TDuration::Seconds(1)); UNIT_ASSERT(ErrorsCounter == 0); if (expectedDeltaSuccess) { if (SuccessCounter >= SuccessCounterStart + expectedDeltaSuccess) { @@ -417,7 +417,7 @@ TestTiers(bool reboots, const std::vector<TString>& blobs, const std::vector<TTe TTestBasicRuntime runtime; TTester::Setup(runtime); - //runtime.SetLogPriority(NKikimrServices::BLOB_CACHE, NActors::NLog::PRI_DEBUG); + runtime.SetLogPriority(NKikimrServices::TX_COLUMNSHARD, NActors::NLog::PRI_DEBUG); TActorId sender = runtime.AllocateEdgeActor(); CreateTestBootstrapper(runtime, @@ -498,6 +498,9 @@ TestTiers(bool reboots, const std::vector<TString>& blobs, const std::vector<TTe } else { counter.WaitEvents(runtime, sender, i, 0, TDuration::Seconds(5)); } + if (reboots) { + ProvideTieringSnapshot(runtime, sender, TTestSchema::BuildSnapshot(specs[i])); + } // Read diff --git a/ydb/core/tx/tiering/common.h b/ydb/core/tx/tiering/common.h index 1294252b70f..83a5a3139ed 100644 --- a/ydb/core/tx/tiering/common.h +++ b/ydb/core/tx/tiering/common.h @@ -12,8 +12,13 @@ enum EEvents { EvSSFetchingResult, EvSSFetchingProblem, EvTimeout, + EvTiersManagerReadyForUsage, EvEnd }; +class TEvTiersManagerReadyForUsage: public TEventLocal<TEvTiersManagerReadyForUsage, EvTiersManagerReadyForUsage> { + +}; + static_assert(EEvents::EvEnd < EventSpaceEnd(TKikimrEvents::ES_TIERING), "expect EvEnd < EventSpaceEnd(TKikimrEvents::ES_TIERING)"); } diff --git a/ydb/core/tx/tiering/manager.cpp b/ydb/core/tx/tiering/manager.cpp index c19b49f1925..1ac476ac2b0 100644 --- a/ydb/core/tx/tiering/manager.cpp +++ b/ydb/core/tx/tiering/manager.cpp @@ -1,3 +1,4 @@ +#include "common.h" #include "manager.h" #include "external_data.h" #include "s3_actor.h" @@ -102,7 +103,6 @@ bool TManager::Start(std::shared_ptr<NMetadata::NSecret::TSnapshot> secrets) { auto s3Config = Config.GetPatchedConfig(secrets); ctx.Send(newActor, new TEvPrivate::TEvS3Settings(s3Config)); - Stop(); StorageActorId = newActor; #endif return true; @@ -171,6 +171,8 @@ void TTiersManager::TakeConfigs(NMetadataProvider::ISnapshot::TPtr snapshotExt, auto& manager = Managers.emplace(i.second.GetTierName(), std::move(localManager)).first->second; manager.Start(Secrets); } + ReadyForUsageFlag = true; + TActivationContext::AsActorContext().Send(TabletActorId, new NTiers::TEvTiersManagerReadyForUsage); } TActorId TTiersManager::GetStorageActorId(const TString& tierId) { diff --git a/ydb/core/tx/tiering/manager.h b/ydb/core/tx/tiering/manager.h index 11d6d2bbe28..e9f6e42e610 100644 --- a/ydb/core/tx/tiering/manager.h +++ b/ydb/core/tx/tiering/manager.h @@ -41,6 +41,7 @@ private: TActor* Actor = nullptr; std::unordered_map<ui64, TString> PathIdTiering; YDB_READONLY_DEF(TManagers, Managers); + YDB_READONLY_FLAG(ReadyForUsage, false); std::shared_ptr<NMetadata::NSecret::TSnapshot> Secrets; NMetadataProvider::ISnapshot::TPtr Snapshot; diff --git a/ydb/core/tx/tiering/ut/ut_tiers.cpp b/ydb/core/tx/tiering/ut/ut_tiers.cpp index 6501469c278..76753597dbe 100644 --- a/ydb/core/tx/tiering/ut/ut_tiers.cpp +++ b/ydb/core/tx/tiering/ut/ut_tiers.cpp @@ -223,7 +223,7 @@ Y_UNIT_TEST_SUITE(ColumnShardTiers) { } void Bootstrap() { - ProviderId = NMetadataProvider::MakeServiceId(1); + ProviderId = NMetadataProvider::MakeServiceId(SelfId().NodeId()); ExternalDataManipulation = std::make_shared<NTiers::TSnapshotConstructor>(); Become(&TThis::StateInit); Sender<NMetadataProvider::TEvSubscribeExternal>(ExternalDataManipulation).SendTo(ProviderId); |