aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhcpp <hcpp@ydb.tech>2023-10-20 13:10:52 +0300
committerhcpp <hcpp@ydb.tech>2023-10-20 13:57:36 +0300
commit2d0d384d7d5e471f0981cc6ae8b1703e9d03807c (patch)
treec87b9e44651a188758a8a14ddd2600e2fdde7469
parenta01b56c670ad27264e82d324860bfcd23a0a8ed6 (diff)
downloadydb-2d0d384d7d5e471f0981cc6ae8b1703e9d03807c.tar.gz
created_at and last_access_at columns have been added for compute_database column
-rw-r--r--ydb/core/fq/libs/compute/ydb/control_plane/compute_database_control_plane_service.cpp4
-rw-r--r--ydb/core/fq/libs/control_plane_storage/events/events.h1
-rw-r--r--ydb/core/fq/libs/control_plane_storage/schema.h3
-rw-r--r--ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage.cpp2
-rw-r--r--ydb/core/fq/libs/control_plane_storage/ydb_control_plane_storage_compute_database.cpp40
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(