|
@@ -18,13 +18,13 @@ bool IsFinishedStatus(YandexQuery::QueryMeta::ComputeStatus status) {
|
|
|
} // namespace
|
|
|
|
|
|
std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParams>(const TVector<NYdb::TResultSet>&)>> ConstructHardPingTask(
|
|
|
- const TEvControlPlaneStorage::TEvPingTaskRequest* request, std::shared_ptr<YandexQuery::QueryAction> response,
|
|
|
+ const Yq::Private::PingTaskRequest& request, std::shared_ptr<Yq::Private::PingTaskResult> response,
|
|
|
const TString& tablePathPrefix, const TDuration& automaticQueriesTtl, const TDuration& taskLeaseTtl, const THashMap<ui64, TRetryPolicyItem>& retryPolicies) {
|
|
|
|
|
|
TSqlQueryBuilder readQueryBuilder(tablePathPrefix, "HardPingTask(read)");
|
|
|
- readQueryBuilder.AddString("tenant", request->TenantName);
|
|
|
- readQueryBuilder.AddString("scope", request->Scope);
|
|
|
- readQueryBuilder.AddString("query_id", request->QueryId);
|
|
|
+ readQueryBuilder.AddString("tenant", request.tenant());
|
|
|
+ readQueryBuilder.AddString("scope", request.scope());
|
|
|
+ readQueryBuilder.AddString("query_id", request.query_id().value());
|
|
|
readQueryBuilder.AddText(
|
|
|
"$last_job_id = SELECT `" LAST_JOB_ID_COLUMN_NAME "` FROM `" QUERIES_TABLE_NAME "`\n"
|
|
|
" WHERE `" SCOPE_COLUMN_NAME "` = $scope AND `" QUERY_ID_COLUMN_NAME "` = $query_id;\n"
|
|
@@ -53,23 +53,23 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
{
|
|
|
TResultSetParser parser(resultSets[0]);
|
|
|
if (!parser.TryNextRow()) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " QUERIES_TABLE_NAME " where " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\"";
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " QUERIES_TABLE_NAME " where " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\"";
|
|
|
}
|
|
|
if (!query.ParseFromString(*parser.ColumnParser(QUERY_COLUMN_NAME).GetOptionalString())) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " QUERIES_TABLE_NAME "." QUERY_COLUMN_NAME " where " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\" and " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\"";
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " QUERIES_TABLE_NAME "." QUERY_COLUMN_NAME " where " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\" and " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\"";
|
|
|
}
|
|
|
if (!internal.ParseFromString(*parser.ColumnParser(INTERNAL_COLUMN_NAME).GetOptionalString())) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " QUERIES_TABLE_NAME "." INTERNAL_COLUMN_NAME " where " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\" and " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\"";
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " QUERIES_TABLE_NAME "." INTERNAL_COLUMN_NAME " where " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\" and " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\"";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
TResultSetParser parser(resultSets[1]);
|
|
|
if (!parser.TryNextRow()) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " JOBS_TABLE_NAME " where " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\"";
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " JOBS_TABLE_NAME " where " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\"";
|
|
|
}
|
|
|
if (!job.ParseFromString(*parser.ColumnParser(JOB_COLUMN_NAME).GetOptionalString())) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " JOBS_TABLE_NAME "." JOB_COLUMN_NAME " where " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\"";
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " JOBS_TABLE_NAME "." JOB_COLUMN_NAME " where " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\"";
|
|
|
}
|
|
|
jobId = *parser.ColumnParser(JOB_ID_COLUMN_NAME).GetOptionalString();
|
|
|
}
|
|
@@ -78,11 +78,11 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
{
|
|
|
TResultSetParser parser(resultSets[2]);
|
|
|
if (!parser.TryNextRow()) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " PENDING_SMALL_TABLE_NAME " where " TENANT_COLUMN_NAME " = \"" << request->TenantName << "\" and " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\"" ;
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " PENDING_SMALL_TABLE_NAME " where " TENANT_COLUMN_NAME " = \"" << request.tenant() << "\" and " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\"" ;
|
|
|
}
|
|
|
owner = *parser.ColumnParser(OWNER_COLUMN_NAME).GetOptionalString();
|
|
|
- if (owner != request->Owner) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "OWNER of QUERY ID = \"" << request->QueryId << "\" MISMATCHED: \"" << request->Owner << "\" (received) != \"" << owner << "\" (selected)";
|
|
|
+ if (owner != request.owner_id()) {
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "OWNER of QUERY ID = \"" << request.query_id().value() << "\" MISMATCHED: \"" << request.owner_id() << "\" (received) != \"" << owner << "\" (selected)";
|
|
|
}
|
|
|
retryLimiter.Assign(
|
|
|
parser.ColumnParser(RETRY_COUNTER_COLUMN_NAME).GetOptionalUint64().GetOrElse(0),
|
|
@@ -91,16 +91,28 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- TMaybe<YandexQuery::QueryMeta::ComputeStatus> queryStatus = request->Status;
|
|
|
- TMaybe<NYql::TIssues> issues = request->Issues;
|
|
|
- TMaybe<NYql::TIssues> transientIssues = request->TransientIssues;
|
|
|
-
|
|
|
+ TMaybe<YandexQuery::QueryMeta::ComputeStatus> queryStatus;
|
|
|
+ if (request.status() != YandexQuery::QueryMeta::COMPUTE_STATUS_UNSPECIFIED) {
|
|
|
+ queryStatus = request.status();
|
|
|
+ }
|
|
|
+ TMaybe<NYql::TIssues> issues;
|
|
|
+ if (request.issues().size() > 0) {
|
|
|
+ NYql::TIssues requestIssues;
|
|
|
+ NYql::IssuesFromMessage(request.issues(), requestIssues);
|
|
|
+ issues = requestIssues;
|
|
|
+ }
|
|
|
+ TMaybe<NYql::TIssues> transientIssues;
|
|
|
+ if (request.transient_issues().size() > 0) {
|
|
|
+ NYql::TIssues requestTransientIssues;
|
|
|
+ NYql::IssuesFromMessage(request.transient_issues(), requestTransientIssues);
|
|
|
+ transientIssues = requestTransientIssues;
|
|
|
+ }
|
|
|
// running query us locked for lease period
|
|
|
TDuration backoff = taskLeaseTtl;
|
|
|
|
|
|
- if (request->ResignQuery) {
|
|
|
+ if (request.resign_query()) {
|
|
|
TRetryPolicyItem policy(0, TDuration::Seconds(1), TDuration::Zero());
|
|
|
- auto it = retryPolicies.find(request->StatusCode);
|
|
|
+ auto it = retryPolicies.find(request.status_code());
|
|
|
auto policyFound = it != retryPolicies.end();
|
|
|
if (policyFound) {
|
|
|
policy = it->second;
|
|
@@ -125,7 +137,7 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- CPS_LOG_AS_D(*actorSystem, "PingTaskRequest (resign): " << (!policyFound ? " DEFAULT POLICY" : "") << (owner ? " FAILURE" : "") << request->StatusCode << " " << retryLimiter.RetryCount << " " << retryLimiter.RetryCounterUpdatedAt << " " << backoff);
|
|
|
+ CPS_LOG_AS_D(*actorSystem, "PingTaskRequest (resign): " << (!policyFound ? " DEFAULT POLICY" : "") << (owner ? " FAILURE" : "") << NYql::NDqProto::StatusIds_StatusCode_Name(request.status_code()) << " " << retryLimiter.RetryCount << " " << retryLimiter.RetryCounterUpdatedAt << " " << backoff);
|
|
|
}
|
|
|
|
|
|
if (queryStatus) {
|
|
@@ -150,42 +162,38 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
NYql::IssuesToMessage(newIssues, query.mutable_transient_issue());
|
|
|
}
|
|
|
|
|
|
- if (request->Statistics) {
|
|
|
- *query.mutable_statistics()->mutable_json() = *request->Statistics;
|
|
|
- *job.mutable_statistics()->mutable_json() = *request->Statistics;
|
|
|
+ if (request.statistics()) {
|
|
|
+ *query.mutable_statistics()->mutable_json() = request.statistics();
|
|
|
+ *job.mutable_statistics()->mutable_json() = request.statistics();
|
|
|
}
|
|
|
|
|
|
- if (request->ResultSetMetas) {
|
|
|
+ if (!request.result_set_meta().empty()) {
|
|
|
// we will overwrite result_set_meta's COMPLETELY
|
|
|
- query.clear_result_set_meta();
|
|
|
- job.clear_result_set_meta();
|
|
|
- for (const auto& resultSetMeta : *request->ResultSetMetas) {
|
|
|
- *query.add_result_set_meta() = resultSetMeta;
|
|
|
- *job.add_result_set_meta() = resultSetMeta;
|
|
|
- }
|
|
|
+ *query.mutable_result_set_meta() = request.result_set_meta();
|
|
|
+ *job.mutable_result_set_meta() = request.result_set_meta();
|
|
|
}
|
|
|
|
|
|
- if (request->Ast) {
|
|
|
- query.mutable_ast()->set_data(*request->Ast);
|
|
|
- job.mutable_ast()->set_data(*request->Ast);
|
|
|
+ if (request.ast()) {
|
|
|
+ query.mutable_ast()->set_data(request.ast());
|
|
|
+ job.mutable_ast()->set_data(request.ast());
|
|
|
}
|
|
|
|
|
|
- if (request->Plan) {
|
|
|
- query.mutable_plan()->set_json(*request->Plan);
|
|
|
- job.mutable_plan()->set_json(*request->Plan);
|
|
|
+ if (request.plan()) {
|
|
|
+ query.mutable_plan()->set_json(request.plan());
|
|
|
+ job.mutable_plan()->set_json(request.plan());
|
|
|
}
|
|
|
|
|
|
- if (request->StartedAt) {
|
|
|
- *query.mutable_meta()->mutable_started_at() = NProtoInterop::CastToProto(*request->StartedAt);
|
|
|
- *job.mutable_query_meta()->mutable_started_at() = NProtoInterop::CastToProto(*request->StartedAt);
|
|
|
+ if (request.has_started_at()) {
|
|
|
+ *query.mutable_meta()->mutable_started_at() = request.started_at();
|
|
|
+ *job.mutable_query_meta()->mutable_started_at() = request.started_at();
|
|
|
}
|
|
|
|
|
|
- if (request->FinishedAt) {
|
|
|
- *query.mutable_meta()->mutable_finished_at() = NProtoInterop::CastToProto(*request->FinishedAt);
|
|
|
- *job.mutable_query_meta()->mutable_finished_at() = NProtoInterop::CastToProto(*request->FinishedAt);
|
|
|
+ if (request.has_finished_at()) {
|
|
|
+ *query.mutable_meta()->mutable_finished_at() = request.finished_at();
|
|
|
+ *job.mutable_query_meta()->mutable_finished_at() = request.finished_at();
|
|
|
if (!query.meta().has_started_at()) {
|
|
|
- *query.mutable_meta()->mutable_started_at() = NProtoInterop::CastToProto(*request->FinishedAt);
|
|
|
- *job.mutable_query_meta()->mutable_started_at() = NProtoInterop::CastToProto(*request->FinishedAt);
|
|
|
+ *query.mutable_meta()->mutable_started_at() = request.finished_at();
|
|
|
+ *job.mutable_query_meta()->mutable_started_at() = request.finished_at();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -197,43 +205,33 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
}
|
|
|
|
|
|
if (query.meta().status() == YandexQuery::QueryMeta::COMPLETED) {
|
|
|
- *query.mutable_meta()->mutable_result_expire_at() = NProtoInterop::CastToProto(request->Deadline);
|
|
|
+ *query.mutable_meta()->mutable_result_expire_at() = request.deadline();
|
|
|
}
|
|
|
|
|
|
- if (request->StateLoadMode) {
|
|
|
- internal.set_state_load_mode(request->StateLoadMode);
|
|
|
- if (request->StateLoadMode == YandexQuery::FROM_LAST_CHECKPOINT) { // Saved checkpoint
|
|
|
+ if (request.state_load_mode()) {
|
|
|
+ internal.set_state_load_mode(request.state_load_mode());
|
|
|
+ if (request.state_load_mode() == YandexQuery::FROM_LAST_CHECKPOINT) { // Saved checkpoint
|
|
|
query.mutable_meta()->set_has_saved_checkpoints(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (request->StreamingDisposition) {
|
|
|
- internal.mutable_disposition()->CopyFrom(*request->StreamingDisposition);
|
|
|
+ if (request.has_disposition()) {
|
|
|
+ *internal.mutable_disposition() = request.disposition();
|
|
|
}
|
|
|
|
|
|
- if (request->Status && IsFinishedStatus(*request->Status)) {
|
|
|
+ if (request.status() && IsFinishedStatus(request.status())) {
|
|
|
internal.clear_created_topic_consumers();
|
|
|
internal.clear_dq_graph();
|
|
|
internal.clear_dq_graph_index();
|
|
|
}
|
|
|
|
|
|
- if (!request->CreatedTopicConsumers.empty()) {
|
|
|
+ if (!request.created_topic_consumers().empty()) {
|
|
|
std::set<Yq::Private::TopicConsumer, TTopicConsumerLess> mergedConsumers;
|
|
|
for (auto&& c : *internal.mutable_created_topic_consumers()) {
|
|
|
mergedConsumers.emplace(std::move(c));
|
|
|
}
|
|
|
-
|
|
|
- for (const auto& c : request->CreatedTopicConsumers) {
|
|
|
- Yq::Private::TopicConsumer proto;
|
|
|
- proto.set_database_id(c.DatabaseId);
|
|
|
- proto.set_database(c.Database);
|
|
|
- proto.set_topic_path(c.TopicPath);
|
|
|
- proto.set_consumer_name(c.ConsumerName);
|
|
|
- proto.set_cluster_endpoint(c.ClusterEndpoint);
|
|
|
- proto.set_use_ssl(c.UseSsl);
|
|
|
- proto.set_token_name(c.TokenName);
|
|
|
- proto.set_add_bearer_to_token(c.AddBearerToToken);
|
|
|
- mergedConsumers.emplace(std::move(proto));
|
|
|
+ for (const auto& c : request.created_topic_consumers()) {
|
|
|
+ mergedConsumers.emplace(c);
|
|
|
}
|
|
|
internal.clear_created_topic_consumers();
|
|
|
for (auto&& c : mergedConsumers) {
|
|
@@ -241,27 +239,24 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!request->DqGraphs.empty()) {
|
|
|
- internal.clear_dq_graph();
|
|
|
- for (const auto& g : request->DqGraphs) {
|
|
|
- internal.add_dq_graph(g);
|
|
|
- }
|
|
|
+ if (!request.dq_graph().empty()) {
|
|
|
+ *internal.mutable_dq_graph() = request.dq_graph();
|
|
|
}
|
|
|
|
|
|
- if (request->DqGraphIndex) {
|
|
|
- internal.set_dq_graph_index(request->DqGraphIndex);
|
|
|
+ if (request.dq_graph_index()) {
|
|
|
+ internal.set_dq_graph_index(request.dq_graph_index());
|
|
|
}
|
|
|
|
|
|
TSqlQueryBuilder writeQueryBuilder(tablePathPrefix, "HardPingTask(write)");
|
|
|
- writeQueryBuilder.AddString("tenant", request->TenantName);
|
|
|
- writeQueryBuilder.AddString("scope", request->Scope);
|
|
|
+ writeQueryBuilder.AddString("tenant", request.tenant());
|
|
|
+ writeQueryBuilder.AddString("scope", request.scope());
|
|
|
writeQueryBuilder.AddString("job_id", jobId);
|
|
|
writeQueryBuilder.AddString("job", job.SerializeAsString());
|
|
|
writeQueryBuilder.AddString("query", query.SerializeAsString());
|
|
|
writeQueryBuilder.AddInt64("status", query.meta().status());
|
|
|
writeQueryBuilder.AddString("internal", internal.SerializeAsString());
|
|
|
- writeQueryBuilder.AddString("result_id", request->ResultId);
|
|
|
- writeQueryBuilder.AddString("query_id", request->QueryId);
|
|
|
+ writeQueryBuilder.AddString("result_id", request.result_id().value());
|
|
|
+ writeQueryBuilder.AddString("query_id", request.query_id().value());
|
|
|
|
|
|
if (IsTerminalStatus(query.meta().status())) {
|
|
|
// delete pending
|
|
@@ -301,7 +296,7 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
|
|
|
TString updateResultSetsExpire;
|
|
|
if (query.meta().status() == YandexQuery::QueryMeta::COMPLETED) {
|
|
|
- writeQueryBuilder.AddTimestamp("result_sets_expire_at", request->Deadline);
|
|
|
+ writeQueryBuilder.AddTimestamp("result_sets_expire_at", NProtoInterop::CastFromProto(request.deadline()));
|
|
|
updateResultSetsExpire = "`" RESULT_SETS_EXPIRE_AT_COLUMN_NAME "` = $result_sets_expire_at";
|
|
|
} else {
|
|
|
updateResultSetsExpire = "`" RESULT_SETS_EXPIRE_AT_COLUMN_NAME "` = NULL";
|
|
@@ -321,7 +316,8 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
"WHERE `" SCOPE_COLUMN_NAME "` = $scope AND `" QUERY_ID_COLUMN_NAME "` = $query_id;\n"
|
|
|
);
|
|
|
|
|
|
- *response = internal.action();
|
|
|
+ response->set_action(internal.action());
|
|
|
+
|
|
|
const auto writeQuery = writeQueryBuilder.Build();
|
|
|
return std::make_pair(writeQuery.Sql, writeQuery.Params);
|
|
|
};
|
|
@@ -330,12 +326,12 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
}
|
|
|
|
|
|
std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParams>(const TVector<NYdb::TResultSet>&)>> ConstructSoftPingTask(
|
|
|
- const TEvControlPlaneStorage::TEvPingTaskRequest* request, std::shared_ptr<YandexQuery::QueryAction> response,
|
|
|
+ const Yq::Private::PingTaskRequest& request, std::shared_ptr<Yq::Private::PingTaskResult> response,
|
|
|
const TString& tablePathPrefix, const TDuration& taskLeaseTtl) {
|
|
|
TSqlQueryBuilder readQueryBuilder(tablePathPrefix, "SoftPingTask(read)");
|
|
|
- readQueryBuilder.AddString("tenant", request->TenantName);
|
|
|
- readQueryBuilder.AddString("scope", request->Scope);
|
|
|
- readQueryBuilder.AddString("query_id", request->QueryId);
|
|
|
+ readQueryBuilder.AddString("tenant", request.tenant());
|
|
|
+ readQueryBuilder.AddString("scope", request.scope());
|
|
|
+ readQueryBuilder.AddString("query_id", request.query_id().value());
|
|
|
readQueryBuilder.AddText(
|
|
|
"SELECT `" INTERNAL_COLUMN_NAME "`\n"
|
|
|
"FROM `" QUERIES_TABLE_NAME "` WHERE `" QUERY_ID_COLUMN_NAME "` = $query_id AND `" SCOPE_COLUMN_NAME "` = $scope;\n"
|
|
@@ -354,32 +350,32 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
{
|
|
|
TResultSetParser parser(resultSets[0]);
|
|
|
if (!parser.TryNextRow()) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " QUERIES_TABLE_NAME " where " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\"" ;
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " QUERIES_TABLE_NAME " where " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\"" ;
|
|
|
}
|
|
|
if (!internal.ParseFromString(*parser.ColumnParser(INTERNAL_COLUMN_NAME).GetOptionalString())) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " QUERIES_TABLE_NAME "." INTERNAL_COLUMN_NAME " where " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\" and " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\"";
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "ERROR PARSING " QUERIES_TABLE_NAME "." INTERNAL_COLUMN_NAME " where " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\" and " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\"";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
TResultSetParser parser(resultSets[1]);
|
|
|
if (!parser.TryNextRow()) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " PENDING_SMALL_TABLE_NAME " where " TENANT_COLUMN_NAME " = \"" << request->TenantName << "\" and " SCOPE_COLUMN_NAME " = \"" << request->Scope << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request->QueryId << "\"" ;
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "NOT FOUND " PENDING_SMALL_TABLE_NAME " where " TENANT_COLUMN_NAME " = \"" << request.tenant() << "\" and " SCOPE_COLUMN_NAME " = \"" << request.scope() << "\" and " QUERY_ID_COLUMN_NAME " = \"" << request.query_id().value() << "\"" ;
|
|
|
}
|
|
|
owner = *parser.ColumnParser(OWNER_COLUMN_NAME).GetOptionalString();
|
|
|
- if (owner != request->Owner) {
|
|
|
- ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "OWNER of QUERY ID = \"" << request->QueryId << "\" MISMATCHED: \"" << request->Owner << "\" (received) != \"" << owner << "\" (selected)";
|
|
|
+ if (owner != request.owner_id()) {
|
|
|
+ ythrow TControlPlaneStorageException(TIssuesIds::BAD_REQUEST) << "OWNER of QUERY ID = \"" << request.query_id().value() << "\" MISMATCHED: \"" << request.owner_id() << "\" (received) != \"" << owner << "\" (selected)";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- *response = internal.action();
|
|
|
+ response->set_action(internal.action());
|
|
|
|
|
|
TSqlQueryBuilder writeQueryBuilder(tablePathPrefix, "SoftPingTask(write)");
|
|
|
writeQueryBuilder.AddTimestamp("now", TInstant::Now());
|
|
|
writeQueryBuilder.AddTimestamp("ttl", TInstant::Now() + taskLeaseTtl);
|
|
|
- writeQueryBuilder.AddString("tenant", request->TenantName);
|
|
|
- writeQueryBuilder.AddString("scope", request->Scope);
|
|
|
- writeQueryBuilder.AddString("query_id", request->QueryId);
|
|
|
+ writeQueryBuilder.AddString("tenant", request.tenant());
|
|
|
+ writeQueryBuilder.AddString("scope", request.scope());
|
|
|
+ writeQueryBuilder.AddString("query_id", request.query_id().value());
|
|
|
|
|
|
writeQueryBuilder.AddText(
|
|
|
"UPDATE `" PENDING_SMALL_TABLE_NAME "` SET `" LAST_SEEN_AT_COLUMN_NAME "` = $now, `" ASSIGNED_UNTIL_COLUMN_NAME "` = $ttl\n"
|
|
@@ -396,19 +392,19 @@ std::tuple<TString, TParams, const std::function<std::pair<TString, NYdb::TParam
|
|
|
void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvPingTaskRequest::TPtr& ev)
|
|
|
{
|
|
|
TInstant startTime = TInstant::Now();
|
|
|
- TEvControlPlaneStorage::TEvPingTaskRequest* request = ev->Get();
|
|
|
- const TString cloudId = request->CloudId;
|
|
|
- const TString scope = request->Scope;
|
|
|
- TRequestCountersPtr requestCounters = Counters.GetScopeCounters(cloudId, scope, RTS_PING_TASK);
|
|
|
+ Yq::Private::PingTaskRequest& request = ev->Get()->Request;
|
|
|
+ const TString cloudId = "";
|
|
|
+ const TString scope = request.scope();
|
|
|
+ TRequestCountersPtr requestCounters = Counters.GetScopeCounters("" /*CloudId*/, scope, RTS_PING_TASK);
|
|
|
requestCounters->InFly->Inc();
|
|
|
- requestCounters->RequestBytes->Add(request->GetByteSize());
|
|
|
- const TString queryId = request->QueryId;
|
|
|
- const TString owner = request->Owner;
|
|
|
- const TInstant deadline = request->Deadline;
|
|
|
+ requestCounters->RequestBytes->Add(ev->Get()->GetByteSize());
|
|
|
+ const TString queryId = request.query_id().value();
|
|
|
+ const TString owner = request.owner_id();
|
|
|
+ const TInstant deadline = NProtoInterop::CastFromProto(request.deadline());
|
|
|
|
|
|
- CPS_LOG_T("PingTaskRequest: " << request->TenantName << " " << scope << " " << queryId
|
|
|
+ CPS_LOG_T("PingTaskRequest: " << request.tenant() << " " << scope << " " << queryId
|
|
|
<< " " << owner << " " << deadline << " "
|
|
|
- << (request->Status ? YandexQuery::QueryMeta_ComputeStatus_Name(*request->Status) : "no status"));
|
|
|
+ << (request.status() ? YandexQuery::QueryMeta_ComputeStatus_Name(request.status()) : "no status"));
|
|
|
|
|
|
NYql::TIssues issues = ValidatePingTask(scope, queryId, owner, deadline, Config.ResultSetsTtl);
|
|
|
if (issues) {
|
|
@@ -419,10 +415,10 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvPingTaskReq
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- std::shared_ptr<YandexQuery::QueryAction> response = std::make_shared<YandexQuery::QueryAction>();
|
|
|
+ std::shared_ptr<Yq::Private::PingTaskResult> response = std::make_shared<Yq::Private::PingTaskResult>();
|
|
|
|
|
|
- if (request->Status)
|
|
|
- Counters.GetFinalStatusCounters(cloudId, scope)->IncByStatus(*request->Status);
|
|
|
+ if (request.status())
|
|
|
+ Counters.GetFinalStatusCounters(cloudId, scope)->IncByStatus(request.status());
|
|
|
auto pingTaskParams = DoesPingTaskUpdateQueriesTable(request) ?
|
|
|
ConstructHardPingTask(request, response, YdbConnection->TablePathPrefix, Config.AutomaticQueriesTtl, Config.TaskLeaseTtl, Config.RetryPolicies) :
|
|
|
ConstructSoftPingTask(request, response, YdbConnection->TablePathPrefix, Config.TaskLeaseTtl);
|
|
@@ -432,8 +428,8 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvPingTaskReq
|
|
|
|
|
|
auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{};
|
|
|
auto result = ReadModifyWrite(NActors::TActivationContext::ActorSystem(), readQuery, readParams, prepareParams, requestCounters, debugInfo);
|
|
|
- auto prepare = [response] { return std::make_tuple(*response); };
|
|
|
- auto success = SendResponseTuple<TEvControlPlaneStorage::TEvPingTaskResponse, std::tuple<YandexQuery::QueryAction>>(
|
|
|
+ auto prepare = [response] { return *response; };
|
|
|
+ auto success = SendResponse<TEvControlPlaneStorage::TEvPingTaskResponse, Yq::Private::PingTaskResult>(
|
|
|
"PingTaskRequest",
|
|
|
NActors::TActivationContext::ActorSystem(),
|
|
|
result,
|