aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Khoroshilov <hor911@gmail.com>2022-04-17 21:26:32 +0300
committerAleksandr Khoroshilov <hor911@gmail.com>2022-04-17 21:26:32 +0300
commit34dae6b0e0d291a015e3f01180f9da698f89bb40 (patch)
tree312954afcd7e17f091547da7ba0b6193009ad74e
parent5bed5382e7721c26dbcb112ac10077fccdb1dc56 (diff)
downloadydb-34dae6b0e0d291a015e3f01180f9da698f89bb40.tar.gz
Event dedup
ref:4bbdbe1b16c3e3bb4dab6fe00dd88ef2267067f4
-rw-r--r--ydb/core/yq/libs/actors/pinger.cpp5
-rw-r--r--ydb/core/yq/libs/private_client/internal_service.h77
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();