quickwit-oss/quickwit · error
indexing service should be initialized
Error message
indexing service should be initialized
What it means
`build_indexing_service` hit the self-node branch but the optional `Mailbox<IndexingService>` was `None`, violating the invariant that a node advertising itself as an indexer has a locally built indexing service actor. This expect fires on internal wiring inconsistency, not bad user input.
Solutions
- Ensure the `indexer` service is enabled in the node's enabled_services
- Check earlier logs for a failure while building the indexing service during startup
- Report as a bug if the service is enabled but the expect still fires
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at quickwit/quickwit-serve/src/lib.rs:1533 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08).
Data as JSON: /api/errors/89e88b5f35eebc5d.
Report an issue: GitHub.
Appendix: source
Thrown at quickwit/quickwit-serve/src/lib.rs:1533
generation_id = %chitchat_id.generation_id,
"removing node `{}` from indexer pool",
chitchat_id.node_id,
);
let node_id: NodeId = node.node_id.clone();
Change::Remove(node_id)
}
fn build_indexing_service(
node: &ClusterNode,
indexing_service_opt: Option<Mailbox<IndexingService>>,
max_message_size: ByteSize,
) -> IndexingServiceClient {
if node.is_self_node() {
// Here, since the service is available locally, we bypass the network stack
// and use the mailbox directly. However, we still want client-side metrics,
// so we use both metrics layers.
let indexing_service_mailbox =
indexing_service_opt.expect("indexing service should be initialized");
let shared_layers = ServiceBuilder::new()
.layer(INDEXING_GRPC_CLIENT_METRICS_LAYER.clone())
.layer(INDEXING_GRPC_SERVER_METRICS_LAYER.clone())
.into_inner();
return IndexingServiceClient::tower()
.stack_layer(shared_layers)
.build_from_mailbox(indexing_service_mailbox);
}
IndexingServiceClient::tower()
.stack_layer(INDEXING_GRPC_CLIENT_METRICS_LAYER.clone())
.stack_layer(TimeoutLayer::new(GRPC_INDEXING_SERVICE_TIMEOUT))
.build_from_channel(
node.grpc_advertise_addr,
node.channel(),
max_message_size,
None,
)
}View on GitHub (pinned to a39730c5cd)