UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
HttpRetrySystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Set.h"
8#include "CoreMinimal.h"
9#include "HAL/PlatformCrt.h"
10#include "HAL/PlatformMath.h"
11#include "HttpRequestAdapter.h"
14#include "Misc/Optional.h"
15#include "Templates/Atomic.h"
18#include "UObject/NameTypes.h"
19
23namespace FHttpRetrySystem
24{
25 class FManager;
26
29
32
33 template <typename IntrinsicType>
35
36 template <> inline float TZero<float>() { return 0.0f; }
39
45
62
71 {
73 float Base = 2.0f;
75 float ExponentBias = 1.0f;
77 float MinCoefficient = 0.5f;
79 float MaxCoefficient = 1.0f;
81 float MaxBackoffSeconds = 60.0f;
82
83 HTTP_API bool IsValid() const;
85 };
86
93};
94
95
96namespace FHttpRetrySystem
97{
103 {
104 public:
118
119 public:
120 // IHttpRequest interface
121 HTTP_API virtual bool ProcessRequest() override;
122 HTTP_API virtual void CancelRequest() override;
123
124 // FRequest
126
127 protected:
128 friend class FManager;
129
140 );
141
144 void HttpOnStatusCodeReceived(FHttpRequestPtr Request, int32 StatusCode);
145 void HttpOnHeaderReceived(FHttpRequestPtr Request, const FString& HeaderName, const FString& NewHeaderValue);
146
151
153
155
165 FString OriginalUrl;
166
170 bool bLastSucceeded = false;
171
174
176 };
177}
178
179namespace FHttpRetrySystem
180{
181
182class FManager : public TSharedFromThis<FManager>
183{
184public:
185 // FManager
190 );
191
203 );
204
205 HTTP_API virtual ~FManager();
206
209
210 // @return Block the current process until all requests are flushed, or timeout has elapsed
212
213protected:
214 friend class FRequest;
215
228
254
257
258 // @return true if there is a no formal response to the request
259 // @TODO return true if a variety of 5xx errors are the result of a formal response
261
262 // @return true if retry chances have not been exhausted
264
265 // @return true if the retry request has timed out
267
273
281
283
284 // @return number of seconds to lockout for
286
290
291 // Default configuration for the retry system
296
299};
300
301}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
auto Response
Definition ExternalRpcRegistry.cpp:598
@ Compute
Definition MetalRHIPrivate.h:232
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition HttpRequestAdapter.h:14
TSharedRef< IHttpRequest > HttpRequest
Definition HttpRequestAdapter.h:58
FCriticalSection NumRetriedRequestsLock
Definition HttpRetrySystem.h:248
void IncrementRetriedRequests()
Definition HttpRetrySystem.cpp:713
ELogVerbosity::Type TargetVerbosity
Definition HttpRetrySystem.h:252
FHttpLogVerbosityTracker()
Definition HttpRetrySystem.cpp:702
ELogVerbosity::Type OriginalVerbosity
Definition HttpRetrySystem.h:250
static FHttpLogVerbosityTracker & Get()
Definition HttpRetrySystem.cpp:696
~FHttpLogVerbosityTracker()
Definition HttpRetrySystem.cpp:708
void OnConfigSectionsChanged(const FString &IniFilename, const TSet< FString > &SectionName)
Definition HttpRetrySystem.cpp:761
void DecrementRetriedRequests()
Definition HttpRetrySystem.cpp:732
void UpdateSettingsFromConfig()
Definition HttpRetrySystem.cpp:748
int32 NumRetriedRequests
Definition HttpRetrySystem.h:246
Definition HttpRetrySystem.h:183
void RetryHttpRequest(FHttpRetryRequestEntry &RequestEntry)
Definition HttpRetrySystem.cpp:465
bool ProcessRequest(TSharedRef< FRequest, ESPMode::ThreadSafe > &HttpRequest)
Definition HttpRetrySystem.cpp:616
bool CanRetryForConnectionError(const FHttpRetryRequestEntry &HttpRetryRequestEntry) const
Definition HttpRetrySystem.cpp:415
void RetryHttpRequestWithDelay(FManager::FHttpRetryRequestEntry &RequestEntry, float InDelay, bool bWasSucceeded)
Definition HttpRetrySystem.cpp:507
void CancelRequest(TSharedRef< FRequest, ESPMode::ThreadSafe > &HttpRequest)
Definition HttpRetrySystem.cpp:638
FRetryTimeoutRelativeSecondsSetting RetryTimeoutRelativeSecondsDefault
Definition HttpRetrySystem.h:295
void HttpRequestTimeoutAfterDelay(FManager::FHttpRetryRequestEntry &RequestEntry, bool bWasSucceeded, float Delay)
Definition HttpRetrySystem.cpp:545
bool CanRetry(const FHttpRetryRequestEntry &HttpRetryRequestEntry) const
Definition HttpRetrySystem.cpp:427
bool ShouldRetry(const FHttpRetryRequestEntry &HttpRetryRequestEntry) const
Definition HttpRetrySystem.cpp:372
bool HasTimedOut(const FHttpRetryRequestEntry &HttpRetryRequestEntry, const double NowAbsoluteSeconds)
Definition HttpRetrySystem.cpp:437
void SetRandomFailureRate(float Value)
Definition HttpRetrySystem.h:207
bool CanRetryInGeneral(const FHttpRetryRequestEntry &HttpRetryRequestEntry) const
Definition HttpRetrySystem.cpp:421
bool RetryLimitForConnectionErrorIsSet(const FHttpRetryRequestEntry &HttpRetryRequestEntry) const
Definition HttpRetrySystem.cpp:410
FRandomFailureRateSetting RandomFailureRate
Definition HttpRetrySystem.h:292
HTTP_API void BlockUntilFlushed(float TimeoutSec)
Definition HttpRetrySystem.cpp:674
TArray< FHttpRetryRequestEntry > RequestList
Definition HttpRetrySystem.h:297
float GetLockoutPeriodSeconds(const FHttpRetryRequestEntry &HttpRetryRequestEntry)
Definition HttpRetrySystem.cpp:581
void SetDefaultRetryLimit(uint32 Value)
Definition HttpRetrySystem.h:208
HTTP_API TSharedRef< class FHttpRetrySystem::FRequest, ESPMode::ThreadSafe > CreateRequest(const FRetryLimitCountSetting &InRetryLimitCountOverride=FRetryLimitCountSetting(), const FRetryTimeoutRelativeSecondsSetting &InRetryTimeoutRelativeSecondsOverride=FRetryTimeoutRelativeSecondsSetting(), const FRetryResponseCodes &InRetryResponseCodes=FRetryResponseCodes(), const FRetryVerbs &InRetryVerbs=FRetryVerbs(), const FRetryDomainsPtr &InRetryDomains=FRetryDomainsPtr(), const FRetryLimitCountSetting &InRetryLimitCountForConnectionErrorOverride=FRetryLimitCountSetting(), const FExponentialBackoffCurve &InExponentialBackoffCurve=FExponentialBackoffCurve())
Definition HttpRetrySystem.cpp:349
FCriticalSection RequestListLock
Definition HttpRetrySystem.h:298
FRetryLimitCountSetting RetryLimitCountDefault
Definition HttpRetrySystem.h:293
virtual HTTP_API ~FManager()
Definition HttpRetrySystem.cpp:335
FRetryLimitCountSetting RetryLimitCountForConnectionErrorDefault
Definition HttpRetrySystem.h:294
Definition HttpRetrySystem.h:103
FExponentialBackoffCurve RetryExponentialBackoffCurve
Definition HttpRetrySystem.h:173
bool bBoundAdaptorDelegates
Definition HttpRetrySystem.h:175
FRetryLimitCountSetting RetryLimitCountForConnectionErrorOverride
Definition HttpRetrySystem.h:157
TWeakPtr< FManager > RetryManager
Definition HttpRetrySystem.h:167
EStatus::Type RetryStatus
Definition HttpRetrySystem.h:154
FRetryDomainsPtr RetryDomains
Definition HttpRetrySystem.h:161
void HttpOnStatusCodeReceived(FHttpRequestPtr Request, int32 StatusCode)
Definition HttpRetrySystem.cpp:310
FString OriginalUrl
Definition HttpRetrySystem.h:165
virtual HTTP_API bool ProcessRequest() override
Definition HttpRetrySystem.cpp:137
void HttpOnRequestProgress(FHttpRequestPtr InHttpRequest, uint64 BytesSent, uint64 BytesRcv)
Definition HttpRetrySystem.cpp:216
FRetryLimitCountSetting RetryLimitCountOverride
Definition HttpRetrySystem.h:156
void SetUrlFromRetryDomains()
Definition HttpRetrySystem.cpp:178
void BindAdaptorDelegates()
Definition HttpRetrySystem.cpp:123
FHttpResponsePtr LastResponse
Definition HttpRetrySystem.h:169
void HttpOnHeaderReceived(FHttpRequestPtr Request, const FString &HeaderName, const FString &NewHeaderValue)
Definition HttpRetrySystem.cpp:316
bool bLastSucceeded
Definition HttpRetrySystem.h:170
FRetryVerbs RetryVerbs
Definition HttpRetrySystem.h:160
FRetryResponseCodes RetryResponseCodes
Definition HttpRetrySystem.h:159
int32 RetryDomainsIndex
Definition HttpRetrySystem.h:163
virtual HTTP_API void CancelRequest() override
Definition HttpRetrySystem.cpp:200
EStatus::Type GetRetryStatus() const
Definition HttpRetrySystem.h:125
void MoveToNextRetryDomain()
Definition HttpRetrySystem.cpp:189
void HttpOnProcessRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
Definition HttpRetrySystem.cpp:221
HTTP_API FRequest(TSharedRef< FManager > InManager, const TSharedRef< IHttpRequest > &HttpRequest, const FRetryLimitCountSetting &InRetryLimitCountOverride=FRetryLimitCountSetting(), const FRetryTimeoutRelativeSecondsSetting &InRetryTimeoutRelativeSecondsOverride=FRetryTimeoutRelativeSecondsSetting(), const FRetryResponseCodes &InRetryResponseCodes=FRetryResponseCodes(), const FRetryVerbs &InRetryVerbs=FRetryVerbs(), const FRetryDomainsPtr &InRetryDomains=FRetryDomainsPtr(), const FRetryLimitCountSetting &InRetryLimitCountForConnectionErrorOverride=FRetryLimitCountSetting(), const FExponentialBackoffCurve &InExponentialBackoffCurve=FExponentialBackoffCurve())
FRetryTimeoutRelativeSecondsSetting RetryTimeoutRelativeSecondsOverride
Definition HttpRetrySystem.h:158
Definition Array.h:670
Definition Atomic.h:538
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SharedPointer.h:1295
Type
Definition LogVerbosity.h:17
@ NoLogging
Definition LogVerbosity.h:19
@ Error
Definition LogVerbosity.h:28
Definition HttpRetrySystem.cpp:22
TOptional< RetryTimeoutRelativeSecondsType > FRetryTimeoutRelativeSecondsSetting
Definition HttpFwd.h:25
RetryTimeoutRelativeSecondsType TZero< RetryTimeoutRelativeSecondsType >()
Definition HttpRetrySystem.h:38
RetryTimeoutRelativeSecondsType RetryTimeoutRelativeSeconds(double Value)
Definition HttpRetrySystem.h:31
RetryLimitCountType TZero< RetryLimitCountType >()
Definition HttpRetrySystem.h:37
TOptional< RetryLimitCountType > FRetryLimitCountSetting
Definition HttpFwd.h:24
RetryLimitCountType RetryLimitCount(uint32 Value)
Definition HttpRetrySystem.h:30
IntrinsicType TZero()
TOptional< float > FRandomFailureRateSetting
Definition HttpFwd.h:23
float TZero< float >()
Definition HttpRetrySystem.h:36
double RetryTimeoutRelativeSecondsType
Definition HttpFwd.h:21
TOptional< double > ReadThrottledTimeFromResponseInSeconds(FHttpResponsePtr Response)
Definition HttpRetrySystem.cpp:24
TSet< FName > FRetryVerbs
Definition HttpFwd.h:27
TSharedPtr< FRetryDomains, ESPMode::ThreadSafe > FRetryDomainsPtr
Definition HttpFwd.h:30
uint32 RetryLimitCountType
Definition HttpFwd.h:20
TSet< int32 > FRetryResponseCodes
Definition HttpFwd.h:26
Definition HttpRetrySystem.h:71
float MinCoefficient
Definition HttpRetrySystem.h:77
float ExponentBias
Definition HttpRetrySystem.h:75
float Base
Definition HttpRetrySystem.h:73
float MaxCoefficient
Definition HttpRetrySystem.h:79
HTTP_API bool IsValid() const
Definition HttpRetrySystem.cpp:64
float MaxBackoffSeconds
Definition HttpRetrySystem.h:81
bool bShouldCancel
Definition HttpRetrySystem.h:220
uint32 CurrentRetryCountForConnectionError
Definition HttpRetrySystem.h:222
double RequestStartTimeAbsoluteSeconds
Definition HttpRetrySystem.h:223
uint32 CurrentRetryCount
Definition HttpRetrySystem.h:221
double LockoutEndTimeAbsoluteSeconds
Definition HttpRetrySystem.h:224
TSharedRef< FRequest, ESPMode::ThreadSafe > Request
Definition HttpRetrySystem.h:226
Definition HttpRetrySystem.h:106
Type
Definition HttpRetrySystem.h:108
@ Succeeded
Definition HttpRetrySystem.h:115
@ Processing
Definition HttpRetrySystem.h:110
@ Cancelled
Definition HttpRetrySystem.h:112
@ FailedTimeout
Definition HttpRetrySystem.h:114
@ FailedRetry
Definition HttpRetrySystem.h:113
@ ProcessingLockout
Definition HttpRetrySystem.h:111
@ NotStarted
Definition HttpRetrySystem.h:109
Definition HttpRetrySystem.h:47
TAtomic< int32 > ActiveIndex
Definition HttpRetrySystem.h:59
TArray< FString > Domains
Definition HttpRetrySystem.h:54
FRetryDomains(TArray< FString > &&InDomains)
Definition HttpRetrySystem.h:48
Definition Optional.h:131