retryful_writer_v2.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. IClientRetryPolicyPtr clientRetryPolicy,
  16. ITransactionPingerPtr transactionPinger,
  17. const TClientContext& context,
  18. const TTransactionId& parentId,
  19. const TString& command,
  20. const TMaybe<TFormat>& format,
  21. const TRichYPath& path,
  22. const TNode& serializedWriterOptions,
  23. ssize_t bufferSize,
  24. bool createTranasaction);
  25. void NotifyRowEnd() override;
  26. void Abort() override;
  27. protected:
  28. void DoWrite(const void* buf, size_t len) override;
  29. void DoFinish() override;
  30. void DoStartBatch();
  31. private:
  32. class TSentBuffer;
  33. class TSender;
  34. struct TSendTask;
  35. const ssize_t BufferSize_;
  36. const ssize_t SendStep_ = 64_KB;
  37. ssize_t NextSizeToSend_;
  38. THolder<TSender> Sender_;
  39. THolder<TPingableTransaction> WriteTransaction_;
  40. THolder<TSendTask> Current_;
  41. THolder<TSendTask> Previous_;
  42. };
  43. ////////////////////////////////////////////////////////////////////////////////
  44. } // namespace NYT::NPrivate