Skip to content

Commit 94e5ef7

Browse files
authored
fix(compaction): make sure that only one task is running at a time, refactor compaction manager creation and add test (alibaba#201)
1 parent 7407990 commit 94e5ef7

33 files changed

Lines changed: 1981 additions & 376 deletions

include/paimon/defs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ struct PAIMON_EXPORT Options {
226226
/// No default value.
227227
static const char NUM_LEVELS[];
228228

229+
/// "lookup-wait" - When need to lookup, commit will wait for compaction by lookup. Default
230+
/// value is "true".
231+
static const char LOOKUP_WAIT[];
232+
229233
/// "lookup-compact" - Lookup compact mode used for lookup compaction. Default value is
230234
/// LookupCompactMode::RADICAL.
231235
static const char LOOKUP_COMPACT[];

src/paimon/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ set(PAIMON_CORE_SRCS
230230
core/mergetree/compact/interval_partition.cpp
231231
core/mergetree/compact/loser_tree.cpp
232232
core/mergetree/compact/merge_tree_compact_manager.cpp
233+
core/mergetree/compact/merge_tree_compact_manager_factory.cpp
233234
core/mergetree/compact/merge_tree_compact_rewriter.cpp
234235
core/mergetree/compact/merge_tree_compact_task.cpp
235236
core/mergetree/compact/partial_update_merge_function.cpp
@@ -513,6 +514,7 @@ if(PAIMON_BUILD_TESTS)
513514
core/catalog/catalog_test.cpp
514515
core/catalog/identifier_test.cpp
515516
core/compact/compact_deletion_file_test.cpp
517+
core/compact/noop_compact_manager_test.cpp
516518
core/core_options_test.cpp
517519
core/options/lookup_strategy_test.cpp
518520
core/deletionvectors/apply_deletion_vector_batch_reader_test.cpp
@@ -522,6 +524,7 @@ if(PAIMON_BUILD_TESTS)
522524
core/deletionvectors/deletion_vector_test.cpp
523525
core/deletionvectors/deletion_vector_index_file_writer_test.cpp
524526
core/deletionvectors/deletion_vectors_index_file_test.cpp
527+
core/disk/io_manager_test.cpp
525528
core/index/index_in_data_file_dir_path_factory_test.cpp
526529
core/index/deletion_vector_meta_test.cpp
527530
core/index/index_file_meta_serializer_test.cpp
@@ -582,7 +585,9 @@ if(PAIMON_BUILD_TESTS)
582585
core/mergetree/compact/universal_compaction_test.cpp
583586
core/mergetree/compact/force_up_level0_compaction_test.cpp
584587
core/mergetree/compact/compact_strategy_test.cpp
588+
core/mergetree/compact/file_rewrite_compact_task_test.cpp
585589
core/mergetree/compact/merge_tree_compact_manager_test.cpp
590+
core/mergetree/compact/merge_tree_compact_manager_factory_test.cpp
586591
core/mergetree/compact/merge_tree_compact_rewriter_test.cpp
587592
core/mergetree/lookup/persist_processor_test.cpp
588593
core/mergetree/drop_delete_reader_test.cpp

src/paimon/common/defs.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ const char Options::NUM_SORTED_RUNS_COMPACTION_TRIGGER[] = "num-sorted-run.compa
109109
const char Options::NUM_SORTED_RUNS_STOP_TRIGGER[] = "num-sorted-run.stop-trigger";
110110
const char Options::NUM_LEVELS[] = "num-levels";
111111
const char Options::COMPACTION_FORCE_UP_LEVEL_0[] = "compaction.force-up-level-0";
112+
const char Options::LOOKUP_WAIT[] = "lookup-wait";
112113
const char Options::LOOKUP_COMPACT[] = "lookup-compact";
113114
const char Options::LOOKUP_COMPACT_MAX_INTERVAL[] = "lookup-compact.max-interval";
114115

src/paimon/core/append/append_only_writer.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,9 @@ Status AppendOnlyWriter::Sync() {
248248
}
249249

250250
Status AppendOnlyWriter::Close() {
251-
// cancel compaction so that it does not block job cancelling
252-
compact_manager_->CancelCompaction();
251+
// Request cancellation and wait for running compaction to exit.
252+
// This avoids reusing cancellation state while an old task is still running.
253+
compact_manager_->CancelAndWaitCompaction();
253254
PAIMON_RETURN_NOT_OK(Sync());
254255

255256
PAIMON_RETURN_NOT_OK(compact_manager_->Close());

0 commit comments

Comments
 (0)