@@ -62,7 +62,7 @@ class TSessionInfo {
6262 const auto actorId = res.first ->second ;
6363 ActorIdToWorkerId.emplace (actorId, id);
6464
65- SendWorkerStatus (ops, id, NKikimrReplication::TEvWorkerStatus::RUNNING );
65+ SendWorkerStatus (ops, id, NKikimrReplication::TEvWorkerStatus::STATUS_RUNNING );
6666 return actorId;
6767 }
6868
@@ -71,25 +71,27 @@ class TSessionInfo {
7171 Y_ABORT_UNLESS (it != Workers.end ());
7272
7373 ops->Send (it->second , new TEvents::TEvPoison ());
74- SendWorkerStatus (ops, id, NKikimrReplication::TEvWorkerStatus::STOPPED );
74+ SendWorkerStatus (ops, id, NKikimrReplication::TEvWorkerStatus::STATUS_STOPPED );
7575
7676 ActorIdToWorkerId.erase (it->second );
7777 Workers.erase (it);
7878 }
7979
80- void StopWorker (IActorOps* ops, const TActorId& id) {
80+ template <typename ... Args>
81+ void StopWorker (IActorOps* ops, const TActorId& id, Args&&... args) {
8182 auto it = ActorIdToWorkerId.find (id);
8283 Y_ABORT_UNLESS (it != ActorIdToWorkerId.end ());
8384
8485 // actor already stopped
85- SendWorkerStatus (ops, it->second , NKikimrReplication::TEvWorkerStatus::STOPPED );
86+ SendWorkerStatus (ops, it->second , NKikimrReplication::TEvWorkerStatus::STATUS_STOPPED, std::forward<Args>(args)... );
8687
8788 Workers.erase (it->second );
8889 ActorIdToWorkerId.erase (it);
8990 }
9091
91- void SendWorkerStatus (IActorOps* ops, const TWorkerId& id, NKikimrReplication::TEvWorkerStatus::EStatus status) {
92- ops->Send (ActorId, new TEvService::TEvWorkerStatus (id, status));
92+ template <typename ... Args>
93+ void SendWorkerStatus (IActorOps* ops, const TWorkerId& id, Args&&... args) {
94+ ops->Send (ActorId, new TEvService::TEvWorkerStatus (id, std::forward<Args>(args)...));
9395 }
9496
9597 void SendStatus (IActorOps* ops) const {
@@ -273,7 +275,7 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
273275 }
274276
275277 if (session.HasWorker (id)) {
276- return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::RUNNING );
278+ return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::STATUS_RUNNING );
277279 }
278280
279281 LOG_I (" Run worker"
@@ -315,7 +317,7 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
315317 }
316318
317319 if (!session.HasWorker (id)) {
318- return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::STOPPED );
320+ return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::STATUS_STOPPED );
319321 }
320322
321323 LOG_I (" Stop worker"
@@ -353,7 +355,16 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
353355 LOG_I (" Worker has gone"
354356 << " : worker# " << ev->Sender );
355357 WorkerActorIdToSession.erase (ev->Sender );
356- session.StopWorker (this , ev->Sender );
358+ session.StopWorker (this , ev->Sender , ToReason (ev->Get ()->Status ), ev->Get ()->ErrorDescription );
359+ }
360+
361+ static NKikimrReplication::TEvWorkerStatus::EReason ToReason (TEvWorker::TEvGone::EStatus status) {
362+ switch (status) {
363+ case TEvWorker::TEvGone::SCHEME_ERROR:
364+ return NKikimrReplication::TEvWorkerStatus::REASON_ERROR;
365+ default :
366+ return NKikimrReplication::TEvWorkerStatus::REASON_UNSPECIFIED;
367+ }
357368 }
358369
359370 void PassAway () override {
0 commit comments