aboutsummaryrefslogtreecommitdiffstats
path: root/yt/cpp/mapreduce/client/partition_reader.cpp
blob: 1610a087cc9106b6f627b791a9092a33ded95512 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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