Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions ydb/core/client/flat_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2627,7 +2627,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);
Expand Down Expand Up @@ -2800,7 +2801,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);
Expand Down Expand Up @@ -2906,7 +2908,8 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
TVector<ui64> 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');
Expand Down
2 changes: 2 additions & 0 deletions ydb/core/protos/datashard_config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@ message TDataShardConfig {
optional uint64 IncrementalRestoreReadAheadLo = 20 [default = 524288];
optional uint64 IncrementalRestoreReadAheadHi = 21 [default = 1048576];
optional uint64 InMemoryStateMigrationTimeoutMs = 24 [default = 1000];
optional uint32 StatsReportIntervalSeconds = 25 [default = 10];
optional uint32 BackupTableStatsReportIntervalSeconds = 26 [default = 30];
}
5 changes: 5 additions & 0 deletions ydb/core/sys_view/ut_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ TTestEnv::TTestEnv(ui32 staticNodes, ui32 dynamicNodes, const TTestEnvSettings&

Settings->AppConfig->MutableHiveConfig()->AddBalancerIgnoreTabletTypes(NKikimrTabletBase::TTabletTypes::SysViewProcessor);

if (settings.DataShardStatsReportIntervalSeconds) {
Settings->AppConfig->MutableDataShardConfig()
->SetStatsReportIntervalSeconds(*settings.DataShardStatsReportIntervalSeconds);
}

Server = new Tests::TServer(*Settings);
Server->EnableGRpc(grpcPort);

Expand Down
1 change: 1 addition & 0 deletions ydb/core/sys_view/ut_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ struct TTestEnvSettings {
bool EnableOlapCompression = false;
TMaybe<bool> EnableRealSystemViewPaths;
NKikimrProto::TAuthConfig AuthConfig = {};
TMaybe<ui32> DataShardStatsReportIntervalSeconds;
};

class TTestEnv {
Expand Down
32 changes: 11 additions & 21 deletions ydb/core/sys_view/ut_kqp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2704,9 +2704,7 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(PartitionStatsLocksFields) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

TTestEnv env;
TTestEnv env({.DataShardStatsReportIntervalSeconds = 0});
CreateRootTable(env, /* partitionCount */ 1, /* fillTable */ true);

TTableClient client(env.GetDriver());
Expand Down Expand Up @@ -2734,11 +2732,9 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(PartitionStatsFields) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

auto nowUs = TInstant::Now().MicroSeconds();

TTestEnv env;
TTestEnv env({.DataShardStatsReportIntervalSeconds = 0});
CreateRootTable(env);
const auto describeResult = env.GetClient().Describe(env.GetServer().GetRuntime(), "Root/Table0");
const auto tablePathId = describeResult.GetPathId();
Expand Down Expand Up @@ -3229,11 +3225,9 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(TopPartitionsByCpuFields) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

auto nowUs = TInstant::Now().MicroSeconds();

TTestEnv env(1, 4, {.EnableSVP = true});
TTestEnv env(1, 4, {.EnableSVP = true, .DataShardStatsReportIntervalSeconds = 0});
CreateTenantsAndTables(env);

TTableClient client(env.GetDriver());
Expand Down Expand Up @@ -3281,11 +3275,9 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(TopPartitionsByCpuTables) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

constexpr ui64 partitionCount = 5;

TTestEnv env(1, 4, {.EnableSVP = true});
TTestEnv env(1, 4, {.EnableSVP = true, .DataShardStatsReportIntervalSeconds = 0});
CreateTenantsAndTables(env, true, partitionCount);

TTableClient client(env.GetDriver());
Expand All @@ -3311,11 +3303,9 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(TopPartitionsByCpuRanges) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

constexpr ui64 partitionCount = 5;

TTestEnv env(1, 4, {.EnableSVP = true});
TTestEnv env(1, 4, {.EnableSVP = true, .DataShardStatsReportIntervalSeconds = 0});
CreateTenantsAndTables(env, true, partitionCount);

TTableClient client(env.GetDriver());
Expand Down Expand Up @@ -3392,11 +3382,13 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(TopPartitionsByCpuFollowers) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

auto nowUs = TInstant::Now().MicroSeconds();

TTestEnv env(1, 4, {.EnableSVP = true, .EnableForceFollowers = true});
TTestEnv env(1, 4, {
.EnableSVP = true,
.EnableForceFollowers = true,
.DataShardStatsReportIntervalSeconds = 0,
});

auto& runtime = *env.GetServer().GetRuntime();
runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_TRACE);
Expand Down Expand Up @@ -3567,9 +3559,7 @@ ALTER OBJECT `/Root/test_show_create` (TYPE TABLE) SET (ACTION = UPSERT_OPTIONS,
}

Y_UNIT_TEST(TopPartitionsByTliFields) {
NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

TTestEnv env(1, 4, {.EnableSVP = true});
TTestEnv env(1, 4, {.EnableSVP = true, .DataShardStatsReportIntervalSeconds = 0});
CreateTenantsAndTables(env);

TTableClient client(env.GetDriver());
Expand Down
1 change: 1 addition & 0 deletions ydb/core/testlib/test_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,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());
appData.SharedCacheConfig.MergeFrom(Settings->AppConfig->GetSharedCacheConfig());
Expand Down
1 change: 0 additions & 1 deletion ydb/core/tx/datashard/datashard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,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;
Expand Down
1 change: 0 additions & 1 deletion ydb/core/tx/datashard/datashard.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,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;
Expand Down
22 changes: 20 additions & 2 deletions ydb/core/tx/datashard/datashard__stats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -596,13 +596,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 && State != TShardState::Readonly)
Expand Down
7 changes: 5 additions & 2 deletions ydb/core/tx/datashard/datashard_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -3334,13 +3334,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();
Expand Down
45 changes: 43 additions & 2 deletions ydb/core/tx/datashard/datashard_ut_stats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,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();
Expand All @@ -402,8 +404,6 @@ Y_UNIT_TEST_SUITE(DataShardStats) {

InitRoot(server, sender);

NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);

NLocalDb::TCompactionPolicyPtr policy = NLocalDb::CreateDefaultUserTablePolicy();
policy->InMemForceStepsToSnapshot = 1;

Expand Down Expand Up @@ -834,6 +834,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<TLocalPathId, size_t> tableToStatsCount;
auto observerFunc = [&](auto& ev) {
const NKikimrTxDataShard::TEvPeriodicTableStats& record = ev->Get()->Record;
++tableToStatsCount[record.GetTableLocalId()];
};
auto observer = runtime.AddObserver<TEvDataShard::TEvPeriodicTableStats>(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);
}
}

}
4 changes: 3 additions & 1 deletion ydb/core/tx/datashard/ut_common/datashard_ut_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1319,12 +1319,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);
}
Expand Down
3 changes: 2 additions & 1 deletion ydb/core/tx/datashard/ut_common/datashard_ut_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,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);
Expand Down
2 changes: 1 addition & 1 deletion ydb/core/tx/schemeshard/ut_base/ut_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10900,12 +10900,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;

Expand Down
18 changes: 12 additions & 6 deletions ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -771,12 +771,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);
Expand Down Expand Up @@ -902,12 +904,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);
Expand Down Expand Up @@ -976,12 +980,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);
Expand Down
5 changes: 5 additions & 0 deletions ydb/core/tx/schemeshard/ut_helpers/test_env.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,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, opts.NStoragePools_);

SetupLogging(runtime);
Expand Down
Loading
Loading