aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordinmukhammed <dinmukhammed@yandex-team.ru>2022-02-11 20:01:55 +0300
committerdinmukhammed <dinmukhammed@yandex-team.ru>2022-02-11 20:01:55 +0300
commit2a307bcbf7913175505081578c9f70f76071bd6e (patch)
treeca9b0542f0c51b6cfbb019f0a2235e95052ad3c6
parent3028ff5a15464a1f5b4fe8ad0c4761dbd5272c29 (diff)
downloadydb-2a307bcbf7913175505081578c9f70f76071bd6e.tar.gz
YQ-845 Fixed getting values from cache in DatabaseResolver
Fix getting cache values ref:347b3b30696f58a6232e453292b1609fe46857d8
-rw-r--r--ydb/core/yq/libs/actors/database_resolver.cpp41
-rw-r--r--ydb/core/yq/libs/db_resolver/db_async_resolver_impl.cpp4
2 files changed, 32 insertions, 13 deletions
diff --git a/ydb/core/yq/libs/actors/database_resolver.cpp b/ydb/core/yq/libs/actors/database_resolver.cpp
index db30bd7183b..28402cb7d80 100644
--- a/ydb/core/yq/libs/actors/database_resolver.cpp
+++ b/ydb/core/yq/libs/actors/database_resolver.cpp
@@ -264,6 +264,20 @@ private:
cFunc(NActors::TEvents::TEvPoison::EventType, PassAway);
});
+ void SendResponse(
+ const NActors::TActorId& recipient,
+ THashMap<std::pair<TString, DatabaseType>, TEndpoint>&& ready,
+ bool success = true,
+ const TString& errorMessage = "")
+ {
+ LOG_D("Reply: Success: " << success << ", Errors: " << (errorMessage ? errorMessage : "no"));
+ NYql::TIssues issues;
+ if (errorMessage)
+ issues.AddIssue(errorMessage);
+ Send(recipient,
+ new TEvents::TEvEndpointResponse(TEvents::TDbResolverResponse{std::move(ready), success, issues}));
+ }
+
void Handle(TEvents::TEvEndpointRequest::TPtr ev, const TActorContext& ctx)
{
TraceId = ev->Get()->TraceId;
@@ -272,13 +286,21 @@ private:
THashMap<std::pair<TString, DatabaseType>, TEndpoint> ready;
for (const auto& [p, info] : ev->Get()->DatabaseIds) {
const auto& [databaseId, type] = p;
- TMaybe<std::variant<TEndpoint, TString>> endpoint;
+ TMaybe<std::variant<TEndpoint, TString>> cacheVal;
auto key = std::make_tuple(databaseId, type, info);
- if (Cache.Get(key, &endpoint)) {
- if (endpoint) {
- ready.insert(std::make_pair(p,
- (endpoint->index() == 0 ? std::get<0>(*endpoint) : TEndpoint{})
- ));
+ if (Cache.Get(key, &cacheVal)) {
+ switch(cacheVal->index()) {
+ case 0U: {
+ ready.insert(std::make_pair(p, std::get<0U>(*cacheVal)));
+ break;
+ }
+ case 1U: {
+ SendResponse(ev->Sender, {}, false, std::get<1U>(*cacheVal));
+ return;
+ }
+ default: {
+ LOG_E("Unsupported cache's value type");
+ }
}
continue;
}
@@ -302,10 +324,7 @@ private:
const TString msg = TStringBuilder() << " Error while preparing to resolve databaseId: " << databaseId << ", details: " << e.what();
LOG_E(msg);
Cache.Put(key, msg);
- NYql::TIssues issues;
- issues.AddIssue(msg);
- Send(ev->Sender,
- new TEvents::TEvEndpointResponse(TEvents::TDbResolverResponse{{}, /*success=*/false, issues}));
+ SendResponse(ev->Sender, {}, /*success=*/false, msg);
return;
}
}
@@ -318,7 +337,7 @@ private:
ctx.Send(new IEventHandle(HttpProxy, helper, new NHttp::TEvHttpProxy::TEvHttpOutgoingRequest(request)));
}
} else {
- Send(ev->Sender, new TEvents::TEvEndpointResponse(TEvents::TDbResolverResponse{std::move(ready), /*success=*/true}));
+ SendResponse(ev->Sender, std::move(ready));
}
}
diff --git a/ydb/core/yq/libs/db_resolver/db_async_resolver_impl.cpp b/ydb/core/yq/libs/db_resolver/db_async_resolver_impl.cpp
index 62cc1eac90e..d4fcc6e6dcb 100644
--- a/ydb/core/yq/libs/db_resolver/db_async_resolver_impl.cpp
+++ b/ydb/core/yq/libs/db_resolver/db_async_resolver_impl.cpp
@@ -17,13 +17,13 @@ TDatabaseAsyncResolver::TDatabaseAsyncResolver(
NThreading::TFuture<TEvents::TDbResolverResponse> TDatabaseAsyncResolver::ResolveIds(const TResolveParams& params) const {
auto promise = NThreading::NewPromise<TEvents::TDbResolverResponse>();
- TDuration timeout = TDuration::Seconds(20);
+ TDuration timeout = TDuration::Seconds(40);
auto callback = MakeHolder<NYql::TRichActorFutureCallback<TEvents::TEvEndpointResponse>>(
[promise] (TAutoPtr<NActors::TEventHandle<TEvents::TEvEndpointResponse>>& event) mutable {
promise.SetValue(std::move(event->Get()->DbResolverResponse));
},
[promise, timeout] () mutable {
- promise.SetException("Couldn't resolve database ids for " + timeout.ToString() + " seconds");
+ promise.SetException("Couldn't resolve database ids for " + timeout.ToString());
},
timeout
);