55 using ClusterByFunc = std::function<std::string(
const DataFile&)>;
56 using RewritePredicate = std::function<bool(
const ManifestFile&)>;
59 std::string table_name, std::shared_ptr<TransactionContext> ctx);
102 const std::shared_ptr<Snapshot>& snapshot)
override;
103 std::unordered_map<std::string, std::string>
Summary()
override;
107 std::shared_ptr<TransactionContext> ctx);
111 std::string cluster_key;
112 int32_t partition_spec_id;
114 friend bool operator==(
const WriterKey&,
const WriterKey&) =
default;
117 struct WriterKeyHash {
118 size_t operator()(
const WriterKey& key)
const;
123 bool RequiresRewrite(
const std::unordered_set<ManifestFile>& current_manifests)
const;
124 bool MatchesPredicate(
const ManifestFile& manifest)
const;
125 bool ContainsDeletes(
const ManifestFile& manifest)
const;
126 void KeepActiveManifests(std::span<const ManifestFile> current_manifests);
127 Status ValidateDeletedManifests(
128 const std::unordered_set<ManifestFile>& current_manifests,
129 int64_t current_snapshot_id)
const;
130 Status ValidateFilesCounts()
const;
132 Result<ManifestFile> CopyManifest(
const ManifestFile& manifest);
133 Status PerformRewrite(std::span<const ManifestFile> current_manifests);
134 Status AppendEntry(
const ManifestEntry& entry,
const ManifestFile& manifest,
135 const std::shared_ptr<PartitionSpec>& spec);
136 Result<WriterWrapper*> GetWriter(
const WriterKey& key,
137 const std::shared_ptr<PartitionSpec>& spec);
138 Result<std::unique_ptr<ManifestWriter>> NewManifestWriter(
139 const std::shared_ptr<PartitionSpec>& spec);
140 Status CloseWriters();
142 void DeleteUncommitted(std::vector<ManifestFile>& manifests,
143 const std::unordered_set<std::string>& committed);
147 std::unordered_set<ManifestFile> deleted_manifests_;
148 std::vector<ManifestFile> added_manifests_;
149 std::vector<ManifestFile> added_manifests_to_copy_;
150 std::vector<ManifestFile> rewritten_added_manifests_;
152 std::vector<ManifestFile> kept_manifests_;
153 std::vector<ManifestFile> new_manifests_;
154 std::unordered_set<ManifestFile> rewritten_manifests_;
155 std::unordered_map<WriterKey, std::unique_ptr<WriterWrapper>, WriterKeyHash> writers_;
157 int64_t entry_count_{0};
159 ClusterByFunc cluster_by_func_;
160 RewritePredicate predicate_;
161 bool rewrite_dirty_{
true};
Result< std::vector< ManifestFile > > Apply(const TableMetadata &metadata_to_update, const std::shared_ptr< Snapshot > &snapshot) override
Apply the update's changes to the given metadata and snapshot.
DataFile carries data file path, partition tuple, metrics, ...
Definition manifest_entry.h:63