diff options
author | Aleksandr Khoroshilov <hor911@gmail.com> | 2022-04-17 21:26:32 +0300 |
---|---|---|
committer | Aleksandr Khoroshilov <hor911@gmail.com> | 2022-04-17 21:26:32 +0300 |
commit | 34dae6b0e0d291a015e3f01180f9da698f89bb40 (patch) | |
tree | 312954afcd7e17f091547da7ba0b6193009ad74e | |
parent | 5bed5382e7721c26dbcb112ac10077fccdb1dc56 (diff) | |
download | ydb-34dae6b0e0d291a015e3f01180f9da698f89bb40.tar.gz |
Event dedup
ref:4bbdbe1b16c3e3bb4dab6fe00dd88ef2267067f4
-rw-r--r-- | ydb/core/yq/libs/actors/pinger.cpp | 5 | ||||
-rw-r--r-- | ydb/core/yq/libs/private_client/internal_service.h | 77 |
2 files changed, 19 insertions, 63 deletions
diff --git a/ydb/core/yq/libs/actors/pinger.cpp b/ydb/core/yq/libs/actors/pinger.cpp index fa3a0f207ce..9b44b864199 100644 --- a/ydb/core/yq/libs/actors/pinger.cpp +++ b/ydb/core/yq/libs/actors/pinger.cpp @@ -319,7 +319,7 @@ private: if (success) { LOG_D("Ping response success: " << ev->Get()->Result); StartLeaseTime = now; - auto action = ev->Get()->GetAction(); + auto action = ev->Get()->Result.action(); if (action != YandexQuery::QUERY_ACTION_UNSPECIFIED && !Finishing) { LOG_D("Query action: " << YandexQuery::QueryAction_Name(action)); SendQueryAction(action); @@ -345,7 +345,8 @@ private: retryStateForLogging = continueLeaseRequest ? &RetryState : &ForwardRequests.front().RetryState; } LOG_E("Ping response error: " << ev->Get()->Issues.ToOneLineString() << ". Retried " << retryStateForLogging->GetRetriesCount() << " times during " << retryStateForLogging->GetRetryTime(now)); - Send(Parent, new TEvents::TEvForwardPingResponse(false, ev->Get()->GetAction()), 0, ev->Cookie); + auto action = ev->Get()->Success ? ev->Get()->Result.action() : YandexQuery::QUERY_ACTION_UNSPECIFIED; + Send(Parent, new TEvents::TEvForwardPingResponse(false, action), 0, ev->Cookie); FatalError = true; ForwardRequests.clear(); } diff --git a/ydb/core/yq/libs/private_client/internal_service.h b/ydb/core/yq/libs/private_client/internal_service.h index 37f577c64ae..207a1b7fd3f 100644 --- a/ydb/core/yq/libs/private_client/internal_service.h +++ b/ydb/core/yq/libs/private_client/internal_service.h @@ -29,81 +29,36 @@ struct TEvInternalService { static_assert(EvEnd <= YqEventSubspaceEnd(NYq::TYqEventSubspace::InternalService), "All events must be in their subspace"); - struct TEvHealthCheckRequest : public NActors::TEventLocal<TEvHealthCheckRequest, EvHealthCheckRequest> { - Yq::Private::NodesHealthCheckRequest Request; + template <class TProtoRequest, ui32 TEventType> + struct TInternalServiceRequestEvent : public NActors::TEventLocal<TInternalServiceRequestEvent<TProtoRequest, TEventType>, TEventType> { + TProtoRequest Request; TInstant SentAt; - explicit TEvHealthCheckRequest(const Yq::Private::NodesHealthCheckRequest& request) + explicit TInternalServiceRequestEvent(const TProtoRequest& request) : Request(request), SentAt(Now()) { } }; - struct TEvHealthCheckResponse : public NActors::TEventLocal<TEvHealthCheckResponse, EvHealthCheckResponse>{ - bool Success; - NYdb::EStatus Status; - const NYql::TIssues Issues; - Yq::Private::NodesHealthCheckResult Result; - TEvHealthCheckResponse(bool success, NYdb::EStatus status, const NYql::TIssues& issues, const Yq::Private::NodesHealthCheckResult& result) - : Success(success), Status(status), Issues(issues), Result(result) - { } - }; - - struct TEvGetTaskRequest : public NActors::TEventLocal<TEvGetTaskRequest, EvGetTaskRequest> { - Yq::Private::GetTaskRequest Request; - TInstant SentAt; - explicit TEvGetTaskRequest(const Yq::Private::GetTaskRequest& request) - : Request(request), SentAt(Now()) - { } - }; - - struct TEvGetTaskResponse : public NActors::TEventLocal<TEvGetTaskResponse, EvGetTaskResponse> { - bool Success = false; - NYdb::EStatus Status; - const NYql::TIssues Issues; - const Yq::Private::GetTaskResult Result; - TEvGetTaskResponse(bool success, NYdb::EStatus status, const NYql::TIssues& issues, const Yq::Private::GetTaskResult& result) - : Success(success), Status(status), Issues(issues), Result(result) - { } - }; + using TEvHealthCheckRequest = TInternalServiceRequestEvent<Yq::Private::NodesHealthCheckRequest, EvHealthCheckRequest>; + using TEvGetTaskRequest = TInternalServiceRequestEvent<Yq::Private::GetTaskRequest, EvGetTaskRequest>; + using TEvPingTaskRequest = TInternalServiceRequestEvent<Yq::Private::PingTaskRequest, EvPingTaskRequest>; + using TEvWriteResultRequest = TInternalServiceRequestEvent<Yq::Private::WriteTaskResultRequest, EvWriteResultRequest>; - struct TEvPingTaskRequest : public NActors::TEventLocal<TEvPingTaskRequest, EvPingTaskRequest> { - Yq::Private::PingTaskRequest Request; - TInstant SentAt; - explicit TEvPingTaskRequest(const Yq::Private::PingTaskRequest& request) - : Request(request), SentAt(Now()) - { } - }; - - struct TEvPingTaskResponse : public NActors::TEventLocal<TEvPingTaskResponse, EvPingTaskResponse> { + template <class TProtoResult, ui32 TEventType> + struct TInternalServiceResponseEvent : public NActors::TEventLocal<TInternalServiceResponseEvent<TProtoResult, TEventType>, TEventType> { bool Success = false; NYdb::EStatus Status; const NYql::TIssues Issues; - const Yq::Private::PingTaskResult Result; + TProtoResult Result; bool TransportError = false; - TEvPingTaskResponse(bool success, NYdb::EStatus status, const NYql::TIssues& issues, const Yq::Private::PingTaskResult& result, bool transportError = false) + explicit TInternalServiceResponseEvent(bool success, NYdb::EStatus status, const NYql::TIssues& issues, const TProtoResult& result, bool transportError = false) : Success(success), Status(status), Issues(issues), Result(result), TransportError(transportError) { } - YandexQuery::QueryAction GetAction() { - return Success ? Result.action() : YandexQuery::QUERY_ACTION_UNSPECIFIED; - } }; - struct TEvWriteResultRequest : public NActors::TEventLocal<TEvWriteResultRequest, EvWriteResultRequest> { - Yq::Private::WriteTaskResultRequest Request; - TInstant SentAt; - explicit TEvWriteResultRequest(const Yq::Private::WriteTaskResultRequest& request) - : Request(request), SentAt(Now()) - { } - }; - - struct TEvWriteResultResponse : public NActors::TEventLocal<TEvWriteResultResponse, EvWriteResultResponse> { - bool Success = false; - NYdb::EStatus Status; - const NYql::TIssues Issues; - const Yq::Private::WriteTaskResultResult Result; - TEvWriteResultResponse(bool success, NYdb::EStatus status, const NYql::TIssues& issues, const Yq::Private::WriteTaskResultResult& result) - : Success(success), Status(status), Issues(issues), Result(result) - { } - }; + using TEvHealthCheckResponse = TInternalServiceResponseEvent<Yq::Private::NodesHealthCheckResult, EvHealthCheckResponse>; + using TEvGetTaskResponse = TInternalServiceResponseEvent<Yq::Private::GetTaskResult, EvGetTaskResponse>; + using TEvPingTaskResponse = TInternalServiceResponseEvent<Yq::Private::PingTaskResult, EvPingTaskResponse>; + using TEvWriteResultResponse = TInternalServiceResponseEvent<Yq::Private::WriteTaskResultResult, EvWriteResultResponse>; }; NActors::TActorId MakeInternalServiceActorId(); |