retry_heavy_write_request.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include <yt/cpp/mapreduce/client/transaction.h>
  3. #include <yt/cpp/mapreduce/common/fwd.h>
  4. #include <yt/cpp/mapreduce/http/context.h>
  5. #include <yt/cpp/mapreduce/http/requests.h>
  6. namespace NYT {
  7. ////////////////////////////////////////////////////////////////////////////////
  8. class THeavyRequestRetrier
  9. {
  10. public:
  11. struct TParameters
  12. {
  13. IRawClientPtr RawClientPtr;
  14. IClientRetryPolicyPtr ClientRetryPolicy;
  15. ITransactionPingerPtr TransactionPinger;
  16. TClientContext Context;
  17. TTransactionId TransactionId;
  18. THttpHeader Header;
  19. };
  20. using TStreamFactory = std::function<std::unique_ptr<IInputStream>()>;
  21. public:
  22. explicit THeavyRequestRetrier(TParameters parameters);
  23. ~THeavyRequestRetrier();
  24. void Update(TStreamFactory streamFactory);
  25. void Finish();
  26. private:
  27. void Retry(const std::function<void()>& function);
  28. void TryStartAttempt();
  29. private:
  30. const TParameters Parameters_;
  31. const IRequestRetryPolicyPtr RequestRetryPolicy_;
  32. struct TAttempt
  33. {
  34. std::unique_ptr<TPingableTransaction> Transaction;
  35. TString RequestId;
  36. NHttpClient::IHttpRequestPtr Request;
  37. ssize_t Offset = 0;
  38. };
  39. std::unique_ptr<TAttempt> Attempt_;
  40. TStreamFactory StreamFactory_;
  41. };
  42. ////////////////////////////////////////////////////////////////////////////////
  43. void RetryHeavyWriteRequest(
  44. const IRawClientPtr& rawClient,
  45. const IClientRetryPolicyPtr& clientRetryPolicy,
  46. const ITransactionPingerPtr& transactionPinger,
  47. const TClientContext& context,
  48. const TTransactionId& parentId,
  49. THttpHeader& header,
  50. std::function<std::unique_ptr<IInputStream>()> streamMaker);
  51. ////////////////////////////////////////////////////////////////////////////////
  52. } // namespace NYT