Upgrade
This page documents breaking changes and migration steps when upgrading Quickwit. If you are upgrading across multiple minor versions, apply the steps for each intermediate version in order.
- Back up your metastore. If you use the PostgreSQL metastore, take a snapshot. If you use the file-backed metastore, keep a copy of the
indexes/directory. 0.9 runs SQL migrations that add new columns (maturity, compaction-related fields) on first start; rolling back requires the backup. - Back up your index data (optional). The on-disk split format and object-storage layout are unchanged, so no re-indexing is needed. A backup is still recommended if your storage is not already versioned.
- Stop all 0.8.x nodes before starting any 0.9 node. Mixed-version clusters are not supported during the migration.
The Parquet metrics pipeline and DataFusion query layer in the source tree are early prototype work. They are not built into the official v0.9.0 binaries or Docker images and are not supported in this release.
In 0.8.x, ingest V2 was opt-in via QW_ENABLE_INGEST_V2=true and was served from a dedicated route POST /api/v1/{index}/ingest-v2.
In 0.9:
QW_ENABLE_INGEST_V2now defaults totrue.POST /api/v1/{index}/ingestroutes to V2 automatically. V1 still exists internally and can be reached per-request with?use_legacy_ingest=true, or cluster-wide by settingQW_ENABLE_INGEST_V2=false.POST /api/v1/{index}/ingest-v2has been removed.QW_DISABLE_INGEST_V1=truelets you force pure-V2 operation once all clients are migrated.
What changes operationally. Ingest V2 shards commits across multiple indexers running in parallel. On a freshly-stopped ingest stream you may observe more (and smaller) splits than V1 produced, because the tail splits of each shard do not always meet the merge policy's merge_factor threshold. If you rely on a low steady-state split count, tune indexing_settings.merge_policy.merge_factor down (for example to 2) in your index config or run the merge-on-demand path.
rest_listen_portis deprecated. Move it under the newrestblock:
``` # before (0.8.x, still works in 0.9 with a deprecation warning) rest_listen_port: 7280
# after (0.9) rest: listen_port: 7280 ```
The old field keeps working for the 0.9 cycle to ease the transition; plan to remove it in 0.10.
- Stemming is now gated behind the multilang cargo feature. If you build Quickwit from source and rely on stemming, add --features multilang. The official binaries and Docker images are built with multilang enabled, so users of the distributed images are unaffected.
- The unused multilang tokenizer feature (distinct from the multilang cargo feature above) was removed. If you used a custom doc mapper referencing it, switch to the standard tokenizers.
Quickwit metrics now use the metrics-rs instrumentation stack. Most metric names are unchanged, but two groups changed and may require dashboard or alert updates:
- gRPC metrics now use a
servicelabel instead of embedding the service name in the metric name: quickwit_<service>_grpc_requests_totalbecomesquickwit_grpc_requests_total{service=“<service>”}quickwit_<service>_grpc_requests_in_flightbecomesquickwit_grpc_requests_in_flight{service=“<service>”}quickwit_<service>_grpc_request_duration_secondsbecomesquickwit_grpc_request_duration_seconds{service=“<service>”}- Janitor GC metrics no longer include the duplicated
quickwit_prefix from the oldquickwit_janitornamespace. For example,quickwit_quickwit_janitor_gc_deleted_bytes_totalbecomesquickwit_janitor_gc_deleted_bytes_total.
Building from source now requires Rust 1.92 (tracked in rust-toolchain.toml). Users of the published Docker images or prebuilt binaries are unaffected.
Rollback is one-way for the metastore. If you must return to 0.8.x, restore the metastore from the backup taken in step 1 of “Before you upgrade” and shut down all 0.9 nodes before starting any 0.8.x node.
See the for breaking changes in prior releases.
