@@ -18,9 +18,12 @@ namespace NKikimr::NGRpcService {
1818using namespace Ydb ;
1919
2020using TEvDescribeReplication = TGrpcRequestOperationCall<Replication::DescribeReplicationRequest, Replication::DescribeReplicationResponse>;
21+ using TEvDescribeTransfer = TGrpcRequestOperationCall<Replication::DescribeTransferRequest, Replication::DescribeTransferResponse>;
2122
22- class TDescribeReplicationRPC : public TRpcSchemeRequestActor <TDescribeReplicationRPC, TEvDescribeReplication> {
23- using TBase = TRpcSchemeRequestActor<TDescribeReplicationRPC, TEvDescribeReplication>;
23+ template <typename TReq, typename TResp, typename TResult>
24+ class TDescribeReplicationRPC : public TRpcSchemeRequestActor <TDescribeReplicationRPC<TReq, TResp, TResult>, TGrpcRequestOperationCall<TReq, TResp>> {
25+ using TBase = TRpcSchemeRequestActor<TDescribeReplicationRPC<TReq, TResp, TResult>, TGrpcRequestOperationCall<TReq, TResp>>;
26+ using TThis = TDescribeReplicationRPC<TReq, TResp, TResult>;
2427
2528public:
2629 using TBase::TBase;
@@ -31,7 +34,7 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
3134
3235 void PassAway () override {
3336 if (ControllerPipeClient) {
34- NTabletPipe::CloseAndForgetClient (SelfId (), ControllerPipeClient);
37+ NTabletPipe::CloseAndForgetClient (TBase:: SelfId (), ControllerPipeClient);
3538 }
3639
3740 TBase::PassAway ();
@@ -40,12 +43,12 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
4043private:
4144 void DescribeScheme () {
4245 auto ev = std::make_unique<TEvTxUserProxy::TEvNavigate>();
43- SetAuthToken (ev, *Request_);
44- SetDatabase (ev.get (), *Request_);
45- ev->Record .MutableDescribePath ()->SetPath (GetProtoRequest ()->path ());
46+ SetAuthToken (ev, *TBase:: Request_);
47+ SetDatabase (ev.get (), *TBase:: Request_);
48+ ev->Record .MutableDescribePath ()->SetPath (TBase:: GetProtoRequest ()->path ());
4649
47- Send (MakeTxProxyID (), ev.release ());
48- Become (&TDescribeReplicationRPC ::StateDescribeScheme);
50+ TBase:: Send (MakeTxProxyID (), ev.release ());
51+ TBase:: Become (&TThis ::StateDescribeScheme);
4952 }
5053
5154 STATEFN (StateDescribeScheme) {
@@ -62,7 +65,7 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
6265
6366 if (record.HasReason ()) {
6467 auto issue = NYql::TIssue (record.GetReason ());
65- Request_->RaiseIssue (issue);
68+ TBase:: Request_->RaiseIssue (issue);
6669 }
6770
6871 switch (record.GetStatus ()) {
@@ -73,8 +76,8 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
7376 break ;
7477 default : {
7578 auto issue = NYql::TIssue (" Is not a replication" );
76- Request_->RaiseIssue (issue);
77- return Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
79+ TBase:: Request_->RaiseIssue (issue);
80+ return TBase:: Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
7881 }
7982 }
8083
@@ -84,16 +87,16 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
8487
8588 case NKikimrScheme::StatusPathDoesNotExist:
8689 case NKikimrScheme::StatusSchemeError:
87- return Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
90+ return TBase:: Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
8891
8992 case NKikimrScheme::StatusAccessDenied:
90- return Reply (Ydb::StatusIds::UNAUTHORIZED, ctx);
93+ return TBase:: Reply (Ydb::StatusIds::UNAUTHORIZED, ctx);
9194
9295 case NKikimrScheme::StatusNotAvailable:
93- return Reply (Ydb::StatusIds::UNAVAILABLE, ctx);
96+ return TBase:: Reply (Ydb::StatusIds::UNAVAILABLE, ctx);
9497
9598 default : {
96- return Reply (Ydb::StatusIds::GENERIC_ERROR, ctx);
99+ return TBase:: Reply (Ydb::StatusIds::GENERIC_ERROR, ctx);
97100 }
98101 }
99102 }
@@ -104,15 +107,15 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
104107 config.RetryPolicy = {
105108 .RetryLimitCount = 3 ,
106109 };
107- ControllerPipeClient = Register (NTabletPipe::CreateClient (SelfId (), tabletId, config));
110+ ControllerPipeClient = TBase:: Register (NTabletPipe::CreateClient (TBase:: SelfId (), tabletId, config));
108111 }
109112
110113 auto ev = std::make_unique<NReplication::TEvController::TEvDescribeReplication>();
111114 pathId.ToProto (ev->Record .MutablePathId ());
112- ev-> Record . SetIncludeStats ( GetProtoRequest ()-> include_stats () );
115+ BuildRequest ( TBase:: GetProtoRequest (), ev-> Record );
113116
114- NTabletPipe::SendData (SelfId (), ControllerPipeClient, ev.release ());
115- Become (&TDescribeReplicationRPC ::StateDescribeReplication);
117+ NTabletPipe::SendData (TBase:: SelfId (), ControllerPipeClient, ev.release ());
118+ TBase:: Become (&TThis ::StateDescribeReplication);
116119 }
117120
118121 STATEFN (StateDescribeReplication) {
@@ -130,20 +133,14 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
130133 case NKikimrReplication::TEvDescribeReplicationResult::SUCCESS:
131134 break ;
132135 case NKikimrReplication::TEvDescribeReplicationResult::NOT_FOUND:
133- return Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
136+ return TBase:: Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
134137 default :
135- return Reply (Ydb::StatusIds::INTERNAL_ERROR, ctx);
138+ return TBase:: Reply (Ydb::StatusIds::INTERNAL_ERROR, ctx);
136139 }
137140
138- ConvertConnectionParams (record.GetConnectionParams (), *Result.mutable_connection_params ());
139- ConvertConsistencySettings (record.GetConsistencySettings (), Result);
140- ConvertState (*record.MutableState (), Result);
141+ Convert (record, Result);
141142
142- for (const auto & target : record.GetTargets ()) {
143- ConvertItem (target, *Result.add_items ());
144- }
145-
146- return ReplyWithResult (Ydb::StatusIds::SUCCESS, Result, ctx);
143+ return TBase::ReplyWithResult (Ydb::StatusIds::SUCCESS, Result, ctx);
147144 }
148145
149146 static TString BuildConnectionString (const NKikimrReplication::TConnectionParams& params) {
@@ -214,17 +211,26 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
214211 }
215212 }
216213
217- static void ConvertState (NKikimrReplication::TReplicationState& from, Ydb::Replication::DescribeReplicationResult& to) {
214+ static void ConvertStats (NKikimrReplication::TReplicationState& from, Ydb::Replication::DescribeReplicationResult& to) {
215+ if (from.GetStandBy ().HasLagMilliSeconds ()) {
216+ *to.mutable_running ()->mutable_stats ()->mutable_lag () = google::protobuf::util::TimeUtil::MillisecondsToDuration (
217+ from.GetStandBy ().GetLagMilliSeconds ());
218+ }
219+ if (from.GetStandBy ().HasInitialScanProgress ()) {
220+ to.mutable_running ()->mutable_stats ()->set_initial_scan_progress (from.GetStandBy ().GetInitialScanProgress ());
221+ }
222+ }
223+
224+ static void ConvertStats (NKikimrReplication::TReplicationState&, Ydb::Replication::DescribeTransferResult&) {
225+ // nop
226+ }
227+
228+ template <typename T>
229+ static void ConvertState (NKikimrReplication::TReplicationState& from, T& to) {
218230 switch (from.GetStateCase ()) {
219231 case NKikimrReplication::TReplicationState::kStandBy :
220232 to.mutable_running ();
221- if (from.GetStandBy ().HasLagMilliSeconds ()) {
222- *to.mutable_running ()->mutable_stats ()->mutable_lag () = google::protobuf::util::TimeUtil::MillisecondsToDuration (
223- from.GetStandBy ().GetLagMilliSeconds ());
224- }
225- if (from.GetStandBy ().HasInitialScanProgress ()) {
226- to.mutable_running ()->mutable_stats ()->set_initial_scan_progress (from.GetStandBy ().GetInitialScanProgress ());
227- }
233+ ConvertStats (from, to);
228234 break ;
229235 case NKikimrReplication::TReplicationState::kError :
230236 *to.mutable_error ()->mutable_issues () = std::move (*from.MutableError ()->MutableIssues ());
@@ -240,20 +246,65 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
240246 }
241247 }
242248
249+ static void Convert (NKikimrReplication::TEvDescribeReplicationResult& record, Replication::DescribeReplicationResult& result) {
250+ ConvertConnectionParams (record.GetConnectionParams (), *result.mutable_connection_params ());
251+ ConvertConsistencySettings (record.GetConsistencySettings (), result);
252+ ConvertState (*record.MutableState (), result);
253+
254+ for (const auto & target : record.GetTargets ()) {
255+ ConvertItem (target, *result.add_items ());
256+ }
257+ }
258+
259+ static void Convert (NKikimrReplication::TEvDescribeReplicationResult& record, Replication::DescribeTransferResult& result) {
260+ ConvertConnectionParams (record.GetConnectionParams (), *result.mutable_connection_params ());
261+ ConvertState (*record.MutableState (), result);
262+
263+ const auto & transferSpecific = record.GetTransferSpecific ();
264+ result.set_source_path (transferSpecific.GetTarget ().GetSrcPath ());
265+ result.set_destination_path (transferSpecific.GetTarget ().GetDstPath ());
266+ result.set_consumer_name (transferSpecific.GetTarget ().GetConsumerName ());
267+ result.set_transformation_lambda (transferSpecific.GetTarget ().GetTransformLambda ());
268+ result.mutable_batch_settings ()->set_size_bytes (transferSpecific.GetBatching ().GetBatchSizeBytes ());
269+ result.mutable_batch_settings ()->mutable_flush_interval ()->set_seconds (transferSpecific.GetBatching ().GetFlushIntervalMilliSeconds () / 1000 );
270+ }
271+
272+ static void BuildRequest (const Replication::DescribeReplicationRequest* from, NKikimrReplication::TEvDescribeReplication& to) {
273+ to.SetIncludeStats (from->include_stats ());
274+ }
275+
276+ static void BuildRequest (const Replication::DescribeTransferRequest*, NKikimrReplication::TEvDescribeReplication&) {
277+ // nop
278+ }
279+
243280private:
244- Ydb::Replication::DescribeReplicationResult Result;
281+ TResult Result;
245282 TActorId ControllerPipeClient;
246283};
247284
285+ using TDescribeReplicationActor = TDescribeReplicationRPC<Replication::DescribeReplicationRequest, Replication::DescribeReplicationResponse, Replication::DescribeReplicationResult>;
286+ using TDescribeTransferActor = TDescribeReplicationRPC<Replication::DescribeTransferRequest, Replication::DescribeTransferResponse, Replication::DescribeTransferResult>;
287+
248288void DoDescribeReplication (std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider& f) {
249- f.RegisterActor (new TDescribeReplicationRPC (p.release ()));
289+ f.RegisterActor (new TDescribeReplicationActor (p.release ()));
290+ }
291+
292+ void DoDescribeTransfer (std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider& f) {
293+ f.RegisterActor (new TDescribeTransferActor (p.release ()));
250294}
251295
252296using TEvDescribeReplicationRequest = TGrpcRequestOperationCall<Ydb::Replication::DescribeReplicationRequest, Ydb::Replication::DescribeReplicationResponse>;
253297
254298template <>
255299IActor* TEvDescribeReplicationRequest::CreateRpcActor (NKikimr::NGRpcService::IRequestOpCtx* msg) {
256- return new TDescribeReplicationRPC (msg);
300+ return new TDescribeReplicationActor (msg);
301+ }
302+
303+ using TEvDescribeTransferRequest = TGrpcRequestOperationCall<Ydb::Replication::DescribeTransferRequest, Ydb::Replication::DescribeTransferResponse>;
304+
305+ template <>
306+ IActor* TEvDescribeTransferRequest::CreateRpcActor (NKikimr::NGRpcService::IRequestOpCtx* msg) {
307+ return new TDescribeTransferActor (msg);
257308}
258309
259310}
0 commit comments