file_reader.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #pragma once
  2. #include <yt/cpp/mapreduce/common/fwd.h>
  3. #include <yt/cpp/mapreduce/interface/io.h>
  4. #include <yt/cpp/mapreduce/http/context.h>
  5. #include <yt/cpp/mapreduce/http/requests.h>
  6. class IInputStream;
  7. namespace NYT {
  8. class TPingableTransaction;
  9. namespace NDetail {
  10. ////////////////////////////////////////////////////////////////////////////////
  11. class TStreamReaderBase
  12. : public IFileReader
  13. {
  14. public:
  15. TStreamReaderBase(
  16. const IRawClientPtr& rawClient,
  17. IClientRetryPolicyPtr clientRetryPolicy,
  18. ITransactionPingerPtr transactionPinger,
  19. const TClientContext& context,
  20. const TTransactionId& transactionId);
  21. ~TStreamReaderBase();
  22. protected:
  23. TYPath Snapshot(const TYPath& path);
  24. protected:
  25. const IRawClientPtr RawClient_;
  26. private:
  27. size_t DoRead(void* buf, size_t len) override;
  28. virtual std::unique_ptr<IInputStream> Request(const TTransactionId& transactionId, ui64 readBytes) = 0;
  29. private:
  30. const IClientRetryPolicyPtr ClientRetryPolicy_;
  31. TFileReaderOptions FileReaderOptions_;
  32. std::unique_ptr<IInputStream> Input_;
  33. std::unique_ptr<TPingableTransaction> ReadTransaction_;
  34. ui64 CurrentOffset_ = 0;
  35. };
  36. ////////////////////////////////////////////////////////////////////////////////
  37. class TFileReader
  38. : public TStreamReaderBase
  39. {
  40. public:
  41. TFileReader(
  42. const TRichYPath& path,
  43. const IRawClientPtr& rawClient,
  44. IClientRetryPolicyPtr clientRetryPolicy,
  45. ITransactionPingerPtr transactionPinger,
  46. const TClientContext& context,
  47. const TTransactionId& transactionId,
  48. const TFileReaderOptions& options = {});
  49. private:
  50. std::unique_ptr<IInputStream> Request(const TTransactionId& transactionId, ui64 readBytes) override;
  51. private:
  52. const ui64 StartOffset_;
  53. const TMaybe<ui64> EndOffset_;
  54. TFileReaderOptions Options_;
  55. TRichYPath Path_;
  56. };
  57. ////////////////////////////////////////////////////////////////////////////////
  58. class TBlobTableReader
  59. : public TStreamReaderBase
  60. {
  61. public:
  62. TBlobTableReader(
  63. const TYPath& path,
  64. const TKey& key,
  65. const IRawClientPtr& rawClient,
  66. IClientRetryPolicyPtr clientRetryPolicy,
  67. ITransactionPingerPtr transactionPinger,
  68. const TClientContext& context,
  69. const TTransactionId& transactionId,
  70. const TBlobTableReaderOptions& options = {});
  71. private:
  72. std::unique_ptr<IInputStream> Request(const TTransactionId& transactionId, ui64 readBytes) override;
  73. private:
  74. const ui64 StartOffset_;
  75. const TKey Key_;
  76. TBlobTableReaderOptions Options_;
  77. TYPath Path_;
  78. };
  79. } // namespace NDetail
  80. } // namespace NYT