Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7a7207b
Make MergeSchedulerService optional (#6266)
nadav-govari Apr 6, 2026
2862e87
Create compaction planner service stub; wire up serving layer (#6269)
nadav-govari Apr 9, 2026
19300bc
Scaffold Compactor supervisor and pipeline (#6282)
nadav-govari Apr 13, 2026
40b307c
Spawn merge pipeline from new compactor (#6284)
nadav-govari Apr 13, 2026
ecab99b
Wire up compactor service (#6291)
nadav-govari Apr 13, 2026
f35053e
Implement compactor pipeline update logic (#6297)
nadav-govari Apr 13, 2026
597a81e
Merge planner part 1: Metastore (#6305)
nadav-govari Apr 16, 2026
7fcb4ce
Merge planner part 2: gRPCs (#6310)
nadav-govari Apr 16, 2026
48d499c
Make ReportStatus gRPC from compactors (#6311)
nadav-govari Apr 16, 2026
1e44a30
Remove merge code from indexers; Renaming and cleanup (#6346)
nadav-govari May 12, 2026
d3a780c
Add metrics (#6350)
nadav-govari May 12, 2026
a289fa9
Improvements from live testing (#6404)
nadav-govari May 12, 2026
8056371
Wire up shared indexing split cache between indexers and compactors (…
nadav-govari May 20, 2026
d611865
Score merge operations like before; restructure MergeOperation (#6412)
nadav-govari May 20, 2026
8ff8744
Performance improvements: multipart upload, parallel gets, spans (#6451)
nadav-govari May 20, 2026
e2e5d6a
Exclude known split ids; double merge concurrency (#6452)
nadav-govari May 20, 2026
efaba73
Revert to using existing merge flow when standalone compactors isnt e…
nadav-govari May 20, 2026
1d5baf5
Comments from all PRs
nadav-govari May 20, 2026
78ba1a4
Merge branch nadav/feature-split-merges into main
nadav-govari May 21, 2026
62176e6
Optionally disable metrics merge pipelines like logs
nadav-govari May 21, 2026
82cb6fe
lints
nadav-govari May 21, 2026
1ee8565
Merge branch 'main' into nadav/merge-feature-split-merges
nadav-govari May 21, 2026
e60210f
lint
nadav-govari May 21, 2026
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
25 changes: 25 additions & 0 deletions quickwit/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions quickwit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ members = [
"quickwit-datetime",
"quickwit-df-core",
"quickwit-directories",
"quickwit-compaction",
"quickwit-doc-mapper",
"quickwit-dst",
"quickwit-index-management",
Expand Down Expand Up @@ -60,6 +61,7 @@ default-members = [
"quickwit-control-plane",
"quickwit-datetime",
"quickwit-directories",
"quickwit-compaction",
"quickwit-doc-mapper",
"quickwit-index-management",
"quickwit-indexing",
Expand Down Expand Up @@ -242,6 +244,7 @@ sea-query = { version = "0.32" }
sea-query-binder = { version = "0.7", features = [
"runtime-tokio-rustls",
"sqlx-postgres",
"postgres-array",
] }
# ^1.0.184 due to serde-rs/serde#2538
serde = { version = "1.0.228", features = ["derive", "rc"] }
Expand Down Expand Up @@ -372,6 +375,7 @@ quickwit-cluster = { path = "quickwit-cluster" }
quickwit-codegen = { path = "quickwit-codegen" }
quickwit-codegen-example = { path = "quickwit-codegen/example" }
quickwit-common = { path = "quickwit-common" }
quickwit-compaction = { path = "quickwit-compaction" }
quickwit-config = { path = "quickwit-config" }
quickwit-control-plane = { path = "quickwit-control-plane" }
quickwit-datafusion = { path = "quickwit-datafusion" }
Expand Down
21 changes: 14 additions & 7 deletions quickwit/quickwit-cli/src/tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use std::io::{IsTerminal, Stdout, Write, stdout};
use std::num::NonZeroUsize;
use std::path::PathBuf;
use std::str::FromStr;
use std::sync::Arc;
use std::time::{Duration, Instant};
use std::{env, fmt, io};

Expand All @@ -37,11 +38,11 @@ use quickwit_config::{
TransformConfig, VecSourceParams,
};
use quickwit_index_management::{IndexService, clear_cache_directory};
use quickwit_indexing::BoxedPipelineHandle;
use quickwit_indexing::actors::{IndexingService, MergePipeline, MergeSchedulerService};
use quickwit_indexing::models::{
DetachIndexingPipeline, DetachMergePipeline, IndexingStatistics, SpawnPipeline,
};
use quickwit_indexing::{BoxedPipelineHandle, IndexingSplitCache};
use quickwit_ingest::IngesterPool;
use quickwit_metastore::IndexMetadataResponseExt;
use quickwit_proto::indexing::CpuCapacity;
Expand All @@ -55,12 +56,12 @@ use quickwit_serve::{
};
use quickwit_storage::{BundleStorage, Storage};
use thousands::Separable;
use tracing::{debug, info};
use tracing::debug;

use crate::checklist::{GREEN_COLOR, RED_COLOR};
use crate::{
THROUGHPUT_WINDOW_SIZE, config_cli_arg, get_resolvers, load_node_config, run_index_checklist,
start_actor_runtimes,
THROUGHPUT_WINDOW_SIZE, config_cli_arg, get_resolvers, info, load_node_config,
run_index_checklist, start_actor_runtimes,
};

pub fn build_tool_command() -> Command {
Expand Down Expand Up @@ -221,8 +222,8 @@ pub enum ToolCliCommand {
GarbageCollect(GarbageCollectIndexArgs),
LocalIngest(LocalIngestDocsArgs),
LocalSearch(LocalSearchArgs),
Merge(MergeArgs),
ExtractSplit(ExtractSplitArgs),
Merge(MergeArgs),
}

impl ToolCliCommand {
Expand Down Expand Up @@ -448,6 +449,8 @@ pub async fn local_ingest_docs_cli(args: LocalIngestDocsArgs) -> anyhow::Result<
)?;
let universe = Universe::new();
let merge_scheduler_service_mailbox = universe.get_or_spawn_one();
let split_cache =
Arc::new(IndexingSplitCache::from_config(&indexer_config, &config.data_dir_path).await?);
let indexing_server = IndexingService::new(
config.node_id.clone(),
config.data_dir_path.clone(),
Expand All @@ -456,10 +459,11 @@ pub async fn local_ingest_docs_cli(args: LocalIngestDocsArgs) -> anyhow::Result<
cluster,
metastore,
None,
merge_scheduler_service_mailbox,
Some(merge_scheduler_service_mailbox),
IngesterPool::default(),
storage_resolver,
EventBroker::default(),
split_cache,
)
.await?;
let (indexing_server_mailbox, indexing_server_handle) =
Expand Down Expand Up @@ -493,11 +497,13 @@ pub async fn local_ingest_docs_cli(args: LocalIngestDocsArgs) -> anyhow::Result<
let statistics =
start_statistics_reporting_loop(indexing_pipeline_handle, args.input_path_opt.is_none())
.await?;

merge_pipeline_handle
.mailbox()
.ask(quickwit_indexing::FinishPendingMergesAndShutdownPipeline)
.await?;
merge_pipeline_handle.join().await;

// Shutdown the indexing server.
universe
.send_exit_with_success(&indexing_server_mailbox)
Expand Down Expand Up @@ -593,10 +599,11 @@ pub async fn merge_cli(args: MergeArgs) -> anyhow::Result<()> {
cluster,
metastore,
None,
merge_scheduler_service,
Some(merge_scheduler_service),
IngesterPool::default(),
storage_resolver,
EventBroker::default(),
Arc::new(IndexingSplitCache::no_caching()),
)
.await?;
let (indexing_service_mailbox, indexing_service_handle) =
Expand Down
37 changes: 37 additions & 0 deletions quickwit/quickwit-compaction/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
[package]
name = "quickwit-compaction"
description = "Compactor implementation and CompactionService"

version.workspace = true
edition.workspace = true
homepage.workspace = true
documentation.workspace = true
repository.workspace = true
authors.workspace = true
license.workspace = true

[dependencies]
anyhow = { workspace = true }
async-trait = { workspace = true }
quickwit-actors = { workspace = true }
quickwit-common = { workspace = true }
quickwit-config = { workspace = true }
quickwit-doc-mapper = { workspace = true }
quickwit-indexing = { workspace = true }
quickwit-metastore = { workspace = true }
quickwit-metrics = { workspace = true }
quickwit-proto = { workspace = true }
quickwit-storage = { workspace = true }
serde_json = { workspace = true }
time = { workspace = true }
tracing = { workspace = true }
tokio = { workspace = true }
ulid = { workspace = true }
itertools = "0.14.0"

[dev-dependencies]
quickwit-actors = { workspace = true, features = ["testsuite"] }
quickwit-doc-mapper = { workspace = true, features = ["testsuite"] }
quickwit-metastore = { workspace = true, features = ["testsuite"] }
quickwit-proto = { workspace = true, features = ["testsuite"] }
quickwit-storage = { workspace = true, features = ["testsuite"] }
Loading
Loading