Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions include/paimon/append/append_compact_coordinator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* 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 <vector>

#include "paimon/result.h"

namespace paimon {

class CommitMessage;
class FileSystem;
class MemoryPool;

/// Compact coordinator for append-only unaware-bucket tables.
///
/// This coordinator scans the latest snapshot for small files, groups them by partition,
/// and generates compaction tasks using a bin-packing algorithm. It then synchronously
/// executes all tasks and returns the resulting commit messages.
///
/// @note This implementation does not support deletion vectors or streaming mode.
/// It only scans the current latest snapshot (batch mode).
class PAIMON_EXPORT AppendCompactCoordinator {
public:
AppendCompactCoordinator() = delete;
~AppendCompactCoordinator() = delete;
/// Run the compaction coordinator.
///
/// Scans the latest snapshot for small files across the specified partitions,
/// generates compact tasks via bin-packing, executes them synchronously,
/// and returns the resulting commit messages.
///
/// @param table_path The root path of the table.
/// @param options User-defined options (will be merged with schema options).
/// @param partitions Partition filters; each element is a partition spec as key-value pairs.
/// Empty vector means all partitions.
/// @param file_system The file system to use. If nullptr, will be created from options.
/// @param pool The memory pool to use. If nullptr, will use default pool.
/// @return Result containing a vector of commit messages from compaction tasks.
static Result<std::vector<std::shared_ptr<CommitMessage>>> Run(
const std::string& table_path, const std::map<std::string, std::string>& options,
const std::vector<std::map<std::string, std::string>>& partitions,
const std::shared_ptr<FileSystem>& file_system, const std::shared_ptr<MemoryPool>& pool);
};

} // namespace paimon
Loading