retry_request.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "retry_request.h"
  2. #include "context.h"
  3. #include "helpers.h"
  4. #include "http_client.h"
  5. #include "requests.h"
  6. #include <yt/cpp/mapreduce/common/wait_proxy.h>
  7. #include <yt/cpp/mapreduce/common/retry_lib.h>
  8. #include <yt/cpp/mapreduce/interface/config.h>
  9. #include <yt/cpp/mapreduce/interface/tvm.h>
  10. #include <yt/cpp/mapreduce/interface/logging/yt_log.h>
  11. #include <library/cpp/yson/node/node_io.h>
  12. namespace NYT {
  13. namespace NDetail {
  14. ////////////////////////////////////////////////////////////////////////////////
  15. static NHttpClient::IHttpResponsePtr Request(
  16. const TClientContext& context,
  17. THttpHeader& header,
  18. TMaybe<TStringBuf> body,
  19. const TString& requestId,
  20. const TRequestConfig& config)
  21. {
  22. TString hostName;
  23. if (config.IsHeavy) {
  24. hostName = GetProxyForHeavyRequest(context);
  25. } else {
  26. hostName = context.ServerName;
  27. }
  28. UpdateHeaderForProxyIfNeed(hostName, context, header);
  29. auto url = GetFullUrlForProxy(hostName, context, header);
  30. return context.HttpClient->Request(url, requestId, config.HttpConfig, header, body);
  31. }
  32. NHttpClient::IHttpResponsePtr RequestWithoutRetry(
  33. const TClientContext& context,
  34. TMutationId& mutationId,
  35. THttpHeader& header,
  36. TMaybe<TStringBuf> body,
  37. const TRequestConfig& config)
  38. {
  39. if (context.ServiceTicketAuth) {
  40. header.SetServiceTicket(context.ServiceTicketAuth->Ptr->IssueServiceTicket());
  41. } else {
  42. header.SetToken(context.Token);
  43. }
  44. if (context.ImpersonationUser) {
  45. header.SetImpersonationUser(*context.ImpersonationUser);
  46. }
  47. if (header.HasMutationId()) {
  48. if (mutationId.IsEmpty()) {
  49. header.RemoveParameter("retry");
  50. mutationId = header.AddMutationId();
  51. } else {
  52. header.AddParameter("retry", true, /*overwrite*/ true);
  53. header.SetMutationId(mutationId);
  54. }
  55. }
  56. auto requestId = CreateGuidAsString();
  57. return Request(context, header, body, requestId, config);
  58. }
  59. ////////////////////////////////////////////////////////////////////////////////
  60. } // namespace NDetail
  61. } // namespace NYT