retryful_writer_v2.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include <library/cpp/threading/future/core/future.h>
  3. #include <yt/cpp/mapreduce/client/transaction.h>
  4. #include <yt/cpp/mapreduce/common/fwd.h>
  5. #include <yt/cpp/mapreduce/http/context.h>
  6. #include <yt/cpp/mapreduce/interface/io.h>
  7. #include <util/generic/size_literals.h>
  8. namespace NYT::NPrivate {
  9. ////////////////////////////////////////////////////////////////////////////////
  10. class TRetryfulWriterV2
  11. : public TRawTableWriter
  12. {
  13. public:
  14. TRetryfulWriterV2(
  15. const IRawClientPtr& rawClient,
  16. IClientRetryPolicyPtr clientRetryPolicy,
  17. ITransactionPingerPtr transactionPinger,
  18. const TClientContext& context,
  19. const TTransactionId& parentId,
  20. const TString& command,
  21. const TMaybe<TFormat>& format,
  22. const TRichYPath& path,
  23. const TNode& serializedWriterOptions,
  24. ssize_t bufferSize,
  25. bool createTranasaction);
  26. void NotifyRowEnd() override;
  27. void Abort() override;
  28. size_t GetBufferMemoryUsage() const override;
  29. protected:
  30. void DoWrite(const void* buf, size_t len) override;
  31. void DoFinish() override;
  32. void DoStartBatch();
  33. private:
  34. class TSentBuffer;
  35. class TSender;
  36. struct TSendTask;
  37. const ssize_t BufferSize_;
  38. const ssize_t SendStep_ = 64_KB;
  39. ssize_t NextSizeToSend_;
  40. std::unique_ptr<TSender> Sender_;
  41. std::unique_ptr<TPingableTransaction> WriteTransaction_;
  42. std::unique_ptr<TSendTask> Current_;
  43. std::unique_ptr<TSendTask> Previous_;
  44. };
  45. ////////////////////////////////////////////////////////////////////////////////
  46. } // namespace NYT::NPrivate