Apache OpenDALâ„¢ C++ Binding
The C++ binding for Apache OpenDALâ„¢
Loading...
Searching...
No Matches
layer.hpp
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#pragma once
21
22#include <chrono>
23#include <cstdint>
24#include <memory>
25#include <vector>
26
27namespace opendal {
28
29class Operator;
30
31namespace ffi {
32class LayerBuilder;
33} // namespace ffi
34
39 public:
40 virtual ~LayerBuilderMutator() = default;
41
42 virtual void AddTimeout(uint64_t timeout_ns, uint64_t io_timeout_ns) = 0;
43 virtual void AddRetry(bool jitter, float factor, uint64_t min_delay_ns,
44 uint64_t max_delay_ns, uint64_t max_times) = 0;
45};
46
51 public:
52 explicit FfiLayerBuilderMutator(ffi::LayerBuilder &builder);
53
54 void AddTimeout(uint64_t timeout_ns, uint64_t io_timeout_ns) override;
55 void AddRetry(bool jitter, float factor, uint64_t min_delay_ns,
56 uint64_t max_delay_ns, uint64_t max_times) override;
57
58 private:
59 ffi::LayerBuilder &builder_;
60};
61
66 bool jitter = false;
67 float factor = 2.0f;
68 std::chrono::nanoseconds min_delay{std::chrono::seconds(1)};
69 std::chrono::nanoseconds max_delay{std::chrono::minutes(1)};
70 uint64_t max_times = 3;
71};
72
77 public:
78 virtual ~OperatorOption() = default;
79
80 void ApplyTo(LayerBuilderMutator &builder) const { Apply(builder); }
81
82 protected:
83 friend class Operator;
84 virtual void Apply(LayerBuilderMutator &builder) const = 0;
85};
86
93std::unique_ptr<OperatorOption> WithTimeout(
94 std::chrono::nanoseconds timeout, std::chrono::nanoseconds io_timeout);
95
103std::unique_ptr<OperatorOption> WithRetry(RetryConfig config = {});
104
108std::vector<std::unique_ptr<OperatorOption>> DefaultBehaviorLayerOptions();
109
110} // namespace opendal
Applies layers through the cxx bridge.
Definition layer.hpp:50
void AddTimeout(uint64_t timeout_ns, uint64_t io_timeout_ns) override
FfiLayerBuilderMutator(ffi::LayerBuilder &builder)
void AddRetry(bool jitter, float factor, uint64_t min_delay_ns, uint64_t max_delay_ns, uint64_t max_times) override
Abstraction for applying layers during operator construction.
Definition layer.hpp:38
virtual ~LayerBuilderMutator()=default
virtual void AddTimeout(uint64_t timeout_ns, uint64_t io_timeout_ns)=0
virtual void AddRetry(bool jitter, float factor, uint64_t min_delay_ns, uint64_t max_delay_ns, uint64_t max_times)=0
Configures operator layers applied during construction.
Definition layer.hpp:76
void ApplyTo(LayerBuilderMutator &builder) const
Definition layer.hpp:80
virtual void Apply(LayerBuilderMutator &builder) const =0
virtual ~OperatorOption()=default
Operator is the entry for all public APIs.
Definition opendal.hpp:51
Definition data_structure.hpp:29
std::unique_ptr< OperatorOption > WithRetry(RetryConfig config={})
Adds a retry layer to the operator.
std::unique_ptr< OperatorOption > WithTimeout(std::chrono::nanoseconds timeout, std::chrono::nanoseconds io_timeout)
Adds a timeout layer to the operator.
std::vector< std::unique_ptr< OperatorOption > > DefaultBehaviorLayerOptions()
Default layer options used by behavior tests.
Configuration for the retry layer.
Definition layer.hpp:65
uint64_t max_times
Definition layer.hpp:70
bool jitter
Definition layer.hpp:66
std::chrono::nanoseconds min_delay
Definition layer.hpp:68
std::chrono::nanoseconds max_delay
Definition layer.hpp:69
float factor
Definition layer.hpp:67