aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <ivanmorozov@yandex-team.com>2022-12-06 17:45:07 +0300
committerivanmorozov <ivanmorozov@yandex-team.com>2022-12-06 17:45:07 +0300
commit9e4e82616cb855b6e6c487c3fe3c5aa138f51f62 (patch)
treec5ea811e504ffd82a241c20a00225eff8a7e0b9d
parent2551eb05cb2595b27bb0a3626ece533042e06d82 (diff)
downloadydb-9e4e82616cb855b6e6c487c3fe3c5aa138f51f62.tar.gz
wait tiering ready for usage
-rw-r--r--ydb/core/testlib/common_helper.cpp2
-rw-r--r--ydb/core/tx/columnshard/columnshard.cpp7
-rw-r--r--ydb/core/tx/columnshard/columnshard_impl.cpp10
-rw-r--r--ydb/core/tx/columnshard/columnshard_impl.h5
-rw-r--r--ydb/core/tx/columnshard/ut_columnshard_schema.cpp11
-rw-r--r--ydb/core/tx/tiering/common.h5
-rw-r--r--ydb/core/tx/tiering/manager.cpp4
-rw-r--r--ydb/core/tx/tiering/manager.h1
-rw-r--r--ydb/core/tx/tiering/ut/ut_tiers.cpp2
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);