Skip to content

Commit 9f309c4

Browse files
Added new versions of RetryQuery (#7777)
1 parent d4c13e3 commit 9f309c4

File tree

2 files changed

+45
-7
lines changed

2 files changed

+45
-7
lines changed

ydb/public/sdk/cpp/client/ydb_query/client.cpp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818

1919
namespace NYdb::NQuery {
2020

21-
using TRetryContextAsync = NRetry::Async::TRetryContext<TQueryClient, TAsyncExecuteQueryResult>;
21+
using TRetryContextResultAsync = NRetry::Async::TRetryContext<TQueryClient, TAsyncExecuteQueryResult>;
22+
using TRetryContextAsync = NRetry::Async::TRetryContext<TQueryClient, TAsyncStatus>;
2223

2324
NYdb::NRetry::TRetryOperationSettings GetRetrySettings(TDuration timeout, bool isIndempotent) {
2425
return NYdb::NRetry::TRetryOperationSettings()
@@ -574,20 +575,40 @@ i64 TQueryClient::GetCurrentPoolSize() const {
574575
return Impl_->GetCurrentPoolSize();
575576
}
576577

577-
TAsyncExecuteQueryResult TQueryClient::RetryQuery(TQueryFunc&& queryFunc, TRetryOperationSettings settings)
578+
TAsyncExecuteQueryResult TQueryClient::RetryQuery(TQueryResultFunc&& queryFunc, TRetryOperationSettings settings)
578579
{
580+
TRetryContextResultAsync::TPtr ctx(new NRetry::Async::TRetryWithSession(*this, std::move(queryFunc), settings));
581+
return ctx->Execute();
582+
}
583+
584+
TAsyncStatus TQueryClient::RetryQuery(TQueryFunc&& queryFunc, TRetryOperationSettings settings) {
579585
TRetryContextAsync::TPtr ctx(new NRetry::Async::TRetryWithSession(*this, std::move(queryFunc), settings));
580586
return ctx->Execute();
581587
}
582588

589+
TAsyncStatus TQueryClient::RetryQuery(TQueryWithoutSessionFunc&& queryFunc, TRetryOperationSettings settings) {
590+
TRetryContextAsync::TPtr ctx(new NRetry::Async::TRetryWithoutSession(*this, std::move(queryFunc), settings));
591+
return ctx->Execute();
592+
}
593+
594+
TStatus TQueryClient::RetryQuery(const TQuerySyncFunc& queryFunc, TRetryOperationSettings settings) {
595+
NRetry::Sync::TRetryWithSession ctx(*this, queryFunc, settings);
596+
return ctx.Execute();
597+
}
598+
599+
TStatus TQueryClient::RetryQuery(const TQueryWithoutSessionSyncFunc& queryFunc, TRetryOperationSettings settings) {
600+
NRetry::Sync::TRetryWithoutSession ctx(*this, queryFunc, settings);
601+
return ctx.Execute();
602+
}
603+
583604
TAsyncExecuteQueryResult TQueryClient::RetryQuery(const TString& query, const TTxControl& txControl,
584605
TDuration timeout, bool isIndempotent)
585606
{
586607
auto settings = GetRetrySettings(timeout, isIndempotent);
587608
auto queryFunc = [&query, &txControl](TSession session, TDuration duration) -> TAsyncExecuteQueryResult {
588609
return session.ExecuteQuery(query, txControl, TExecuteQuerySettings().ClientTimeout(duration));
589610
};
590-
TRetryContextAsync::TPtr ctx(new NRetry::Async::TRetryWithSession(*this, std::move(queryFunc), settings));
611+
TRetryContextResultAsync::TPtr ctx(new NRetry::Async::TRetryWithSession(*this, std::move(queryFunc), settings));
591612
return ctx->Execute();
592613
}
593614

ydb/public/sdk/cpp/client/ydb_query/client.h

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ namespace NYdb {
1717
namespace NRetry::Async {
1818
template <typename TClient, typename TAsyncStatusType>
1919
class TRetryContext;
20-
}
20+
} // namespace NRetry::Async
21+
namespace NRetry::Sync {
22+
template <typename TClient, typename TStatusType>
23+
class TRetryContext;
24+
} // namespace NRetry::Sync
2125
}
2226

2327
namespace NYdb::NQuery {
@@ -58,10 +62,15 @@ class TSession;
5862
class TQueryClient {
5963
friend class TSession;
6064
friend class NRetry::Async::TRetryContext<TQueryClient, TAsyncExecuteQueryResult>;
65+
friend class NRetry::Async::TRetryContext<TQueryClient, TAsyncStatus>;
66+
friend class NRetry::Sync::TRetryContext<TQueryClient, TStatus>;
6167

6268
public:
63-
using TQueryFunc = std::function<TAsyncExecuteQueryResult(TSession session)>;
64-
using TQueryWithoutSessionFunc = std::function<TAsyncExecuteQueryResult(TQueryClient& client)>;
69+
using TQueryResultFunc = std::function<TAsyncExecuteQueryResult(TSession session)>;
70+
using TQueryFunc = std::function<TAsyncStatus(TSession session)>;
71+
using TQuerySyncFunc = std::function<TStatus(TSession session)>;
72+
using TQueryWithoutSessionFunc = std::function<TAsyncStatus(TQueryClient& client)>;
73+
using TQueryWithoutSessionSyncFunc = std::function<TStatus(TQueryClient& client)>;
6574
using TSettings = TClientSettings;
6675
using TSession = TSession;
6776
using TCreateSessionSettings = TCreateSessionSettings;
@@ -82,7 +91,15 @@ class TQueryClient {
8291
TAsyncExecuteQueryIterator StreamExecuteQuery(const TString& query, const TTxControl& txControl,
8392
const TParams& params, const TExecuteQuerySettings& settings = TExecuteQuerySettings());
8493

85-
TAsyncExecuteQueryResult RetryQuery(TQueryFunc&& queryFunc, TRetryOperationSettings settings = TRetryOperationSettings());
94+
TAsyncExecuteQueryResult RetryQuery(TQueryResultFunc&& queryFunc, TRetryOperationSettings settings = TRetryOperationSettings());
95+
96+
TAsyncStatus RetryQuery(TQueryFunc&& queryFunc, TRetryOperationSettings settings = TRetryOperationSettings());
97+
98+
TAsyncStatus RetryQuery(TQueryWithoutSessionFunc&& queryFunc, TRetryOperationSettings settings = TRetryOperationSettings());
99+
100+
TStatus RetryQuery(const TQuerySyncFunc& queryFunc, TRetryOperationSettings settings = TRetryOperationSettings());
101+
102+
TStatus RetryQuery(const TQueryWithoutSessionSyncFunc& queryFunc, TRetryOperationSettings settings = TRetryOperationSettings());
86103

87104
TAsyncExecuteQueryResult RetryQuery(const TString& query, const TTxControl& txControl,
88105
TDuration timeout, bool isIndempotent);

0 commit comments

Comments
 (0)