diff options
author | hcpp <hcpp@ydb.tech> | 2023-10-20 13:10:52 +0300 |
---|---|---|
committer | hcpp <hcpp@ydb.tech> | 2023-10-20 13:57:36 +0300 |
commit | 2d0d384d7d5e471f0981cc6ae8b1703e9d03807c (patch) | |
tree | c87b9e44651a188758a8a14ddd2600e2fdde7469 | |
parent | a01b56c670ad27264e82d324860bfcd23a0a8ed6 (diff) | |
download | ydb-2d0d384d7d5e471f0981cc6ae8b1703e9d03807c.tar.gz |
created_at and last_access_at columns have been added for compute_database column
5 files changed, 47 insertions, 3 deletions
diff --git a/ydb/core/fq/libs/compute/ydb/control_plane/compute_database_control_plane_service.cpp b/ydb/core/fq/libs/compute/ydb/control_plane/compute_database_control_plane_service.cpp index 5fddfad23be..7b074b77b95 100644 --- a/ydb/core/fq/libs/compute/ydb/control_plane/compute_database_control_plane_service.cpp +++ b/ydb/core/fq/libs/compute/ydb/control_plane/compute_database_control_plane_service.cpp @@ -66,6 +66,7 @@ public: hFunc(TEvYdbCompute::TEvCreateDatabaseResponse, Handle); hFunc(TEvControlPlaneStorage::TEvCreateDatabaseResponse, Handle); hFunc(TEvYdbCompute::TEvSynchronizeResponse, Handle); + IgnoreFunc(TEvControlPlaneStorage::TEvModifyDatabaseResponse); ) void Handle(TEvControlPlaneStorage::TEvDescribeDatabaseResponse::TPtr& ev) { @@ -83,6 +84,9 @@ public: } Result = result; + auto lastAccessAtEvent = std::make_unique<TEvControlPlaneStorage::TEvModifyDatabaseRequest>(Request->Get()->CloudId, Request->Get()->Scope); + lastAccessAtEvent->LastAccessAt = TInstant::Now(); + Send(ControlPlaneStorageServiceActorId(), lastAccessAtEvent.release()); Send(SynchronizationServiceActorId, new TEvYdbCompute::TEvSynchronizeRequest{Request.Get()->Get()->CloudId, Request.Get()->Get()->Scope, result.connection()}); } diff --git a/ydb/core/fq/libs/control_plane_storage/events/events.h b/ydb/core/fq/libs/control_plane_storage/events/events.h index b286c61a21c..27e5cd4089a 100644 --- a/ydb/core/fq/libs/control_plane_storage/events/events.h +++ b/ydb/core/fq/libs/control_plane_storage/events/events.h @@ -771,6 +771,7 @@ struct TEvControlPlaneStorage { TString CloudId; TString Scope; TMaybe<bool> Synchronized; + TMaybe<TInstant> LastAccessAt; }; struct TEvModifyDatabaseResponse : NActors::TEventLocal<TEvModifyDatabaseResponse, EvModifyDatabaseResponse> { diff --git a/ydb/core/fq/libs/control_plane_storage/schema.h b/ydb/core/fq/libs/control_plane_storage/schema.h index 5cbcc6b7b7a..a3e52bfeeb9 100644 --- a/ydb/core/fq/libs/control_plane_storage/schema.h +++ b/ydb/core/fq/libs/control_plane_storage/schema.h @@ -88,4 +88,7 @@ namespace NFq { #define STATE_COLUMN_NAME "state" #define STATE_TIME_COLUMN_NAME "state_time" +#define CREATED_AT_COLUMN_NAME "created_at" +#define LAST_ACCESS_AT_COLUMN_NAME "last_access_at" + } // namespace NFq diff --git a/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage.cpp b/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage.cpp index 10e32f5302f..78da9f39630 100644 --- a/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage.cpp +++ b/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage.cpp @@ -311,6 +311,8 @@ void TYdbControlPlaneStorageActor::CreateComputeDatabasesTable() auto description = TTableBuilder() .AddNullableColumn(SCOPE_COLUMN_NAME, EPrimitiveType::String) .AddNullableColumn(INTERNAL_COLUMN_NAME, EPrimitiveType::String) + .AddNullableColumn(CREATED_AT_COLUMN_NAME, EPrimitiveType::Timestamp) + .AddNullableColumn(LAST_ACCESS_AT_COLUMN_NAME, EPrimitiveType::Timestamp) .SetPrimaryKeyColumns({SCOPE_COLUMN_NAME}) .Build(); diff --git a/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage_compute_database.cpp b/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage_compute_database.cpp index 3396e85e142..66ec7842116 100644 --- a/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage_compute_database.cpp +++ b/ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage_compute_database.cpp @@ -31,8 +31,8 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvCreateDatab queryBuilder.AddString("internal", request.SerializeAsString()); queryBuilder.AddText( - "INSERT INTO `" COMPUTE_DATABASES_TABLE_NAME "` (`" SCOPE_COLUMN_NAME "`, `" INTERNAL_COLUMN_NAME "`) VALUES\n" - " ($scope, $internal);" + "INSERT INTO `" COMPUTE_DATABASES_TABLE_NAME "` (`" SCOPE_COLUMN_NAME "`, `" INTERNAL_COLUMN_NAME "`, `" CREATED_AT_COLUMN_NAME "`, `" LAST_ACCESS_AT_COLUMN_NAME"`) VALUES\n" + " ($scope, $internal, CurrentUtcTimestamp(), CurrentUtcTimestamp());" ); const auto query = queryBuilder.Build(); @@ -128,7 +128,41 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvModifyDatab CPS_LOG_T(MakeLogPrefix(scope, "internal", scope) << "ModifyDatabaseRequest"); - + + // only write part + if (event.LastAccessAt) { + TSqlQueryBuilder writeQueryBuilder(YdbConnection->TablePathPrefix, "ModifyDatabase(write)"); + writeQueryBuilder.AddTimestamp("last_access_at", *event.LastAccessAt); + writeQueryBuilder.AddString("scope", scope); + writeQueryBuilder.AddText( + "UPSERT INTO `" COMPUTE_DATABASES_TABLE_NAME "` (`" SCOPE_COLUMN_NAME "`, `" LAST_ACCESS_AT_COLUMN_NAME "`)\n" + "VALUES ($scope, $last_access_at);" + ); + const auto writeQuery = writeQueryBuilder.Build(); + auto debugInfo = Config->Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; + auto result = Write(writeQuery.Sql, writeQuery.Params, requestCounters, debugInfo); + + auto prepare = [] { return std::make_tuple<NYql::TIssues>(NYql::TIssues{}); }; + auto success = SendResponseTuple<TEvControlPlaneStorage::TEvModifyDatabaseResponse, std::tuple<NYql::TIssues>>( + MakeLogPrefix(scope, "internal", scope) + "ModifyDatabaseRequest", + NActors::TActivationContext::ActorSystem(), + result, + SelfId(), + ev, + startTime, + requestCounters, + prepare, + debugInfo); + + success.Apply([=](const auto& future) { + TDuration delta = TInstant::Now() - startTime; + LWPROBE(ModifyDatabaseRequest, scope, "internal", delta, byteSize, future.GetValue()); + }); + + return; + } + + // read write part TSqlQueryBuilder queryBuilder(YdbConnection->TablePathPrefix, "ModifyDatabase"); queryBuilder.AddString("scope", scope); queryBuilder.AddText( |