@@ -18,9 +18,12 @@ namespace NKikimr::NGRpcService {
18
18
using namespace Ydb ;
19
19
20
20
using TEvDescribeReplication = TGrpcRequestOperationCall<Replication::DescribeReplicationRequest, Replication::DescribeReplicationResponse>;
21
+ using TEvDescribeTransfer = TGrpcRequestOperationCall<Replication::DescribeTransferRequest, Replication::DescribeTransferResponse>;
21
22
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>;
24
27
25
28
public:
26
29
using TBase::TBase;
@@ -31,7 +34,7 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
31
34
32
35
void PassAway () override {
33
36
if (ControllerPipeClient) {
34
- NTabletPipe::CloseAndForgetClient (SelfId (), ControllerPipeClient);
37
+ NTabletPipe::CloseAndForgetClient (TBase:: SelfId (), ControllerPipeClient);
35
38
}
36
39
37
40
TBase::PassAway ();
@@ -40,12 +43,12 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
40
43
private:
41
44
void DescribeScheme () {
42
45
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 ());
46
49
47
- Send (MakeTxProxyID (), ev.release ());
48
- Become (&TDescribeReplicationRPC ::StateDescribeScheme);
50
+ TBase:: Send (MakeTxProxyID (), ev.release ());
51
+ TBase:: Become (&TThis ::StateDescribeScheme);
49
52
}
50
53
51
54
STATEFN (StateDescribeScheme) {
@@ -62,7 +65,7 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
62
65
63
66
if (record.HasReason ()) {
64
67
auto issue = NYql::TIssue (record.GetReason ());
65
- Request_->RaiseIssue (issue);
68
+ TBase:: Request_->RaiseIssue (issue);
66
69
}
67
70
68
71
switch (record.GetStatus ()) {
@@ -73,8 +76,8 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
73
76
break ;
74
77
default : {
75
78
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);
78
81
}
79
82
}
80
83
@@ -84,16 +87,16 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
84
87
85
88
case NKikimrScheme::StatusPathDoesNotExist:
86
89
case NKikimrScheme::StatusSchemeError:
87
- return Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
90
+ return TBase:: Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
88
91
89
92
case NKikimrScheme::StatusAccessDenied:
90
- return Reply (Ydb::StatusIds::UNAUTHORIZED, ctx);
93
+ return TBase:: Reply (Ydb::StatusIds::UNAUTHORIZED, ctx);
91
94
92
95
case NKikimrScheme::StatusNotAvailable:
93
- return Reply (Ydb::StatusIds::UNAVAILABLE, ctx);
96
+ return TBase:: Reply (Ydb::StatusIds::UNAVAILABLE, ctx);
94
97
95
98
default : {
96
- return Reply (Ydb::StatusIds::GENERIC_ERROR, ctx);
99
+ return TBase:: Reply (Ydb::StatusIds::GENERIC_ERROR, ctx);
97
100
}
98
101
}
99
102
}
@@ -104,15 +107,15 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
104
107
config.RetryPolicy = {
105
108
.RetryLimitCount = 3 ,
106
109
};
107
- ControllerPipeClient = Register (NTabletPipe::CreateClient (SelfId (), tabletId, config));
110
+ ControllerPipeClient = TBase:: Register (NTabletPipe::CreateClient (TBase:: SelfId (), tabletId, config));
108
111
}
109
112
110
113
auto ev = std::make_unique<NReplication::TEvController::TEvDescribeReplication>();
111
114
pathId.ToProto (ev->Record .MutablePathId ());
112
- ev-> Record . SetIncludeStats ( GetProtoRequest ()-> include_stats () );
115
+ BuildRequest ( TBase:: GetProtoRequest (), ev-> Record );
113
116
114
- NTabletPipe::SendData (SelfId (), ControllerPipeClient, ev.release ());
115
- Become (&TDescribeReplicationRPC ::StateDescribeReplication);
117
+ NTabletPipe::SendData (TBase:: SelfId (), ControllerPipeClient, ev.release ());
118
+ TBase:: Become (&TThis ::StateDescribeReplication);
116
119
}
117
120
118
121
STATEFN (StateDescribeReplication) {
@@ -130,20 +133,14 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
130
133
case NKikimrReplication::TEvDescribeReplicationResult::SUCCESS:
131
134
break ;
132
135
case NKikimrReplication::TEvDescribeReplicationResult::NOT_FOUND:
133
- return Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
136
+ return TBase:: Reply (Ydb::StatusIds::SCHEME_ERROR, ctx);
134
137
default :
135
- return Reply (Ydb::StatusIds::INTERNAL_ERROR, ctx);
138
+ return TBase:: Reply (Ydb::StatusIds::INTERNAL_ERROR, ctx);
136
139
}
137
140
138
- ConvertConnectionParams (record.GetConnectionParams (), *Result.mutable_connection_params ());
139
- ConvertConsistencySettings (record.GetConsistencySettings (), Result);
140
- ConvertState (*record.MutableState (), Result);
141
+ Convert (record, Result);
141
142
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);
147
144
}
148
145
149
146
static TString BuildConnectionString (const NKikimrReplication::TConnectionParams& params) {
@@ -214,17 +211,26 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
214
211
}
215
212
}
216
213
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) {
218
230
switch (from.GetStateCase ()) {
219
231
case NKikimrReplication::TReplicationState::kStandBy :
220
232
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);
228
234
break ;
229
235
case NKikimrReplication::TReplicationState::kError :
230
236
*to.mutable_error ()->mutable_issues () = std::move (*from.MutableError ()->MutableIssues ());
@@ -240,20 +246,65 @@ class TDescribeReplicationRPC: public TRpcSchemeRequestActor<TDescribeReplicatio
240
246
}
241
247
}
242
248
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
+
243
280
private:
244
- Ydb::Replication::DescribeReplicationResult Result;
281
+ TResult Result;
245
282
TActorId ControllerPipeClient;
246
283
};
247
284
285
+ using TDescribeReplicationActor = TDescribeReplicationRPC<Replication::DescribeReplicationRequest, Replication::DescribeReplicationResponse, Replication::DescribeReplicationResult>;
286
+ using TDescribeTransferActor = TDescribeReplicationRPC<Replication::DescribeTransferRequest, Replication::DescribeTransferResponse, Replication::DescribeTransferResult>;
287
+
248
288
void 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 ()));
250
294
}
251
295
252
296
using TEvDescribeReplicationRequest = TGrpcRequestOperationCall<Ydb::Replication::DescribeReplicationRequest, Ydb::Replication::DescribeReplicationResponse>;
253
297
254
298
template <>
255
299
IActor* 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);
257
308
}
258
309
259
310
}
0 commit comments