@@ -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 {
@@ -274,7 +276,7 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
274276 }
275277
276278 if (session.HasWorker (id)) {
277- return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::RUNNING );
279+ return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::STATUS_RUNNING );
278280 }
279281
280282 LOG_I (" Run worker"
@@ -316,7 +318,7 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
316318 }
317319
318320 if (!session.HasWorker (id)) {
319- return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::STOPPED );
321+ return session.SendWorkerStatus (this , id, NKikimrReplication::TEvWorkerStatus::STATUS_STOPPED );
320322 }
321323
322324 LOG_I (" Stop worker"
@@ -354,7 +356,16 @@ class TReplicationService: public TActorBootstrapped<TReplicationService> {
354356 LOG_I (" Worker has gone"
355357 << " : worker# " << ev->Sender );
356358 WorkerActorIdToSession.erase (ev->Sender );
357- session.StopWorker (this , ev->Sender );
359+ session.StopWorker (this , ev->Sender , ToReason (ev->Get ()->Status ), ev->Get ()->ErrorDescription );
360+ }
361+
362+ static NKikimrReplication::TEvWorkerStatus::EReason ToReason (TEvWorker::TEvGone::EStatus status) {
363+ switch (status) {
364+ case TEvWorker::TEvGone::SCHEME_ERROR:
365+ return NKikimrReplication::TEvWorkerStatus::REASON_ERROR;
366+ default :
367+ return NKikimrReplication::TEvWorkerStatus::REASON_UNSPECIFIED;
368+ }
358369 }
359370
360371 void PassAway () override {
0 commit comments