3
3
#include < ydb/core/base/appdata.h>
4
4
#include < ydb/library/ydb_issue/issue_helpers.h>
5
5
#include < ydb/core/grpc_services/base/base.h>
6
+ #include < ydb/core/grpc_services/rpc_request_base.h>
6
7
#include < ydb/core/grpc_services/rpc_kqp_base.h>
7
8
#include < ydb/core/grpc_services/audit_dml_operations.h>
8
9
#include < ydb/core/grpc_services/grpc_integrity_trails.h>
@@ -72,27 +73,29 @@ std::tuple<Ydb::StatusIds::StatusCode, NYql::TIssues> FillKqpRequest(
72
73
return {Ydb::StatusIds::SUCCESS, {}};
73
74
}
74
75
75
- class TExecuteScriptRPC : public TActorBootstrapped <TExecuteScriptRPC> {
76
+ class TExecuteScriptRPC : public TRpcRequestActor <TExecuteScriptRPC, TEvExecuteScriptRequest, false > {
76
77
public:
78
+ using TRpcRequestActorBase = TRpcRequestActor<TExecuteScriptRPC, TEvExecuteScriptRequest, false >;
79
+
77
80
static constexpr NKikimrServices::TActivity::EType ActorActivityType () {
78
81
return NKikimrServices::TActivity::GRPC_REQ;
79
82
}
80
83
81
- TExecuteScriptRPC (TEvExecuteScriptRequest * request)
82
- : Request_ (request)
84
+ TExecuteScriptRPC (IRequestNoOpCtx * request)
85
+ : TRpcRequestActorBase (request)
83
86
{}
84
87
85
88
void Bootstrap () {
86
89
NYql::TIssues issues;
87
- const auto & request = *Request_-> GetProtoRequest ();
90
+ const auto & request = GetProtoRequest ();
88
91
89
- if (request. operation_params ().operation_mode () == Ydb::Operations::OperationParams::SYNC) {
92
+ if (request-> operation_params ().operation_mode () == Ydb::Operations::OperationParams::SYNC) {
90
93
issues.AddIssue (" ExecuteScript must be asyncronous operation" );
91
94
return Reply (Ydb::StatusIds::BAD_REQUEST, issues);
92
95
}
93
96
94
- AuditContextAppend (Request_. get (), request);
95
- NDataIntegrity::LogIntegrityTrails (Request_ ->GetTraceId (), request, TlsActivationContext->AsActorContext ());
97
+ AuditContextAppend (Request. Get (), request);
98
+ NDataIntegrity::LogIntegrityTrails (Request ->GetTraceId (), * request, TlsActivationContext->AsActorContext ());
96
99
97
100
Ydb::StatusIds::StatusCode status = Ydb::StatusIds::SUCCESS;
98
101
if (auto scriptRequest = MakeScriptRequest (issues, status)) {
@@ -113,7 +116,7 @@ class TExecuteScriptRPC : public TActorBootstrapped<TExecuteScriptRPC> {
113
116
)
114
117
115
118
void Handle(NKqp::TEvKqp::TEvScriptResponse::TPtr& ev, const TActorContext& ctx) {
116
- NDataIntegrity::LogIntegrityTrails (Request_ ->GetTraceId (), *Request_-> GetProtoRequest (), ev, ctx);
119
+ NDataIntegrity::LogIntegrityTrails (Request ->GetTraceId (), *GetProtoRequest (), ev, ctx);
117
120
118
121
Ydb::Operations::Operation operation;
119
122
operation.set_id (ev->Get ()->OperationId );
@@ -126,14 +129,14 @@ class TExecuteScriptRPC : public TActorBootstrapped<TExecuteScriptRPC> {
126
129
}
127
130
128
131
THolder<NKqp::TEvKqp::TEvScriptRequest> MakeScriptRequest (NYql::TIssues& issues, Ydb::StatusIds::StatusCode& status) const {
129
- const auto * req = Request_-> GetProtoRequest ();
130
- const auto traceId = Request_ ->GetTraceId ();
132
+ const auto * req = GetProtoRequest ();
133
+ const auto traceId = Request ->GetTraceId ();
131
134
132
135
auto ev = MakeHolder<NKqp::TEvKqp::TEvScriptRequest>();
133
136
134
- SetAuthToken (ev, *Request_ );
135
- SetDatabase (ev, *Request_ );
136
- SetRlPath (ev, *Request_ );
137
+ SetAuthToken (ev, *Request );
138
+ SetDatabase (ev, *Request );
139
+ SetRlPath (ev, *Request );
137
140
138
141
if (traceId) {
139
142
ev->Record .SetTraceId (traceId.GetRef ());
@@ -166,12 +169,9 @@ class TExecuteScriptRPC : public TActorBootstrapped<TExecuteScriptRPC> {
166
169
167
170
result.set_status (status);
168
171
169
- AuditContextAppend (Request_.get (), *Request_->GetProtoRequest (), result);
170
-
171
- TString serializedResult;
172
- Y_PROTOBUF_SUPPRESS_NODISCARD result.SerializeToString (&serializedResult);
172
+ AuditContextAppend (Request.Get (), GetProtoRequest (), result);
173
173
174
- Request_-> SendSerializedResult ( std::move (serializedResult) , status);
174
+ TProtoResponseHelper::SendProtoResponse (result , status, Request );
175
175
176
176
PassAway ();
177
177
}
@@ -181,9 +181,6 @@ class TExecuteScriptRPC : public TActorBootstrapped<TExecuteScriptRPC> {
181
181
result.set_ready (true );
182
182
Reply (status, std::move (result), issues);
183
183
}
184
-
185
- private:
186
- std::unique_ptr<TEvExecuteScriptRequest> Request_;
187
184
};
188
185
189
186
} // namespace
@@ -197,6 +194,11 @@ void DoExecuteScript(std::unique_ptr<IRequestNoOpCtx> p, const IFacilityProvider
197
194
f.RegisterActor (new TExecuteScriptRPC (req));
198
195
}
199
196
197
+ } // namespace NQuery
198
+
199
+ template <>
200
+ IActor* TEvExecuteScriptRequest::CreateRpcActor (IRequestNoOpCtx* msg) {
201
+ return new TExecuteScriptRPC (msg);
200
202
}
201
203
202
204
} // namespace NKikimr::NGRpcService
0 commit comments