44
55#include < src/api/grpc/ydb_operation_v1.grpc.pb.h>
66
7+ using namespace std ::chrono_literals;
8+
79namespace NYdb ::inline V3 {
810
9- constexpr TDuration MAX_DEFERRED_CALL_DELAY = TDuration::Seconds( 10 ) ; // The max delay between GetOperation calls for one operation
11+ constexpr TDeadline::Duration MAX_DEFERRED_CALL_DELAY = 10s ; // The max delay between GetOperation calls for one operation
1012
1113TSimpleCbResult::TSimpleCbResult (
1214 TSimpleCb&& cb,
@@ -24,18 +26,18 @@ TDeferredAction::TDeferredAction(const std::string& operationId,
2426 TDeferredOperationCb&& userCb,
2527 TGRpcConnectionsImpl* connection,
2628 std::shared_ptr<IQueueClientContext> context,
27- TDuration delay,
29+ TDeadline::Duration delay,
30+ TDeadline globalDeadline,
2831 TDbDriverStatePtr dbState,
2932 const std::string& endpoint)
3033 : TAlarmActionBase(std::move(userCb), connection, std::move(context))
31- , NextDelay_(Min(delay * 2 , MAX_DEFERRED_CALL_DELAY))
34+ , NextDelay_(std::min(delay * 2 , MAX_DEFERRED_CALL_DELAY))
35+ , GlobalDeadline_(globalDeadline)
3236 , DbDriverState_(dbState)
3337 , OperationId_(operationId)
3438 , Endpoint_(endpoint)
3539{
36- Deadline_ = gpr_time_add (
37- gpr_now (GPR_CLOCK_MONOTONIC),
38- gpr_time_from_micros (delay.MicroSeconds (), GPR_TIMESPAN));
40+ Deadline_ = std::min (GlobalDeadline_, TDeadline::AfterDuration (delay));
3941}
4042
4143void TDeferredAction::OnAlarm () {
@@ -46,7 +48,8 @@ void TDeferredAction::OnAlarm() {
4648
4749 TRpcRequestSettings settings;
4850 settings.PreferredEndpoint = TEndpointKey (Endpoint_, 0 );
49-
51+ settings.Deadline = GlobalDeadline_;
52+
5053 Connection_->RunDeferred <Ydb::Operation::V1::OperationService, Ydb::Operations::GetOperationRequest, Ydb::Operations::GetOperationResponse>(
5154 std::move (getOperationRequest),
5255 std::move (UserResponseCb_),
@@ -56,7 +59,7 @@ void TDeferredAction::OnAlarm() {
5659 settings,
5760 true ,
5861 std::move (Context_));
59- }
62+ }
6063
6164void TDeferredAction::OnError () {
6265 Y_ABORT_UNLESS (Connection_);
@@ -76,13 +79,11 @@ TPeriodicAction::TPeriodicAction(
7679 TPeriodicCb&& userCb,
7780 TGRpcConnectionsImpl* connection,
7881 std::shared_ptr<NYdbGrpc::IQueueClientContext> context,
79- TDuration period)
82+ TDeadline::Duration period)
8083 : TAlarmActionBase(std::move(userCb), connection, std::move(context))
8184 , Period_(period)
8285{
83- Deadline_ = gpr_time_add (
84- gpr_now (GPR_CLOCK_MONOTONIC),
85- gpr_time_from_micros (Period_.MicroSeconds (), GPR_TIMESPAN));
86+ Deadline_ = TDeadline::AfterDuration (period);
8687}
8788
8889void TPeriodicAction::OnAlarm () {
0 commit comments