From 044c22732c7e0fa5cbdd08543c7cd68a501170a6 Mon Sep 17 00:00:00 2001 From: nadya73 Date: Thu, 18 Apr 2024 12:01:09 +0300 Subject: [yt/cpp/mapreduce] YT-21405: Don't ignore backoff and pass actual exception in Retry() Don't ignore backoff and pass actual exception in Retry() b821c02fd21c9f8115cd2a4896372a9fda69e5f6 --- yt/cpp/mapreduce/client/client_reader.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'yt/cpp/mapreduce/client/client_reader.cpp') diff --git a/yt/cpp/mapreduce/client/client_reader.cpp b/yt/cpp/mapreduce/client/client_reader.cpp index b080da26048..e1051fda964 100644 --- a/yt/cpp/mapreduce/client/client_reader.cpp +++ b/yt/cpp/mapreduce/client/client_reader.cpp @@ -82,15 +82,31 @@ TClientReader::TClientReader( bool TClientReader::Retry( const TMaybe& rangeIndex, - const TMaybe& rowIndex) + const TMaybe& rowIndex, + const std::exception_ptr& error) { if (CurrentRequestRetryPolicy_) { - // TODO we should pass actual exception in Retry function - yexception genericError; - auto backoff = CurrentRequestRetryPolicy_->OnGenericError(genericError); - if (!backoff) { + TMaybe backoffDuration; + try { + std::rethrow_exception(error); + } catch (const TErrorResponse& ex) { + if (!IsRetriable(ex)) { + throw; + } + backoffDuration = CurrentRequestRetryPolicy_->OnRetriableError(ex); + } catch (const std::exception& ex) { + if (!IsRetriable(ex)) { + throw; + } + backoffDuration = CurrentRequestRetryPolicy_->OnGenericError(ex); + } catch (...) { + } + + if (!backoffDuration) { return false; } + + NDetail::TWaitProxy::Get()->Sleep(*backoffDuration); } try { -- cgit v1.3