aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <ivanmorozov@yandex-team.com>2022-11-30 17:29:52 +0300
committerivanmorozov <ivanmorozov@yandex-team.com>2022-11-30 17:29:52 +0300
commit8e02186e1b12cefe9abb4056ad282889093dbeff (patch)
tree0105068d70bd3d3e2193508c05be9a9aec01800a
parentd03aa9285397c1daa052797d42e8c439655a2162 (diff)
downloadydb-8e02186e1b12cefe9abb4056ad282889093dbeff.tar.gz
system user token usage for metadata
provide error messages fix success checker for table creation
-rw-r--r--ydb/core/kqp/gateway/kqp_ic_gateway.cpp4
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_exec.cpp4
-rw-r--r--ydb/services/bg_tasks/ds_table/add_tasks.h2
-rw-r--r--ydb/services/bg_tasks/ds_table/assign_tasks.h2
-rw-r--r--ydb/services/bg_tasks/ds_table/executor_controller.h7
-rw-r--r--ydb/services/bg_tasks/ds_table/fetch_tasks.h2
-rw-r--r--ydb/services/bg_tasks/ds_table/finish_task.h2
-rw-r--r--ydb/services/bg_tasks/ds_table/interrupt.h2
-rw-r--r--ydb/services/bg_tasks/ds_table/lock_pinger.h2
-rw-r--r--ydb/services/bg_tasks/ds_table/task_enabled.h2
-rw-r--r--ydb/services/metadata/abstract/CMakeLists.txt6
-rw-r--r--ydb/services/metadata/abstract/kqp_common.h2
-rw-r--r--ydb/services/metadata/ds_table/accessor_refresh.cpp2
-rw-r--r--ydb/services/metadata/ds_table/service.cpp1
-rw-r--r--ydb/services/metadata/initializer/common.h3
-rw-r--r--ydb/services/metadata/manager/alter.h11
-rw-r--r--ydb/services/metadata/manager/modification.h19
-rw-r--r--ydb/services/metadata/manager/restore.h6
-rw-r--r--ydb/services/metadata/request/request_actor.h49
-rw-r--r--ydb/services/metadata/secret/snapshot.cpp2
-rw-r--r--ydb/services/metadata/secret/snapshot.h2
21 files changed, 89 insertions, 43 deletions
diff --git a/ydb/core/kqp/gateway/kqp_ic_gateway.cpp b/ydb/core/kqp/gateway/kqp_ic_gateway.cpp
index 1105c9d844..ac2b3cd16b 100644
--- a/ydb/core/kqp/gateway/kqp_ic_gateway.cpp
+++ b/ydb/core/kqp/gateway/kqp_ic_gateway.cpp
@@ -1415,7 +1415,9 @@ public:
return MakeFuture(ResultFromError<TGenericResult>("incorrect object type"));
}
NMetadata::IOperationsManager::TModificationContext context;
- context.SetUserToken(GetUserToken());
+ if (GetUserToken()) {
+ context.SetUserToken(*GetUserToken());
+ }
return DoExecute(manager, settings, context).Apply([](const NThreading::TFuture<NMetadata::TObjectOperatorResult>& f) {
if (f.HasValue() && !f.HasException() && f.GetValue().IsSuccess()) {
TGenericResult result;
diff --git a/ydb/core/kqp/provider/yql_kikimr_exec.cpp b/ydb/core/kqp/provider/yql_kikimr_exec.cpp
index 6360ad8063..5e0d33670a 100644
--- a/ydb/core/kqp/provider/yql_kikimr_exec.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_exec.cpp
@@ -410,7 +410,7 @@ public:
}
std::pair<IGraphTransformer::TStatus, TAsyncTransformCallbackFuture> Execute(const TKiObject& kiObject, const TExprNode::TPtr& input, TExprContext& ctx) {
- if (!EnsureNotPrepare(ActionInfo, input->Pos(), SessionCtx->Query(), ctx)) {
+ if (!EnsureNotPrepare(ActionInfo + " " + kiObject.TypeId(), input->Pos(), SessionCtx->Query(), ctx)) {
return SyncError();
}
@@ -432,7 +432,7 @@ public:
Y_UNUSED(res);
auto resultNode = ctx.NewWorld(input->Pos());
return resultNode;
- }, "Executing " + ActionInfo);
+ }, "Executing " + ActionInfo + " " + kiObject.TypeId());
}
};
diff --git a/ydb/services/bg_tasks/ds_table/add_tasks.h b/ydb/services/bg_tasks/ds_table/add_tasks.h
index ef1e3bdac9..a63677f6ea 100644
--- a/ydb/services/bg_tasks/ds_table/add_tasks.h
+++ b/ydb/services/bg_tasks/ds_table/add_tasks.h
@@ -17,7 +17,7 @@ protected:
public:
TAddTasksActor(TExecutorController::TPtr controller, const TTask& task, const TActorId resultWaiter)
- : TBase(controller->GetRequestConfig())
+ : TBase(controller->GetRequestConfig(), controller->GetUserToken())
, Controller(controller)
, Task(task)
, ResultWaiter(resultWaiter)
diff --git a/ydb/services/bg_tasks/ds_table/assign_tasks.h b/ydb/services/bg_tasks/ds_table/assign_tasks.h
index 640fa39aae..edd63e9d5c 100644
--- a/ydb/services/bg_tasks/ds_table/assign_tasks.h
+++ b/ydb/services/bg_tasks/ds_table/assign_tasks.h
@@ -16,7 +16,7 @@ private:
virtual std::optional<NInternal::NRequest::TDialogYQLRequest::TRequest> OnSessionId(const TString& sessionId) override;
public:
TAssignTasksActor(const ui32 tasksCount, TExecutorController::TPtr controller, const TString& executorId)
- : TBase(controller->GetRequestConfig())
+ : TBase(controller->GetRequestConfig(), controller->GetUserToken())
, Controller(controller)
, TasksCount(tasksCount)
, ExecutorId(executorId)
diff --git a/ydb/services/bg_tasks/ds_table/executor_controller.h b/ydb/services/bg_tasks/ds_table/executor_controller.h
index cf831712c0..c2de10f7c7 100644
--- a/ydb/services/bg_tasks/ds_table/executor_controller.h
+++ b/ydb/services/bg_tasks/ds_table/executor_controller.h
@@ -1,6 +1,7 @@
#pragma once
#include "config.h"
+#include <ydb/library/aclib/aclib.h>
#include <ydb/services/metadata/initializer/common.h>
#include <library/cpp/actors/core/actor.h>
@@ -14,15 +15,21 @@ class TExecutorController: public NMetadataInitializer::IInitializerOutput {
private:
const NActors::TActorIdentity ExecutorActorId;
YDB_READONLY_DEF(TConfig, Config);
+ const NACLib::TUserToken UserToken;
public:
using TPtr = std::shared_ptr<TExecutorController>;
TExecutorController(const NActors::TActorIdentity& executorActorId, const TConfig& config)
: ExecutorActorId(executorActorId)
, Config(config)
+ , UserToken(NACLib::TSystemUsers::Metadata())
{
}
+ const NACLib::TUserToken& GetUserToken() const {
+ return UserToken;
+ }
+
TString GetTableName() const {
return Config.GetTablePath();
}
diff --git a/ydb/services/bg_tasks/ds_table/fetch_tasks.h b/ydb/services/bg_tasks/ds_table/fetch_tasks.h
index 0eea7a2646..56b3d78882 100644
--- a/ydb/services/bg_tasks/ds_table/fetch_tasks.h
+++ b/ydb/services/bg_tasks/ds_table/fetch_tasks.h
@@ -18,7 +18,7 @@ protected:
public:
TFetchTasksActor(const std::set<TString>& currentTaskIds, const TString& executorId,
TExecutorController::TPtr controller)
- : TBase(controller->GetRequestConfig())
+ : TBase(controller->GetRequestConfig(), controller->GetUserToken())
, CurrentTaskIds(currentTaskIds)
, ExecutorId(executorId)
, Controller(controller)
diff --git a/ydb/services/bg_tasks/ds_table/finish_task.h b/ydb/services/bg_tasks/ds_table/finish_task.h
index 2b5020d777..21a527d64a 100644
--- a/ydb/services/bg_tasks/ds_table/finish_task.h
+++ b/ydb/services/bg_tasks/ds_table/finish_task.h
@@ -17,7 +17,7 @@ protected:
public:
TDropTaskActor(const TString& taskId, TExecutorController::TPtr controller)
- : TBase(controller->GetRequestConfig())
+ : TBase(controller->GetRequestConfig(), controller->GetUserToken())
, TaskId(taskId)
, Controller(controller) {
diff --git a/ydb/services/bg_tasks/ds_table/interrupt.h b/ydb/services/bg_tasks/ds_table/interrupt.h
index a48008f00a..a6f8442146 100644
--- a/ydb/services/bg_tasks/ds_table/interrupt.h
+++ b/ydb/services/bg_tasks/ds_table/interrupt.h
@@ -28,7 +28,7 @@ public:
TInterruptTaskActor(TExecutorController::TPtr executorController,
const TString& taskId, const TInstant nextStartInstant, TTaskStateContainer state)
- : TBase(executorController->GetRequestConfig())
+ : TBase(executorController->GetRequestConfig(), executorController->GetUserToken())
, ExecutorController(executorController)
, TaskId(taskId)
, NextStartInstant(nextStartInstant)
diff --git a/ydb/services/bg_tasks/ds_table/lock_pinger.h b/ydb/services/bg_tasks/ds_table/lock_pinger.h
index 8c47f7b3f7..8a8cc63d90 100644
--- a/ydb/services/bg_tasks/ds_table/lock_pinger.h
+++ b/ydb/services/bg_tasks/ds_table/lock_pinger.h
@@ -16,7 +16,7 @@ protected:
virtual std::optional<NInternal::NRequest::TDialogYQLRequest::TRequest> OnSessionId(const TString& sessionId) override;
public:
TLockPingerActor(TExecutorController::TPtr executorController, const std::set<TString>& taskIds)
- : TBase(executorController->GetRequestConfig())
+ : TBase(executorController->GetRequestConfig(), executorController->GetUserToken())
, TaskIds(taskIds)
, ExecutorController(executorController) {
Y_VERIFY(TaskIds.size());
diff --git a/ydb/services/bg_tasks/ds_table/task_enabled.h b/ydb/services/bg_tasks/ds_table/task_enabled.h
index 776d561079..8d4cc12c51 100644
--- a/ydb/services/bg_tasks/ds_table/task_enabled.h
+++ b/ydb/services/bg_tasks/ds_table/task_enabled.h
@@ -20,7 +20,7 @@ protected:
public:
TUpdateTaskEnabledActor(TExecutorController::TPtr executorController,
const TString& taskId, const bool enabled, const TActorId& resultWaiter)
- : TBase(executorController->GetRequestConfig())
+ : TBase(executorController->GetRequestConfig(), executorController->GetUserToken())
, ExecutorController(executorController)
, TaskId(taskId)
, Enabled(enabled)
diff --git a/ydb/services/metadata/abstract/CMakeLists.txt b/ydb/services/metadata/abstract/CMakeLists.txt
index 4da40e6d1f..0ba05137c2 100644
--- a/ydb/services/metadata/abstract/CMakeLists.txt
+++ b/ydb/services/metadata/abstract/CMakeLists.txt
@@ -11,6 +11,7 @@ add_library(services-metadata-abstract)
target_link_libraries(services-metadata-abstract PUBLIC
contrib-libs-cxxsupp
yutil
+ tools-enum_parser-enum_serialization_runtime
ydb-library-accessor
cpp-actors-core
services-metadata-request
@@ -24,3 +25,8 @@ target_sources(services-metadata-abstract PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/metadata/abstract/fetcher.cpp
${CMAKE_SOURCE_DIR}/ydb/services/metadata/abstract/kqp_common.cpp
)
+generate_enum_serilization(services-metadata-abstract
+ ${CMAKE_SOURCE_DIR}/ydb/services/metadata/abstract/kqp_common.h
+ INCLUDE_HEADERS
+ ydb/services/metadata/abstract/kqp_common.h
+)
diff --git a/ydb/services/metadata/abstract/kqp_common.h b/ydb/services/metadata/abstract/kqp_common.h
index 11651b0e2a..13e1e8f42b 100644
--- a/ydb/services/metadata/abstract/kqp_common.h
+++ b/ydb/services/metadata/abstract/kqp_common.h
@@ -83,7 +83,7 @@ public:
class TModificationContext {
private:
- YDB_ACCESSOR_DEF(TMaybe<NACLib::TUserToken>, UserToken);
+ YDB_ACCESSOR_DEF(std::optional<NACLib::TUserToken>, UserToken);
YDB_ACCESSOR(EActivityType, ActivityType, EActivityType::Undefined);
public:
TModificationContext() = default;
diff --git a/ydb/services/metadata/ds_table/accessor_refresh.cpp b/ydb/services/metadata/ds_table/accessor_refresh.cpp
index fcf7ab5496..77e414c5cb 100644
--- a/ydb/services/metadata/ds_table/accessor_refresh.cpp
+++ b/ydb/services/metadata/ds_table/accessor_refresh.cpp
@@ -53,7 +53,7 @@ void TDSAccessorRefresher::Handle(TEvRefresh::TPtr& /*ev*/) {
for (auto&& i : managers) {
sb << "SELECT * FROM `" + EscapeC(i->GetTablePath()) + "`;";
}
- Register(new TYQLQuerySessionedActor(sb, Config.GetRequestConfig(), InternalController));
+ Register(new TYQLQuerySessionedActor(sb, NACLib::TSystemUsers::Metadata(), Config.GetRequestConfig(), InternalController));
}
TDSAccessorRefresher::TDSAccessorRefresher(const TConfig& config, ISnapshotsFetcher::TPtr snapshotConstructor)
diff --git a/ydb/services/metadata/ds_table/service.cpp b/ydb/services/metadata/ds_table/service.cpp
index 251241969f..605dbc1e41 100644
--- a/ydb/services/metadata/ds_table/service.cpp
+++ b/ydb/services/metadata/ds_table/service.cpp
@@ -139,6 +139,7 @@ void TService::Handle(TEvRefreshSubscriberData::TPtr& ev) {
}
void TService::Bootstrap(const NActors::TActorContext& /*ctx*/) {
+ ALS_INFO(0) << "metadata service started" << Endl;
Become(&TService::StateMain);
InternalController = std::make_shared<TServiceInternalController>(SelfId());
}
diff --git a/ydb/services/metadata/initializer/common.h b/ydb/services/metadata/initializer/common.h
index ae693fc5cb..fa63bdb775 100644
--- a/ydb/services/metadata/initializer/common.h
+++ b/ydb/services/metadata/initializer/common.h
@@ -31,7 +31,8 @@ private:
YDB_READONLY_DEF(typename TDialogPolicy::TRequest, Request);
protected:
virtual bool DoExecute(const TActorId& resultCallbackId, const NInternal::NRequest::TConfig& config) const override {
- TActivationContext::ActorSystem()->Register(new NInternal::NRequest::TYDBRequest<TDialogPolicy>(Request, resultCallbackId, config));
+ TActivationContext::ActorSystem()->Register(new NInternal::NRequest::TYDBRequest<TDialogPolicy>(Request,
+ NACLib::TSystemUsers::Metadata(), resultCallbackId, config));
return true;
}
public:
diff --git a/ydb/services/metadata/manager/alter.h b/ydb/services/metadata/manager/alter.h
index ef9c1936da..70712d9caf 100644
--- a/ydb/services/metadata/manager/alter.h
+++ b/ydb/services/metadata/manager/alter.h
@@ -58,6 +58,7 @@ protected:
const NMetadata::IOperationsManager::TModificationContext Context;
std::vector<TTableRecord> Patches;
TTableRecords RestoreObjectIds;
+ const NACLib::TUserToken UserToken = NACLib::TSystemUsers::Metadata();
virtual bool PrepareRestoredObjects(std::vector<TObject>& objects) const = 0;
virtual bool ProcessPreparedObjects(TTableRecords&& records) const = 0;
virtual void InitState() = 0;
@@ -113,7 +114,7 @@ public:
}
TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogCreateSession>(
- NInternal::NRequest::TDialogCreateSession::TRequest(), TBase::SelfId()));
+ NInternal::NRequest::TDialogCreateSession::TRequest(), UserToken, TBase::SelfId()));
}
void Handle(typename NInternal::NRequest::TEvRequestResult<NInternal::NRequest::TDialogCreateSession>::TPtr& ev) {
@@ -124,7 +125,7 @@ public:
Y_VERIFY(SessionId);
InternalController = std::make_shared<TProcessingController<TObject>>(TBase::SelfId());
- TBase::Register(new TRestoreObjectsActor<TObject>(RestoreObjectIds, InternalController, SessionId));
+ TBase::Register(new TRestoreObjectsActor<TObject>(RestoreObjectIds, UserToken, InternalController, SessionId));
}
void Handle(typename TEvRestoreFinished<TObject>::TPtr& ev) {
@@ -268,7 +269,7 @@ private:
using TBase = TModificationActor<TObject>;
protected:
virtual bool ProcessPreparedObjects(TTableRecords&& records) const override {
- TBase::Register(new TUpdateObjectsActor<TObject>(std::move(records),
+ TBase::Register(new TUpdateObjectsActor<TObject>(std::move(records), TBase::UserToken,
TBase::InternalController, TBase::SessionId, TBase::TransactionId, TBase::Context.GetUserToken()));
return true;
}
@@ -286,7 +287,7 @@ private:
using TBase = TModificationActor<TObject>;
protected:
virtual bool ProcessPreparedObjects(TTableRecords&& records) const override {
- TBase::Register(new TInsertObjectsActor<TObject>(std::move(records),
+ TBase::Register(new TInsertObjectsActor<TObject>(std::move(records), TBase::UserToken,
TBase::InternalController, TBase::SessionId, TBase::TransactionId, TBase::Context.GetUserToken()));
return true;
}
@@ -334,7 +335,7 @@ public:
using TBase::TBase;
virtual bool ProcessPreparedObjects(TTableRecords&& records) const override {
- TBase::Register(new TDeleteObjectsActor<TObject>(std::move(records),
+ TBase::Register(new TDeleteObjectsActor<TObject>(std::move(records), TBase::UserToken,
TBase::InternalController, TBase::SessionId, TBase::TransactionId, TBase::Context.GetUserToken()));
return true;
}
diff --git a/ydb/services/metadata/manager/modification.h b/ydb/services/metadata/manager/modification.h
index bac2c54496..67d975cdd7 100644
--- a/ydb/services/metadata/manager/modification.h
+++ b/ydb/services/metadata/manager/modification.h
@@ -17,7 +17,8 @@ private:
IModificationObjectsController::TPtr Controller;
const TString SessionId;
const TString TransactionId;
- const TMaybe<NACLib::TUserToken> UserToken;
+ const NACLib::TUserToken SystemUserToken;
+ const std::optional<NACLib::TUserToken> UserToken;
std::deque<NInternal::NRequest::TDialogYQLRequest::TRequest> Requests;
protected:
TTableRecords Objects;
@@ -49,7 +50,8 @@ protected:
void Handle(NInternal::NRequest::TEvRequestResult<NInternal::NRequest::TDialogYQLRequest>::TPtr& /*ev*/) {
if (Requests.size()) {
- TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogYQLRequest>(Requests.front(), TBase::SelfId()));
+ TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogYQLRequest>(
+ Requests.front(), SystemUserToken, TBase::SelfId()));
Requests.pop_front();
} else {
Controller->ModificationFinished();
@@ -57,17 +59,19 @@ protected:
}
}
- void Handle(NInternal::NRequest::TEvRequestFailed::TPtr& /*ev*/) {
+ void Handle(NInternal::NRequest::TEvRequestFailed::TPtr& ev) {
auto g = TBase::PassAwayGuard();
- Controller->ModificationProblem("cannot execute yql request for upsert objects");
+ Controller->ModificationProblem("cannot execute yql request for " + GetModifyType() +
+ " objects: " + ev->Get()->GetErrorMessage());
}
public:
- TModifyObjectsActor(TTableRecords&& objects, IModificationObjectsController::TPtr controller, const TString& sessionId,
- const TString& transactionId, const TMaybe<NACLib::TUserToken>& userToken)
+ TModifyObjectsActor(TTableRecords&& objects, const NACLib::TUserToken& systemUserToken, IModificationObjectsController::TPtr controller, const TString& sessionId,
+ const TString& transactionId, const std::optional<NACLib::TUserToken>& userToken)
: Controller(controller)
, SessionId(sessionId)
, TransactionId(transactionId)
+ , SystemUserToken(systemUserToken)
, UserToken(userToken)
, Objects(std::move(objects))
@@ -88,7 +92,8 @@ public:
TBase::Become(&TModifyObjectsActor::StateMain);
BuildRequestDirect();
BuildRequestHistory();
- TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogYQLRequest>(Requests.front(), TBase::SelfId()));
+ TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogYQLRequest>(
+ Requests.front(), SystemUserToken, TBase::SelfId()));
Requests.pop_front();
}
};
diff --git a/ydb/services/metadata/manager/restore.h b/ydb/services/metadata/manager/restore.h
index 6506e5d629..c83eb6ed65 100644
--- a/ydb/services/metadata/manager/restore.h
+++ b/ydb/services/metadata/manager/restore.h
@@ -16,6 +16,7 @@ private:
typename IRestoreObjectsController::TPtr Controller;
const TTableRecords ObjectIds;
TString SessionId;
+ const NACLib::TUserToken UserToken;
void Handle(NInternal::NRequest::TEvRequestResult<NInternal::NRequest::TDialogSelect>::TPtr& ev) {
auto g = TBase::PassAwayGuard();
@@ -43,10 +44,11 @@ private:
}
public:
- TRestoreObjectsActor(const TTableRecords& objectIds, typename IRestoreObjectsController::TPtr controller, const TString& sessionId)
+ TRestoreObjectsActor(const TTableRecords& objectIds, const NACLib::TUserToken& uToken, typename IRestoreObjectsController::TPtr controller, const TString& sessionId)
: Controller(controller)
, ObjectIds(objectIds)
, SessionId(sessionId)
+ , UserToken(uToken)
{
Y_VERIFY(SessionId);
}
@@ -69,7 +71,7 @@ public:
request.mutable_tx_control()->mutable_begin_tx()->mutable_serializable_read_write();
request.set_session_id(SessionId);
TBase::Become(&TRestoreObjectsActor::StateMain);
- TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogSelect>(request, TBase::SelfId()));
+ TBase::Register(new NInternal::NRequest::TYDBRequest<NInternal::NRequest::TDialogSelect>(request, UserToken, TBase::SelfId()));
}
};
diff --git a/ydb/services/metadata/request/request_actor.h b/ydb/services/metadata/request/request_actor.h
index fee842d47b..660a3d34cc 100644
--- a/ydb/services/metadata/request/request_actor.h
+++ b/ydb/services/metadata/request/request_actor.h
@@ -7,6 +7,9 @@
#include <ydb/core/grpc_services/base/base.h>
#include <ydb/core/grpc_services/local_rpc/local_rpc.h>
#include <ydb/library/accessor/accessor.h>
+#include <ydb/library/aclib/aclib.h>
+#include <ydb/library/yql/public/issue/yql_issue_message.h>
+#include <ydb/library/yql/public/issue/yql_issue.h>
namespace NKikimr::NInternal::NRequest {
@@ -59,7 +62,14 @@ public:
};
class TEvRequestFailed: public NActors::TEventLocal<TEvRequestFailed, EEvents::EvRequestFailed> {
+private:
+ YDB_READONLY_DEF(TString, ErrorMessage)
public:
+ TEvRequestFailed(const TString& errorMessage)
+ : ErrorMessage(errorMessage)
+ {
+
+ }
};
template <class TResponse>
@@ -75,7 +85,7 @@ class TOperatorChecker<Ydb::Table::CreateTableResponse> {
public:
static bool IsSuccess(const Ydb::Table::CreateTableResponse& r) {
return r.operation().status() == Ydb::StatusIds::SUCCESS ||
- r.operation().status() != Ydb::StatusIds::ALREADY_EXISTS;
+ r.operation().status() == Ydb::StatusIds::ALREADY_EXISTS;
}
};
@@ -91,6 +101,7 @@ private:
const NActors::TActorId ActorRestartId;
const TConfig Config;
ui32 Retry = 0;
+ const NACLib::TUserToken UserToken;
protected:
class TEvRequestInternalResult: public NActors::TEventLocal<TEvRequestInternalResult, TDialogPolicy::EvResultInternal> {
private:
@@ -119,7 +130,7 @@ public:
if (!ev->Get()->GetFuture().HasValue() || ev->Get()->GetFuture().HasException()) {
ALS_ERROR(NKikimrServices::METADATA_PROVIDER) << "cannot receive result on initialization";
if (ActorRestartId) {
- TBase::template Sender<TEvRequestFailed>().SendTo(ActorRestartId);
+ TBase::template Sender<TEvRequestFailed>("incorrect future result").SendTo(ActorRestartId);
} else {
TBase::Schedule(Config.GetRetryPeriod(++Retry), new TEvRequestStart);
}
@@ -129,8 +140,10 @@ public:
TResponse response = f.ExtractValue();
if (!TOperatorChecker<TResponse>::IsSuccess(response)) {
ALS_ERROR(NKikimrServices::METADATA_PROVIDER) << "incorrect reply: " << response.DebugString();
+ NYql::TIssues issue;
+ NYql::IssuesFromMessage(response.operation().issues(), issue);
if (ActorRestartId) {
- TBase::template Sender<TEvRequestFailed>().SendTo(ActorRestartId);
+ TBase::template Sender<TEvRequestFailed>(issue.ToString()).SendTo(ActorRestartId);
} else {
TBase::Schedule(Config.GetRetryPeriod(++Retry), new TEvRequestStart);
}
@@ -145,7 +158,8 @@ public:
auto aSystem = TActivationContext::ActorSystem();
using TRpcRequest = NGRpcService::TGrpcRequestOperationCall<TRequest, TResponse>;
auto request = ProtoRequest;
- auto result = NRpcService::DoLocalRpc<TRpcRequest>(std::move(request), AppData()->TenantName, "", aSystem);
+ NACLib::TUserToken uToken("metadata@system", {});
+ auto result = NRpcService::DoLocalRpc<TRpcRequest>(std::move(request), AppData()->TenantName, uToken.SerializeAsString(), aSystem);
const NActors::TActorId selfId = TBase::SelfId();
const auto replyCallback = [aSystem, selfId](const NThreading::TFuture<TResponse>& f) {
aSystem->Send(selfId, new TEvRequestInternalResult(f));
@@ -153,18 +167,23 @@ public:
result.Subscribe(replyCallback);
}
- TYDBRequest(const TRequest& request, const NActors::TActorId actorFinishId, const TConfig& config, const NActors::TActorId& actorRestartId = {})
+ TYDBRequest(const TRequest& request, const NACLib::TUserToken& uToken,
+ const NActors::TActorId actorFinishId, const TConfig& config, const NActors::TActorId& actorRestartId = {})
: ProtoRequest(request)
, ActorFinishId(actorFinishId)
, ActorRestartId(actorRestartId)
- , Config(config) {
+ , Config(config)
+ , UserToken(uToken)
+ {
}
- TYDBRequest(const TRequest& request, const NActors::TActorId actorCallbackId)
+ TYDBRequest(const TRequest& request, const NACLib::TUserToken& uToken, const NActors::TActorId actorCallbackId)
: ProtoRequest(request)
, ActorFinishId(actorCallbackId)
- , ActorRestartId(actorCallbackId) {
+ , ActorRestartId(actorCallbackId)
+ , UserToken(uToken)
+ {
}
};
@@ -173,7 +192,6 @@ template <class TDialogPolicy>
class TSessionedActorImpl: public NActors::TActorBootstrapped<TSessionedActorImpl<TDialogPolicy>> {
private:
ui32 Retry = 0;
-
static_assert(!std::is_same<TDialogPolicy, TDialogCreateSession>());
using TBase = NActors::TActorBootstrapped<TSessionedActorImpl<TDialogPolicy>>;
void Handle(TEvRequestResult<TDialogCreateSession>::TPtr& ev) {
@@ -184,10 +202,11 @@ private:
Y_VERIFY(sessionId);
std::optional<typename TDialogPolicy::TRequest> nextRequest = OnSessionId(sessionId);
Y_VERIFY(nextRequest);
- TBase::Register(new TYDBRequest<TDialogPolicy>(*nextRequest, TBase::SelfId(), Config, TBase::SelfId()));
+ TBase::Register(new TYDBRequest<TDialogPolicy>(*nextRequest, UserToken, TBase::SelfId(), Config, TBase::SelfId()));
}
protected:
const NInternal::NRequest::TConfig Config;
+ const NACLib::TUserToken UserToken;
virtual std::optional<typename TDialogPolicy::TRequest> OnSessionId(const TString& sessionId) = 0;
virtual void OnResult(const typename TDialogPolicy::TResponse& response) = 0;
public:
@@ -202,8 +221,9 @@ public:
}
}
- TSessionedActorImpl(const NInternal::NRequest::TConfig& config)
+ TSessionedActorImpl(const NInternal::NRequest::TConfig& config, const NACLib::TUserToken& uToken)
: Config(config)
+ , UserToken(uToken)
{
}
@@ -222,7 +242,7 @@ public:
}
void Handle(typename TEvRequestStart::TPtr& /*ev*/) {
- TBase::Register(new TYDBRequest<TDialogCreateSession>(TDialogCreateSession::TRequest(), TBase::SelfId(), Config, TBase::SelfId()));
+ TBase::Register(new TYDBRequest<TDialogCreateSession>(TDialogCreateSession::TRequest(), UserToken, TBase::SelfId(), Config, TBase::SelfId()));
}
void Bootstrap() {
@@ -256,8 +276,9 @@ protected:
Output->OnReply(response);
}
public:
- TYQLQuerySessionedActor(const TString& query, const NInternal::NRequest::TConfig& config, IQueryOutput::TPtr output)
- : TBase(config)
+ TYQLQuerySessionedActor(const TString& query, const NACLib::TUserToken& uToken,
+ const NInternal::NRequest::TConfig& config, IQueryOutput::TPtr output)
+ : TBase(config, uToken)
, Query(query)
, Output(output)
{
diff --git a/ydb/services/metadata/secret/snapshot.cpp b/ydb/services/metadata/secret/snapshot.cpp
index 6adc494f8d..13264923a7 100644
--- a/ydb/services/metadata/secret/snapshot.cpp
+++ b/ydb/services/metadata/secret/snapshot.cpp
@@ -57,7 +57,7 @@ bool TSnapshot::PatchString(TString& stringForPath) const {
return true;
}
-bool TSnapshot::CheckSecretAccess(const TString& secretableString, const TMaybe<NACLib::TUserToken>& userToken) const {
+bool TSnapshot::CheckSecretAccess(const TString& secretableString, const std::optional<NACLib::TUserToken>& userToken) const {
if (!userToken) {
return true;
}
diff --git a/ydb/services/metadata/secret/snapshot.h b/ydb/services/metadata/secret/snapshot.h
index 73ff710930..d1f1ba5cab 100644
--- a/ydb/services/metadata/secret/snapshot.h
+++ b/ydb/services/metadata/secret/snapshot.h
@@ -18,7 +18,7 @@ protected:
virtual TString DoSerializeToString() const override;
public:
using TBase::TBase;
- bool CheckSecretAccess(const TString& secretableString, const TMaybe<NACLib::TUserToken>& userToken) const;
+ bool CheckSecretAccess(const TString& secretableString, const std::optional<NACLib::TUserToken>& userToken) const;
bool PatchString(TString& stringForPath) const;
};