summaryrefslogtreecommitdiffstats
path: root/yt/cpp/mapreduce/client/partition_reader.cpp
diff options
context:
space:
mode:
authorermolovd <[email protected]>2025-04-02 12:35:54 +0300
committerermolovd <[email protected]>2025-04-02 12:51:10 +0300
commit295387ba8adc18227ec4f401265e4e0bfc5e982a (patch)
tree0cc2ac7c54ec238030a562c1b09045e5ec25a07c /yt/cpp/mapreduce/client/partition_reader.cpp
parent500b1211cebb8d33b9a138a6e5ba245d29001cfc (diff)
YT-20969: C++ methods for reading table partitions
* Changelog entry Type: feature Component: cpp-mapreduce-sdk Introduce methods for reading table partition commit_hash:ab818edd21ccb2a9c5f3d5f010686c3314532192
Diffstat (limited to 'yt/cpp/mapreduce/client/partition_reader.cpp')
-rw-r--r--yt/cpp/mapreduce/client/partition_reader.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/yt/cpp/mapreduce/client/partition_reader.cpp b/yt/cpp/mapreduce/client/partition_reader.cpp
new file mode 100644
index 00000000000..1610a087cc9
--- /dev/null
+++ b/yt/cpp/mapreduce/client/partition_reader.cpp
@@ -0,0 +1,66 @@
+#include "partition_reader.h"
+
+#include <yt/cpp/mapreduce/common/retry_request.h>
+
+#include <yt/cpp/mapreduce/interface/raw_client.h>
+
+namespace NYT::NDetail {
+
+////////////////////////////////////////////////////////////////////////////////
+
+class TPartitionTableReader
+ : public TRawTableReader
+{
+public:
+ TPartitionTableReader(std::unique_ptr<IInputStream> input)
+ : Input_(std::move(input))
+ { }
+
+ bool Retry(
+ const TMaybe<ui32>& /*rangeIndex*/,
+ const TMaybe<ui64>& /*rowIndex*/,
+ const std::exception_ptr& /*error*/) override
+ {
+ return false;
+ }
+
+ void ResetRetries() override
+ { }
+
+ bool HasRangeIndices() const override
+ {
+ return false;
+ }
+
+protected:
+ size_t DoRead(void* buf, size_t len) override
+ {
+ return Input_->Read(buf, len);
+ }
+
+private:
+ std::unique_ptr<IInputStream> Input_;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+TRawTableReaderPtr CreateTablePartitionReader(
+ const IRawClientPtr& rawClient,
+ const IRequestRetryPolicyPtr& retryPolicy,
+ const TString& cookie,
+ const TMaybe<TFormat>& format,
+ const TTablePartitionReaderOptions& options)
+{
+
+ auto stream = NDetail::RequestWithRetry<std::unique_ptr<IInputStream>>(
+ retryPolicy,
+ [&] (TMutationId /*mutationId*/) {
+ return rawClient->ReadTablePartition(cookie, format, options);
+ }
+ );
+ return MakeIntrusive<TPartitionTableReader>(std::move(stream));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+} // namespace NYT::NDetail