diff --git a/ydb/core/client/flat_ut.cpp b/ydb/core/client/flat_ut.cpp index 4f8c3031ac0f..ed39c8336945 100644 --- a/ydb/core/client/flat_ut.cpp +++ b/ydb/core/client/flat_ut.cpp @@ -2950,7 +2950,8 @@ Y_UNIT_TEST_SUITE(TFlatTest) { UNIT_ASSERT_VALUES_EQUAL(partitions.size(), 1); // Force stats reporting without delays - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); + cleverServer.GetRuntime()->GetAppData() + .DataShardConfig.SetStatsReportIntervalSeconds(0); cleverServer.GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_DEBUG); // cleverServer.GetRuntime()->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_DEBUG); @@ -3123,7 +3124,8 @@ Y_UNIT_TEST_SUITE(TFlatTest) { UNIT_ASSERT_VALUES_EQUAL(partitions.size(), 4); // Force stats reporting without delays - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); + cleverServer.GetRuntime()->GetAppData() + .DataShardConfig.SetStatsReportIntervalSeconds(0); cleverServer.GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_DEBUG); // cleverServer.GetRuntime()->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_DEBUG); @@ -3229,7 +3231,8 @@ Y_UNIT_TEST_SUITE(TFlatTest) { TVector initialPartitions = annoyingClient.GetTablePartitions("/dc-1/Dir/T1"); // Force stats reporting without delays - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); + cleverServer.GetRuntime()->GetAppData() + .DataShardConfig.SetStatsReportIntervalSeconds(0); NDataShard::gDbStatsDataSizeResolution = 80000; TString bigValue(100*1024, '0'); diff --git a/ydb/core/protos/datashard_config.proto b/ydb/core/protos/datashard_config.proto index 940acaa2ca31..6f2abd9284b4 100644 --- a/ydb/core/protos/datashard_config.proto +++ b/ydb/core/protos/datashard_config.proto @@ -21,4 +21,6 @@ message TDataShardConfig { optional string CdcInitialScanTaskName = 17 [default = "cdc_initial_scan"]; optional uint32 CdcInitialScanTaskPriority = 18 [default = 10]; optional bool DisabledOnSchemeShard = 19 [default = false]; + optional uint32 StatsReportIntervalSeconds = 25 [default = 10]; + optional uint32 BackupTableStatsReportIntervalSeconds = 26 [default = 30]; } diff --git a/ydb/core/sys_view/ut_common.cpp b/ydb/core/sys_view/ut_common.cpp index 868d1912b0f4..927ef569efbd 100644 --- a/ydb/core/sys_view/ut_common.cpp +++ b/ydb/core/sys_view/ut_common.cpp @@ -26,7 +26,10 @@ NKikimrSubDomains::TSubDomainSettings GetSubDomainDefaultSettings(const TString return subdomain; } -TTestEnv::TTestEnv(ui32 staticNodes, ui32 dynamicNodes, ui32 storagePools, ui32 pqTabletsN, bool enableSVP, bool disableSources) { +TTestEnv::TTestEnv( + ui32 staticNodes, ui32 dynamicNodes, ui32 storagePools, + ui32 pqTabletsN, bool enableSVP, bool disableSources, + std::optional dataShardStatsReportIntervalSeconds) { auto mbusPort = PortManager.GetPort(); auto grpcPort = PortManager.GetPort(); @@ -56,6 +59,11 @@ TTestEnv::TTestEnv(ui32 staticNodes, ui32 dynamicNodes, ui32 storagePools, ui32 Settings->AppConfig->MutableTableServiceConfig()->SetEnableKqpDataQuerySourceRead(!disableSources); Settings->AppConfig->MutableHiveConfig()->AddBalancerIgnoreTabletTypes(NKikimrTabletBase::TTabletTypes::SysViewProcessor); + if (dataShardStatsReportIntervalSeconds) { + Settings->AppConfig->MutableDataShardConfig() + ->SetStatsReportIntervalSeconds(*dataShardStatsReportIntervalSeconds); + } + Server = new Tests::TServer(*Settings); Server->EnableGRpc(grpcPort); diff --git a/ydb/core/sys_view/ut_common.h b/ydb/core/sys_view/ut_common.h index c921d32c209f..81f9621bf95d 100644 --- a/ydb/core/sys_view/ut_common.h +++ b/ydb/core/sys_view/ut_common.h @@ -23,7 +23,8 @@ class TTestEnv { public: TTestEnv(ui32 staticNodes = 1, ui32 dynamicNodes = 4, ui32 storagePools = 0, - ui32 pqTabletsN = 0, bool enableSVP = false, bool disableSources = false); + ui32 pqTabletsN = 0, bool enableSVP = false, bool disableSources = false, + std::optional dataShardStatsReportIntervalSeconds = std::nullopt); template TTestEnv(TDisableSourcesTag, Args&&... args) diff --git a/ydb/core/sys_view/ut_kqp.cpp b/ydb/core/sys_view/ut_kqp.cpp index d418c3667e6f..69b5f3f0a7aa 100644 --- a/ydb/core/sys_view/ut_kqp.cpp +++ b/ydb/core/sys_view/ut_kqp.cpp @@ -717,11 +717,9 @@ Y_UNIT_TEST_SUITE(SystemView) { } Y_UNIT_TEST(PartitionStatsFields) { - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); - auto nowUs = TInstant::Now().MicroSeconds(); - TTestEnv env; + TTestEnv env(1, 4, 0, 0, false, false, 0); CreateRootTable(env); TTableClient client(env.GetDriver()); @@ -1210,11 +1208,9 @@ Y_UNIT_TEST_SUITE(SystemView) { } Y_UNIT_TEST(TopPartitionsFields) { - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); - auto nowUs = TInstant::Now().MicroSeconds(); - TTestEnv env(1, 4, 0, 0, true); + TTestEnv env(1, 4, 0, 0, true, false, 0); CreateTenantsAndTables(env); TTableClient client(env.GetDriver()); @@ -1262,11 +1258,9 @@ Y_UNIT_TEST_SUITE(SystemView) { } Y_UNIT_TEST(TopPartitionsTables) { - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); - constexpr ui64 partitionCount = 5; - TTestEnv env(1, 4, 0, 0, true); + TTestEnv env(1, 4, 0, 0, true, false, 0); CreateTenantsAndTables(env, true, partitionCount); TTableClient client(env.GetDriver()); @@ -1292,11 +1286,9 @@ Y_UNIT_TEST_SUITE(SystemView) { } Y_UNIT_TEST(TopPartitionsRanges) { - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); - constexpr ui64 partitionCount = 5; - TTestEnv env(1, 4, 0, 0, true); + TTestEnv env(1, 4, 0, 0, true, false, 0); CreateTenantsAndTables(env, true, partitionCount); TTableClient client(env.GetDriver()); diff --git a/ydb/core/testlib/test_client.cpp b/ydb/core/testlib/test_client.cpp index db2c2f5d3729..01b105be3b3c 100644 --- a/ydb/core/testlib/test_client.cpp +++ b/ydb/core/testlib/test_client.cpp @@ -252,6 +252,7 @@ namespace Tests { appData.DataStreamsAuthFactory = Settings->DataStreamsAuthFactory.get(); appData.PersQueueMirrorReaderFactory = Settings->PersQueueMirrorReaderFactory.get(); appData.HiveConfig.MergeFrom(Settings->AppConfig->GetHiveConfig()); + appData.DataShardConfig.MergeFrom(Settings->AppConfig->GetDataShardConfig()); appData.GraphConfig.MergeFrom(Settings->AppConfig->GetGraphConfig()); appData.SqsConfig.MergeFrom(Settings->AppConfig->GetSqsConfig()); diff --git a/ydb/core/tx/datashard/datashard.cpp b/ydb/core/tx/datashard/datashard.cpp index 58a66fab1b0c..4296aba32f41 100644 --- a/ydb/core/tx/datashard/datashard.cpp +++ b/ydb/core/tx/datashard/datashard.cpp @@ -34,7 +34,6 @@ using namespace NTabletFlatExecutor; // But in unit tests we want to test both scenarios bool gAllowLogBatchingDefaultValue = true; -TDuration gDbStatsReportInterval = TDuration::Seconds(10); ui64 gDbStatsDataSizeResolution = 10*1024*1024; ui64 gDbStatsRowCountResolution = 100000; ui32 gDbStatsHistogramBucketsCount = 10; diff --git a/ydb/core/tx/datashard/datashard.h b/ydb/core/tx/datashard/datashard.h index 0d684b2e2a54..8a0688c952c1 100644 --- a/ydb/core/tx/datashard/datashard.h +++ b/ydb/core/tx/datashard/datashard.h @@ -148,7 +148,6 @@ namespace NDataShard { // NOTE: this switch should be modified only in tests !!! extern bool gAllowLogBatchingDefaultValue; - extern TDuration gDbStatsReportInterval; extern ui64 gDbStatsDataSizeResolution; extern ui64 gDbStatsRowCountResolution; extern ui32 gDbStatsHistogramBucketsCount; diff --git a/ydb/core/tx/datashard/datashard__stats.cpp b/ydb/core/tx/datashard/datashard__stats.cpp index da9a4d956cce..7f5005204f0a 100644 --- a/ydb/core/tx/datashard/datashard__stats.cpp +++ b/ydb/core/tx/datashard/datashard__stats.cpp @@ -597,13 +597,31 @@ class TDataShard::TTxInitiateStatsUpdate : public NTabletFlatExecutor::TTransact } }; +TDuration TDataShard::GetStatsReportInterval(const TAppData& appData) const { + const auto& userTables = GetUserTables(); + const bool isBackup = !userTables.empty() && std::all_of(userTables.begin(), userTables.end(), + [](const auto& kv) { return kv.second->IsBackup; }); + + if (isBackup) { + // Clamp the interval for backup tables to the value for ordinary tables, as it + // makes no sense for the latter to be longer than the former. + auto interval = std::max( + appData.DataShardConfig.GetBackupTableStatsReportIntervalSeconds(), + appData.DataShardConfig.GetStatsReportIntervalSeconds()); + return TDuration::Seconds(interval); + } else { + return TDuration::Seconds(appData.DataShardConfig.GetStatsReportIntervalSeconds()); + } +} + void TDataShard::UpdateTableStats(const TActorContext &ctx) { if (StatisticsDisabled) return; - TInstant now = AppData(ctx)->TimeProvider->Now(); + auto* appData = AppData(ctx); + TInstant now = appData->TimeProvider->Now(); - if (LastDbStatsUpdateTime + gDbStatsReportInterval > now) + if (LastDbStatsUpdateTime + GetStatsReportInterval(*appData) > now) return; if (State != TShardState::Ready) diff --git a/ydb/core/tx/datashard/datashard_impl.h b/ydb/core/tx/datashard/datashard_impl.h index 5df4ebfde73a..cfa1043a2d10 100644 --- a/ydb/core/tx/datashard/datashard_impl.h +++ b/ydb/core/tx/datashard/datashard_impl.h @@ -3209,13 +3209,16 @@ class TDataShard NTabletPipe::SendData(ctx, StateReportPipe, ev.Release()); } + TDuration GetStatsReportInterval(const TAppData&) const; + void SendPeriodicTableStats(const TActorContext &ctx) { if (StatisticsDisabled) return; - TInstant now = AppData(ctx)->TimeProvider->Now(); + auto* appData = AppData(ctx); + TInstant now = appData->TimeProvider->Now(); - if (LastDbStatsReportTime + gDbStatsReportInterval > now) + if (LastDbStatsReportTime + GetStatsReportInterval(*appData) > now) return; auto* resourceMetrics = Executor()->GetResourceMetrics(); diff --git a/ydb/core/tx/datashard/datashard_ut_stats.cpp b/ydb/core/tx/datashard/datashard_ut_stats.cpp index 49e057336d9b..af4663c30e2b 100644 --- a/ydb/core/tx/datashard/datashard_ut_stats.cpp +++ b/ydb/core/tx/datashard/datashard_ut_stats.cpp @@ -388,6 +388,8 @@ Y_UNIT_TEST_SUITE(DataShardStats) { TServerSettings serverSettings(pm.GetPort(2134)); serverSettings.SetDomainName("Root") .SetUseRealThreads(false); + serverSettings.AppConfig->MutableDataShardConfig() + ->SetStatsReportIntervalSeconds(0); TServer::TPtr server = new TServer(serverSettings); auto& runtime = *server->GetRuntime(); @@ -399,8 +401,6 @@ Y_UNIT_TEST_SUITE(DataShardStats) { InitRoot(server, sender); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); - NLocalDb::TCompactionPolicyPtr policy = NLocalDb::CreateDefaultUserTablePolicy(); policy->InMemForceStepsToSnapshot = 1; @@ -696,6 +696,47 @@ Y_UNIT_TEST_SUITE(DataShardStats) { WaitTableStats(runtime, shard1, DoesNotHaveSchemaChangesCondition()); } + Y_UNIT_TEST(BackupTableStatsReportInterval) { + TPortManager pm; + TServerSettings serverSettings(pm.GetPort(2134)); + serverSettings.SetDomainName("Root") + .SetUseRealThreads(false); + + TServer::TPtr server = new TServer(serverSettings); + auto& runtime = *server->GetRuntime(); + auto sender = runtime.AllocateEdgeActor(); + + runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_TRACE); + + InitRoot(server, sender); + + auto [shards, tableId1] = CreateShardedTable(server, sender, "/Root", "table-1", 1); + + // Create a backup copy table + { + auto senderCopy = runtime.AllocateEdgeActor(); + ui64 txId = AsyncCreateCopyTable( + server, senderCopy, "/Root", "table-2", "/Root/table-1", /*isBackup=*/true); + WaitTxNotification(server, senderCopy, txId); + } + auto tableId2 = ResolveTableId(server, sender, "/Root/table-2"); + + std::unordered_map tableToStatsCount; + auto observerFunc = [&](auto& ev) { + const NKikimrTxDataShard::TEvPeriodicTableStats& record = ev->Get()->Record; + ++tableToStatsCount[record.GetTableLocalId()]; + }; + auto observer = runtime.AddObserver(observerFunc); + + runtime.WaitFor("First stats event", [&]{ return !tableToStatsCount.empty(); }); + runtime.SimulateSleep(TDuration::Seconds(45)); + // Once every 10 seconds + UNIT_ASSERT_GE(tableToStatsCount[tableId1.PathId.LocalPathId], 4); + UNIT_ASSERT_LE(tableToStatsCount[tableId1.PathId.LocalPathId], 5); + // Once every 30 seconds + UNIT_ASSERT_GE(tableToStatsCount[tableId2.PathId.LocalPathId], 1); + UNIT_ASSERT_LE(tableToStatsCount[tableId2.PathId.LocalPathId], 2); + } } } diff --git a/ydb/core/tx/datashard/ut_common/datashard_ut_common.cpp b/ydb/core/tx/datashard/ut_common/datashard_ut_common.cpp index 9d9e4a6352ef..ff5b41ec6347 100644 --- a/ydb/core/tx/datashard/ut_common/datashard_ut_common.cpp +++ b/ydb/core/tx/datashard/ut_common/datashard_ut_common.cpp @@ -1254,12 +1254,14 @@ ui64 AsyncCreateCopyTable( TActorId sender, const TString &root, const TString &name, - const TString &from) + const TString &from, + bool isBackup) { auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpCreateTable, root); auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableCreateTable(); desc.SetName(name); desc.SetCopyFromTable(from); + desc.SetIsBackup(isBackup); return RunSchemeTx(*server->GetRuntime(), std::move(request), sender); } diff --git a/ydb/core/tx/datashard/ut_common/datashard_ut_common.h b/ydb/core/tx/datashard/ut_common/datashard_ut_common.h index e50bdbc955eb..0249b52d9c3d 100644 --- a/ydb/core/tx/datashard/ut_common/datashard_ut_common.h +++ b/ydb/core/tx/datashard/ut_common/datashard_ut_common.h @@ -527,7 +527,8 @@ ui64 AsyncCreateCopyTable(Tests::TServer::TPtr server, TActorId sender, const TString &root, const TString &name, - const TString &from); + const TString &from, + bool isBackup = false); NKikimrTxDataShard::TEvCompactTableResult CompactTable( TTestActorRuntime& runtime, ui64 shardId, const TTableId& tableId, bool compactBorrowed = false); diff --git a/ydb/core/tx/schemeshard/ut_base/ut_base.cpp b/ydb/core/tx/schemeshard/ut_base/ut_base.cpp index ea859b54bf56..157f2ea182d1 100644 --- a/ydb/core/tx/schemeshard/ut_base/ut_base.cpp +++ b/ydb/core/tx/schemeshard/ut_base/ut_base.cpp @@ -10568,12 +10568,12 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) { TTestEnvOptions opts; opts.EnableBackgroundCompaction(false); + opts.DataShardStatsReportIntervalSeconds(1); TTestEnv env(runtime, opts); ui64 txId = 100; - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; diff --git a/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp b/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp index f5884ec8433b..0f83aa5e7e88 100644 --- a/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp +++ b/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp @@ -768,12 +768,14 @@ Y_UNIT_TEST_SUITE(TSchemeshardBorrowedCompactionTest) { // 1. Copy table is not compacted until we want to split it // 2. After borrow compaction both src and dst tables are background compacted - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; + TTestEnvOptions opts; + opts.DataShardStatsReportIntervalSeconds(1); + TTestBasicRuntime runtime; - TTestEnv env(runtime); + TTestEnv env(runtime, opts); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_DEBUG); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_TRACE); @@ -899,12 +901,14 @@ Y_UNIT_TEST_SUITE(TSchemeshardBorrowedCompactionTest) { // I.e. we compact borrowed data ASAP except copy table case, when // we don't want to compact at all. - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; + TTestEnvOptions opts; + opts.DataShardStatsReportIntervalSeconds(1); + TTestBasicRuntime runtime; - TTestEnv env(runtime); + TTestEnv env(runtime, opts); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_DEBUG); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_TRACE); @@ -973,12 +977,14 @@ Y_UNIT_TEST_SUITE(TSchemeshardBorrowedCompactionTest) { Y_UNIT_TEST(SchemeshardShouldNotCompactBorrowedAfterSplitMergeWhenDisabled) { - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; + TTestEnvOptions opts; + opts.DataShardStatsReportIntervalSeconds(1); + TTestBasicRuntime runtime; - TTestEnv env(runtime); + TTestEnv env(runtime, opts); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_DEBUG); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_TRACE); diff --git a/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp b/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp index 92b0f22fda85..759d9e9e6e49 100644 --- a/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp +++ b/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp @@ -580,6 +580,11 @@ NSchemeShardUT_Private::TTestEnv::TTestEnv(TTestActorRuntime& runtime, const TTe app.AddSystemBackupSID(sid); } + if (opts.DataShardStatsReportIntervalSeconds_) { + app.DataShardConfig.SetStatsReportIntervalSeconds( + *opts.DataShardStatsReportIntervalSeconds_); + } + AddDomain(runtime, app, TTestTxConfig::DomainUid, hive, schemeRoot); SetupLogging(runtime); diff --git a/ydb/core/tx/schemeshard/ut_helpers/test_env.h b/ydb/core/tx/schemeshard/ut_helpers/test_env.h index 86af3d991335..68135e4d59ea 100644 --- a/ydb/core/tx/schemeshard/ut_helpers/test_env.h +++ b/ydb/core/tx/schemeshard/ut_helpers/test_env.h @@ -68,6 +68,7 @@ namespace NSchemeShardUT_Private { OPTION(std::optional, EnableChangefeedsOnIndexTables, std::nullopt); OPTION(std::optional, EnableTieringInColumnShard, std::nullopt); OPTION(std::optional, EnableParameterizedDecimal, std::nullopt); + OPTION(std::optional, DataShardStatsReportIntervalSeconds, std::nullopt); #undef OPTION }; diff --git a/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp b/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp index ef83b89235a3..d1c06976ef87 100644 --- a/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp +++ b/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp @@ -446,7 +446,7 @@ Y_UNIT_TEST_SUITE(IndexBuildTest) { NLs::PathVersionEqual(3)}); // Force stats reporting without delays - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); + runtime.GetAppData().DataShardConfig.SetStatsReportIntervalSeconds(0); NDataShard::gDbStatsDataSizeResolution = 80000; auto upgradeEvent = [&](TAutoPtr& ev) -> auto { @@ -768,10 +768,9 @@ Y_UNIT_TEST_SUITE(IndexBuildTest) { TTestEnvOptions opts; opts.EnableBackgroundCompaction(false); opts.DisableStatsBatching(true); + opts.DataShardStatsReportIntervalSeconds(0); TTestEnv env(runtime, opts); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); - ui64 txId = 100; TestCreateTable(runtime, ++txId, "/MyRoot", R"( diff --git a/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp b/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp index c3db0f92f4a4..bbf3616db49d 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp +++ b/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp @@ -118,12 +118,12 @@ Y_UNIT_TEST_SUITE(TSchemeShardSplitBySizeTest) { TTestEnvOptions opts; opts.EnableBackgroundCompaction(false); + opts.DataShardStatsReportIntervalSeconds(1); TTestEnv env(runtime, opts); ui64 txId = 100; - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; @@ -211,12 +211,12 @@ Y_UNIT_TEST_SUITE(TSchemeShardSplitBySizeTest) { TTestEnvOptions opts; opts.EnableBackgroundCompaction(false); opts.EnableTablePgTypes(true); + opts.DataShardStatsReportIntervalSeconds(1); TTestEnv env(runtime, opts); ui64 txId = 100; - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; @@ -285,14 +285,13 @@ Y_UNIT_TEST_SUITE(TSchemeShardSplitBySizeTest) { TTestEnvOptions opts; opts.EnableBackgroundCompaction(false); opts.DisableStatsBatching(true); + opts.DataShardStatsReportIntervalSeconds(0); TTestEnv env(runtime, opts); ui64 txId = 100; runtime.SetDispatchedEventsLimit(10'000'000); - NDataShard::gDbStatsReportInterval = TDuration::MilliSeconds(1); - //runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_CRIT); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NActors::NLog::PRI_CRIT); @@ -785,10 +784,10 @@ struct TLoadAndSplitSimulator { TTestEnv SetupEnv(TTestBasicRuntime &runtime) { TTestEnvOptions opts; opts.EnableBackgroundCompaction(false); + opts.DataShardStatsReportIntervalSeconds(0); TTestEnv env(runtime, opts); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; diff --git a/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp b/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp index bd90a89af237..da150823835a 100644 --- a/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp +++ b/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp @@ -163,13 +163,13 @@ TTableId ResolveTableId(TTestActorRuntime& runtime, const TString& path) { Y_UNIT_TEST_SUITE(TSchemeshardStatsBatchingTest) { Y_UNIT_TEST(ShouldNotBatchWhenDisabled) { TTestBasicRuntime runtime; - TTestEnv env(runtime); + TTestEnvOptions opts; + opts.DataShardStatsReportIntervalSeconds(1); + TTestEnv env(runtime, opts); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_TRACE); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_TRACE); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); - auto& appData = runtime.GetAppData(); appData.FeatureFlags.SetEnablePersistentPartitionStats(true); @@ -198,12 +198,13 @@ Y_UNIT_TEST_SUITE(TSchemeshardStatsBatchingTest) { Y_UNIT_TEST(ShouldPersistByBatchSize) { TTestBasicRuntime runtime; - TTestEnv env(runtime); + TTestEnvOptions opts; + opts.DataShardStatsReportIntervalSeconds(1); + TTestEnv env(runtime, opts); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_TRACE); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_TRACE); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); const ui32 batchSize = 2; auto& appData = runtime.GetAppData(); @@ -259,12 +260,13 @@ Y_UNIT_TEST_SUITE(TSchemeshardStatsBatchingTest) { Y_UNIT_TEST(ShouldPersistByBatchTimeout) { TTestBasicRuntime runtime; - TTestEnv env(runtime); + TTestEnvOptions opts; + opts.DataShardStatsReportIntervalSeconds(1); + TTestEnv env(runtime, opts); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_TRACE); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_TRACE); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(1); TDuration dsWakeupInterval = TDuration::Seconds(5); // hardcoded in DS TDuration batchTimeout = dsWakeupInterval; @@ -603,9 +605,9 @@ Y_UNIT_TEST_SUITE(TStoragePoolsStatsPersistence) { opts.DisableStatsBatching(true); opts.EnablePersistentPartitionStats(true); opts.EnableBackgroundCompaction(false); + opts.DataShardStatsReportIntervalSeconds(0); TTestEnv env(runtime, opts); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); NDataShard::gDbStatsDataSizeResolution = 1; NDataShard::gDbStatsRowCountResolution = 1; diff --git a/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp b/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp index 8fc34d9edbe0..38c7346379bf 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp +++ b/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp @@ -3520,9 +3520,9 @@ Y_UNIT_TEST_SUITE(TStoragePoolsQuotasTest) { opts.DisableStatsBatching(true); opts.EnablePersistentPartitionStats(true); opts.EnableBackgroundCompaction(false); + opts.DataShardStatsReportIntervalSeconds(0); TTestEnv env(runtime, opts); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); NDataShard::gDbStatsDataSizeResolution = 1; NDataShard::gDbStatsRowCountResolution = 1; @@ -3691,10 +3691,10 @@ Y_UNIT_TEST_SUITE(TStoragePoolsQuotasTest) { opts.DisableStatsBatching(true); opts.EnablePersistentPartitionStats(true); opts.EnableBackgroundCompaction(false); + opts.DataShardStatsReportIntervalSeconds(0); TTestEnv env(runtime, opts); bool bTreeIndex = runtime.GetAppData().FeatureFlags.GetEnableLocalDBBtreeIndex(); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); NDataShard::gDbStatsDataSizeResolution = 1; NDataShard::gDbStatsRowCountResolution = 1; diff --git a/ydb/services/ydb/ydb_table_split_ut.cpp b/ydb/services/ydb/ydb_table_split_ut.cpp index 5a498fc28957..8e155102af0f 100644 --- a/ydb/services/ydb/ydb_table_split_ut.cpp +++ b/ydb/services/ydb/ydb_table_split_ut.cpp @@ -144,7 +144,7 @@ Y_UNIT_TEST_SUITE(YdbTableSplit) { Cerr << "Table has " << shardsBefore << " shards" << Endl; UNIT_ASSERT_VALUES_EQUAL(shardsBefore, 1); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); + server.Server_->GetRuntime()->GetAppData().DataShardConfig.SetStatsReportIntervalSeconds(0); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_INFO); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::TX_DATASHARD, NActors::NLog::PRI_INFO); @@ -282,7 +282,7 @@ Y_UNIT_TEST_SUITE(YdbTableSplit) { Cerr << "Table has " << shardsBefore << " shards" << Endl; UNIT_ASSERT_VALUES_EQUAL(shardsBefore, 1); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); + server.Server_->GetRuntime()->GetAppData().DataShardConfig.SetStatsReportIntervalSeconds(0); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_INFO); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::TX_DATASHARD, NActors::NLog::PRI_INFO); @@ -429,7 +429,6 @@ Y_UNIT_TEST_SUITE(YdbTableSplit) { Y_UNIT_TEST(RenameTablesAndSplit) { // KIKIMR-14636 - NDataShard::gDbStatsReportInterval = TDuration::Seconds(2); NDataShard::gDbStatsDataSizeResolution = 10; NDataShard::gDbStatsRowCountResolution = 10; @@ -437,7 +436,10 @@ Y_UNIT_TEST_SUITE(YdbTableSplit) { TIntrusivePtr testTimeProvider = new TTestTimeProvider(originalTimeProvider); NKikimr::TAppData::TimeProvider = testTimeProvider; - TKikimrWithGrpcAndRootSchemaNoSystemViews server; + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableDataShardConfig()->SetStatsReportIntervalSeconds(2); + + TKikimrWithGrpcAndRootSchemaNoSystemViews server(appConfig); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_NOTICE); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::GRPC_SERVER, NActors::NLog::PRI_NOTICE); server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::TX_PROXY, NActors::NLog::PRI_NOTICE); diff --git a/ydb/services/ydb/ydb_ut.cpp b/ydb/services/ydb/ydb_ut.cpp index 5d22d36799e6..1f383ebbc165 100644 --- a/ydb/services/ydb/ydb_ut.cpp +++ b/ydb/services/ydb/ydb_ut.cpp @@ -5697,6 +5697,7 @@ Y_UNIT_TEST(DisableWritesToDatabase) { NKikimrConfig::TAppConfig appConfig; // default table profile with a storage policy is needed to be able to create a table with families *appConfig.MutableTableProfilesConfig() = CreateDefaultTableProfilesConfig(storagePools[0].GetKind()); + appConfig.MutableDataShardConfig()->SetStatsReportIntervalSeconds(0); serverSettings.SetAppConfig(appConfig); TServer::TPtr server = new TServer(serverSettings); @@ -5705,7 +5706,6 @@ Y_UNIT_TEST(DisableWritesToDatabase) { InitRoot(server, sender); runtime.SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NLog::PRI_TRACE); - NDataShard::gDbStatsReportInterval = TDuration::Seconds(0); NDataShard::gDbStatsDataSizeResolution = 1; NDataShard::gDbStatsRowCountResolution = 1;