forked from apache/paimon-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommit_context.h
More file actions
160 lines (133 loc) · 6.18 KB
/
Copy pathcommit_context.h
File metadata and controls
160 lines (133 loc) · 6.18 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#pragma once
#include <map>
#include <memory>
#include <string>
#include "paimon/result.h"
#include "paimon/type_fwd.h"
#include "paimon/visibility.h"
namespace paimon {
class Executor;
class MemoryPool;
/// `CommitContext` is some configuration for commit operations.
///
/// Please do not use this class directly, use `CommitContextBuilder` to build a `CommitContext`
/// which has input validation.
/// @see CommitContextBuilder
class PAIMON_EXPORT CommitContext {
public:
CommitContext(const std::string& root_path, const std::string& commit_user,
bool ignore_empty_commit, bool use_rest_catalog_commit,
const std::shared_ptr<MemoryPool>& memory_pool,
const std::shared_ptr<Executor>& executor,
const std::shared_ptr<FileSystem>& specific_file_system,
const std::map<std::string, std::string>& options);
~CommitContext();
const std::string& GetRootPath() const {
return root_path_;
}
const std::string& GetCommitUser() const {
return commit_user_;
}
bool IgnoreEmptyCommit() const {
return ignore_empty_commit_;
}
bool UseRESTCatalogCommit() const {
return use_rest_catalog_commit_;
}
std::shared_ptr<MemoryPool> GetMemoryPool() const {
return memory_pool_;
}
std::shared_ptr<Executor> GetExecutor() const {
return executor_;
}
std::shared_ptr<FileSystem> GetSpecificFileSystem() const {
return specific_file_system_;
}
const std::map<std::string, std::string>& GetOptions() const {
return options_;
}
private:
std::string root_path_;
std::string commit_user_;
bool ignore_empty_commit_;
bool use_rest_catalog_commit_;
std::shared_ptr<MemoryPool> memory_pool_;
std::shared_ptr<Executor> executor_;
std::shared_ptr<FileSystem> specific_file_system_;
std::map<std::string, std::string> options_;
};
/// `CommitContextBuilder` used to build a `CommitContext`, has input validation.
class PAIMON_EXPORT CommitContextBuilder {
public:
/// Constructs a `CommitContextBuilder` with required parameters.
/// @param root_path The root path of the Paimon table.
/// @param commit_user The user identifier for the commit operation.
CommitContextBuilder(const std::string& root_path, const std::string& commit_user);
~CommitContextBuilder();
/// Set a configuration options map to set some option entries which are not defined in the
/// table schema or whose values you want to overwrite.
/// @note The options map will clear the options added by `AddOption()` before.
/// @param options The configuration options map.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& SetOptions(const std::map<std::string, std::string>& options);
/// Add a single configuration option which is not defined in the table schema or whose value
/// you want to overwrite.
///
/// If you want to add multiple options, call `AddOption()` multiple times or use `SetOptions()`
/// instead.
/// @param key The option key.
/// @param value The option value.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& AddOption(const std::string& key, const std::string& value);
/// Sets whether to ignore empty commits (default is true).
/// When set to true, commits that don't contain any actual data changes will be ignored.
/// @param ignore_empty_commit True to ignore empty commits, false otherwise.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& IgnoreEmptyCommit(bool ignore_empty_commit);
/// Sets whether to use REST catalog commit (default is false).
/// @note Temporary interface, will be removed in the future.
/// @param use_rest_catalog_commit True to use REST catalog commit, false otherwise.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& UseRESTCatalogCommit(bool use_rest_catalog_commit);
/// Sets the memory pool to be used for memory allocation during commit operations.
/// @param memory_pool Shared pointer to the memory pool instance.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& WithMemoryPool(const std::shared_ptr<MemoryPool>& memory_pool);
/// Sets the executor to be used for asynchronous operations during commit.
/// @param executor Shared pointer to the executor instance.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& WithExecutor(const std::shared_ptr<Executor>& executor);
/// Sets a custom file system instance to be used for all file operations in this commit
/// context.
/// This bypasses the global file system registry and uses the provided implementation directly.
///
/// @param file_system The file system to use.
/// @return Reference to this builder for method chaining.
/// @note If not set, use default file system (configured in `Options::FILE_SYSTEM`)
CommitContextBuilder& WithFileSystem(const std::shared_ptr<FileSystem>& file_system);
/// Build and return a `CommitContext` instance with input validation.
/// @return Result containing the constructed `CommitContext` or an error status.
Result<std::unique_ptr<CommitContext>> Finish();
private:
class Impl;
std::unique_ptr<Impl> impl_;
};
} // namespace paimon