iceberg-cpp
Loading...
Searching...
No Matches
expire_snapshots.h
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 <cstdint>
23#include <functional>
24#include <memory>
25#include <optional>
26#include <string>
27#include <unordered_map>
28#include <unordered_set>
29#include <vector>
30
32#include "iceberg/result.h"
33#include "iceberg/type_fwd.h"
37
40
41namespace iceberg {
42
44enum class CleanupLevel : uint8_t {
46 kNone,
51 kAll
52};
53
68class ICEBERG_EXPORT ExpireSnapshots : public PendingUpdate {
69 public:
71 std::shared_ptr<TransactionContext> ctx);
72
73 ~ExpireSnapshots() override;
74
75 struct ApplyResult {
76 std::vector<std::string> refs_to_remove;
77 std::vector<int64_t> snapshot_ids_to_remove;
78 std::vector<int32_t> partition_spec_ids_to_remove;
79 std::unordered_set<int32_t> schema_ids_to_remove;
80 std::shared_ptr<const TableMetadata> metadata_before_expiration;
81 };
82
87 ExpireSnapshots& ExpireSnapshotId(int64_t snapshot_id);
88
93 ExpireSnapshots& ExpireOlderThan(int64_t timestamp_millis);
94
108 ExpireSnapshots& RetainLast(int num_snapshots);
109
123 ExpireSnapshots& DeleteWith(std::function<void(const std::string&)> delete_func);
124
130
145
151
157
158 Kind kind() const final { return Kind::kExpireSnapshots; }
159 bool IsRetryable() const override { return true; }
160
161 Result<ApplyResult> Apply();
162
163 private:
164 friend class Transaction;
165
166 Status Finalize(const TableMetadata& committed) override;
167 Status CleanStaged() override {
168 apply_result_.reset();
169 return {};
170 }
171 explicit ExpireSnapshots(std::shared_ptr<TransactionContext> ctx);
172
173 using SnapshotToRef = std::unordered_map<std::string, std::shared_ptr<SnapshotRef>>;
174
175 Result<SnapshotToRef> ComputeRetainedRefs(const SnapshotToRef& refs) const;
176
177 Result<std::unordered_set<int64_t>> ComputeBranchSnapshotsToRetain(
178 int64_t snapshot_id, TimePointMs expire_snapshot_older_than,
179 int32_t min_snapshots_to_keep) const;
180
181 Result<std::unordered_set<int64_t>> ComputeAllBranchSnapshotIdsToRetain(
182 const SnapshotToRef& refs) const;
183
184 Result<std::unordered_set<int64_t>> UnreferencedSnapshotIdsToRetain(
185 const SnapshotToRef& refs) const;
186
187 const TimePointMs current_time_ms_;
188 const int64_t default_max_ref_age_ms_;
189 int32_t default_min_num_snapshots_;
190 TimePointMs default_expire_older_than_;
191 std::function<void(const std::string&)> delete_func_;
192 std::vector<int64_t> snapshot_ids_to_expire_;
193 enum CleanupLevel cleanup_level_ { CleanupLevel::kAll };
194 OptionalExecutor plan_executor_;
195 bool clean_expired_metadata_{false};
196 bool specified_snapshot_id_{false};
197 OptionalExecutor delete_executor_;
198
200 std::optional<ApplyResult> apply_result_;
201};
202
203} // namespace iceberg
Schedules iceberg-cpp tasks.
Definition executor.h:46
API for removing old snapshots from a table.
Definition expire_snapshots.h:68
ExpireSnapshots & RetainLast(int num_snapshots)
Retains the most recent ancestors of the current snapshot.
bool IsRetryable() const override
Whether this update can be retried after a commit conflict.
Definition expire_snapshots.h:159
ExpireSnapshots & PlanWith(Executor &executor)
Configure an executor for planning expired snapshot metadata.
ExpireSnapshots & CleanExpiredMetadata(bool clean)
Enable cleaning up unused metadata, such as partition specs, schemas, etc.
ExpireSnapshots & DeleteWith(std::function< void(const std::string &)> delete_func)
Passes an alternative delete implementation that will be used for manifests and data files.
Kind kind() const final
Return the kind of this pending update.
Definition expire_snapshots.h:158
ExpireSnapshots & CleanupLevel(enum CleanupLevel level)
Configures the cleanup level for expired files.
ExpireSnapshots & ExpireSnapshotId(int64_t snapshot_id)
Expires a specific Snapshot identified by id.
ExpireSnapshots & ExpireOlderThan(int64_t timestamp_millis)
Expires all snapshots older than the given timestamp.
ExpireSnapshots & ExecuteDeleteWith(Executor &executor)
Configure an executor for DeleteWith() callbacks.
Base class for all kinds of table metadata updates.
Definition pending_update.h:48
A transaction for performing multiple updates to a table.
Definition transaction.h:53
Definition expected.h:1199
Define task executor interfaces.
Define symbol visibility macros for core Iceberg APIs.
Core Apache Iceberg C++ APIs.
Definition arrow_io_util.h:34
std::chrono::time_point< std::chrono::system_clock, std::chrono::milliseconds > TimePointMs
A time point in milliseconds.
Definition timepoint.h:33
CleanupLevel
An enum representing possible clean up levels used in snapshot expiration.
Definition expire_snapshots.h:44
@ kAll
Clean up both metadata and data files (default).
@ kNone
Skip all file cleanup, only remove snapshot metadata.
Define Result, Status, and error helpers.
Definition expire_snapshots.h:75
Represents the metadata for an Iceberg table.
Definition table_metadata.h:73
Provide time point conversion helpers.