job_writer.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #pragma once
  2. #include <yt/cpp/mapreduce/interface/io.h>
  3. #include <util/generic/vector.h>
  4. #include <util/generic/ptr.h>
  5. #include <util/stream/file.h>
  6. #include <util/stream/buffered.h>
  7. namespace NYT {
  8. ////////////////////////////////////////////////////////////////////////////////
  9. namespace NDetail {
  10. ////////////////////////////////////////////////////////////////////////////////
  11. class TJobWriterStream {
  12. public:
  13. explicit TJobWriterStream(int fd);
  14. explicit TJobWriterStream(const TFile& file);
  15. ~TJobWriterStream();
  16. public:
  17. static constexpr size_t BufferSize = 1 << 20;
  18. TFile FdFile;
  19. TUnbufferedFileOutput FdOutput;
  20. TBufferedOutput BufferedOutput;
  21. };
  22. ////////////////////////////////////////////////////////////////////////////////
  23. } // namespace NDetail
  24. ////////////////////////////////////////////////////////////////////////////////
  25. class TJobWriter
  26. : public IProxyOutput
  27. {
  28. public:
  29. explicit TJobWriter(size_t outputTableCount);
  30. explicit TJobWriter(const TVector<TFile>& fileList);
  31. size_t GetBufferMemoryUsage() const override;
  32. size_t GetStreamCount() const override;
  33. IOutputStream* GetStream(size_t tableIndex) const override;
  34. void OnRowFinished(size_t tableIndex) override;
  35. private:
  36. TVector<THolder<NDetail::TJobWriterStream>> Streams_;
  37. };
  38. ////////////////////////////////////////////////////////////////////////////////
  39. class TSingleStreamJobWriter
  40. : public IProxyOutput
  41. {
  42. public:
  43. explicit TSingleStreamJobWriter(size_t tableIndex);
  44. size_t GetBufferMemoryUsage() const override;
  45. size_t GetStreamCount() const override;
  46. IOutputStream* GetStream(size_t tableIndex) const override;
  47. void OnRowFinished(size_t tableIndex) override;
  48. private:
  49. const size_t TableIndex_;
  50. THolder<NDetail::TJobWriterStream> Stream_;
  51. };
  52. ////////////////////////////////////////////////////////////////////////////////
  53. } // namespace NYT