Skip to content

Commit cff2cc1

Browse files
g-talbotclaude
andcommitted
feat(31): wire TableConfig into sort path, add compaction KV metadata
Wire TableConfig-driven sort order into ParquetWriter and add self-describing Parquet file metadata for compaction: - ParquetWriter::new() takes &TableConfig, resolves sort fields at construction via parse_sort_fields() + ParquetField::from_name() - sort_batch() uses resolved fields with per-column direction (ASC/DESC) - SS-1 debug_assert verification: re-sort and check identity permutation - build_compaction_key_value_metadata(): embeds sort_fields, window_start, window_duration, num_merge_ops, row_keys (base64) in Parquet kv_metadata - SS-5 verify_ss5_kv_consistency(): kv_metadata matches source struct - write_to_file_with_metadata() replaces write_to_file() - prepare_write() shared method for bytes and file paths - ParquetWriterConfig gains to_writer_properties_with_metadata() - ParquetSplitWriter passes TableConfig through - All callers in quickwit-indexing updated with TableConfig::default() - 23 storage tests pass including META-07 self-describing roundtrip Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent acb5d28 commit cff2cc1

File tree

10 files changed

+598
-193
lines changed

10 files changed

+598
-193
lines changed

quickwit/Cargo.lock

Lines changed: 47 additions & 47 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

quickwit/quickwit-indexing/src/actors/indexing_pipeline.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,11 @@ impl IndexingPipeline {
638638

639639
// ParquetPackager
640640
let writer_config = quickwit_parquet_engine::storage::ParquetWriterConfig::default();
641+
let table_config = quickwit_parquet_engine::table_config::TableConfig::default();
641642
let split_writer = quickwit_parquet_engine::storage::ParquetSplitWriter::new(
642643
writer_config,
643644
self.params.indexing_directory.path(),
645+
&table_config,
644646
);
645647
let parquet_packager = ParquetPackager::new(split_writer, parquet_uploader_mailbox);
646648
let (parquet_packager_mailbox, parquet_packager_handle) = ctx

quickwit/quickwit-indexing/src/actors/parquet_doc_processor.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,8 @@ mod tests {
549549

550550
// Create ParquetPackager
551551
let writer_config = ParquetWriterConfig::default();
552-
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir.path());
552+
let table_config = quickwit_parquet_engine::table_config::TableConfig::default();
553+
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir.path(), &table_config);
553554
let packager = ParquetPackager::new(split_writer, uploader_mailbox);
554555
let (packager_mailbox, packager_handle) = universe.spawn_builder().spawn(packager);
555556

quickwit/quickwit-indexing/src/actors/parquet_e2e_test.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ async fn test_metrics_pipeline_e2e() {
172172

173173
// ParquetPackager between indexer and uploader
174174
let writer_config = ParquetWriterConfig::default();
175-
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir.path());
175+
let table_config = quickwit_parquet_engine::table_config::TableConfig::default();
176+
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir.path(), &table_config);
176177
let packager = ParquetPackager::new(split_writer, uploader_mailbox);
177178
let (packager_mailbox, packager_handle) = universe.spawn_builder().spawn(packager);
178179

quickwit/quickwit-indexing/src/actors/parquet_indexer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,8 @@ mod tests {
593593
uploader_mailbox: Mailbox<ParquetUploader>,
594594
) -> (Mailbox<ParquetPackager>, ActorHandle<ParquetPackager>) {
595595
let writer_config = ParquetWriterConfig::default();
596-
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir);
596+
let table_config = quickwit_parquet_engine::table_config::TableConfig::default();
597+
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir, &table_config);
597598

598599
let packager = ParquetPackager::new(split_writer, uploader_mailbox);
599600
universe.spawn_builder().spawn(packager)

quickwit/quickwit-indexing/src/actors/parquet_packager.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,8 @@ mod tests {
274274
uploader_mailbox: Mailbox<ParquetUploader>,
275275
) -> (Mailbox<ParquetPackager>, ActorHandle<ParquetPackager>) {
276276
let writer_config = ParquetWriterConfig::default();
277-
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir);
277+
let table_config = quickwit_parquet_engine::table_config::TableConfig::default();
278+
let split_writer = ParquetSplitWriter::new(writer_config, temp_dir, &table_config);
278279

279280
let packager = ParquetPackager::new(split_writer, uploader_mailbox);
280281
universe.spawn_builder().spawn(packager)

0 commit comments

Comments
 (0)