diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cf3abcc4f6..a394d466985 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,9 +24,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # [0.9.0] +### Breaking / Migration +- **Ingest V2 is now the default ingest path.** The `/api/v1/{index}/ingest` endpoint transparently routes to V2. +- The `rest_listen_port` top-level config field is deprecated; use `rest.listen_port` under the new `rest` block. The old field still works but emits a warning. +- Quickwit metrics now use `metrics-rs`: gRPC metric names use a `service` label instead of embedding the service in the metric name, and janitor GC metric names no longer carry the duplicated `quickwit_` prefix (#6374). +- Stemming is now restricted to the `multilang` cargo feature (#6085); the previously bundled generic stemmer is no longer available by default. +- The unused multilang tokenizer feature was removed (#6154). +- Metastore format: new `maturity` field and compaction columns on splits; PostgreSQL metastore migrates automatically on first start. +- Building from source now requires Rust 1.92 (#6432, #6545). + ### Added -- Add Ingest V2 (#5600, #5566, #5463, #5375, #5350, #5252 #5202) +- Add Ingest V2 — now the default (#5600, #5566, #5463, #5375, #5350, #5252, #5202, #6078, #6185, #6203, #6207, #6217, #6249) +- Offload leaf-search work to AWS Lambda functions — searchers can farm out part of their workload to Lambda (#6157, #5c1e60f) +- Add experimental DataFusion query layer for Parquet metrics with SQL/Substrait execution, Arrow IPC streaming, and distributed workers (#6276) +- Extend the Parquet metrics pipeline with DDSketch, sorted-series and row-key metadata, zone-map pruning, partitioning, sketch split pagination, and Substrait execution metadata (#6248, #6257, #6290, #6292, #6295, #6340, #6347, #6348, #6349, #6363, #6364, #6368) +- Add column-major and streaming Parquet merge primitives, merge scheduler wiring, and a rollout flag for routing regular merges through the streaming engine (#6335, #6362, #6367, #6377, #6384, #6386, #6406, #6407, #6408, #6409, #6423, #6424, #6425, #6426, #6428, #6441) +- Add optional mTLS validation to the REST API and an optional dedicated health-check HTTP server for deployments that put the REST API behind mTLS (#6467, #6528) - Add SQS source (#5374, #5335, #5148) +- Add Jaeger v2 support (#6023) +- Extract and propagate W3C `traceparent` header on incoming HTTP requests (#6224) +- Add distributed tracing to the gRPC stack (#6403) +- Support configurable OTLP exporter protocol for traces and logs (#6254) +- Export internal logs via OTLP exporter (#6142) +- Add `QW_LOG_FORMAT=DDG` JSON log formatter (#6215) +- Add ES-compatible endpoints for Trino connector support (#6168) +- Elasticsearch DSL: prefix and wildcard queries (#6000), `case_insensitive` parameter on supported queries (#6005), regexp shorthand, concatenate-fields exposure, and `text` → `keyword` mapping in `_mapping` (#6208), `index_filter` on field capabilities API (#6102), `ignore_unavailable` query parameter (#5971) +- Make Elasticsearch `TermsQuery` use `TermSetQuery` internally for better performance (#6151) +- Add composite aggregation (#6214) and aggregations alias (#6314) +- Add `skip_aggregation_finalization` to `SearchRequest` (#6145) +- Add `list_index_stats` endpoint (#6035) +- Add `validate_docs` ingest setting (#5984); validate doc-mapping updates (#5988) +- Support updating the doc mapper through the API (#5253) +- Add CORS debug mode (#5955) +- Add config to fail search when it targets too many splits (#6009) +- Differentiate leaf- and root-level search timeouts (#6255) +- Predicate cache in leaf search (#6024); skip CPU work when it cannot improve the result (#6001); propagate cancellation within leaf search (#6002) +- Expose search resource stats, CPU thread count, root phase wall times, and warmup memory currently in flight (#6416, #6514, #6533) +- Set `searcher.warmup_single_split_initial_allocation` default to 300 MB (#c34966c6) +- Rebalance shards when ingester status changes (#6185) and improved rebalance algorithm (#6018) +- Add object storage metrics for GCS (#5889) +- Add IO metrics and track bytes written to the WAL (#6429) +- Add configurable system prefix and separator for metrics (#6445) +- Expose per-shard load configuration and disable the Tokio LIFO slot by default (#5898, #5899) +- Redact sensitive information in developer API debug output (#6191) - Disable control plane check for searcher (#5599, #5360) - Partially implement `_elastic/_cluster/health` (#5595) - Make Jaeger span attribute-to-tag conversion exhaustive (#5574) @@ -34,9 +74,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Limit and monitor warmup memory usage (#5568) - Add eviction metrics to caches (#5523) - Record object storage request latencies (#5521) -- Add some kind of throttling on the janitor to prevent it from overloading (#5510) +- Throttle the janitor to prevent overloading the metastore (#5510) - Prevent single split searches from different `leaf_search` from interleaving (#5509) -- Retry on S3 internal error (#5504) +- Retry on S3 internal error (#5504); make more S3 errors retryable (#5384) - Allow specifying OTEL index ID in header (#5503) - Add a metric to count storage errors and their error code (#5497) - Add support for concatenated fields (#4773, #5369, #5331) @@ -47,14 +87,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add some additional search metrics (#5447) - Improve GC resilience and add metrics (#5420) - Enable force shutdown with 2nd Ctrl+C (#5414) -- Add request_timeout_secs config to searcher config (#5402) +- Add `request_timeout_secs` to searcher config (#5402) - Memoize S3 client (#5377) - Add more env var config for Postgres (#5365) - Enable str fast field range queries (#5324) - Allow querying non-existing fields (#5308) -- Support updating doc mapper through api (#5253) - Add optional special handling for hex in code tokenizer (#5200) +- Add `UnicodeSegmenter` tokenizer and case-insensitive regex support for lowercasing tokenizers (#6277, #6454) - Added a circuit breaker layer (#5134) +- Follow AWS hints for Lambda retries (#6195) +- Improve cluster sizing documentation for control plane, metastore and janitor (#6202) - Various performance optimizations in Tantivy (https://github.com/quickwit-oss/tantivy/blob/main/CHANGELOG.md) ### Changed @@ -68,12 +110,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improve merge pipeline finalization (#5475) - Allow failed splits in root search (#5440) - Batch delete from GC (#5404, #5380) -- Make some S3 errors retryable (#5384) - Change default timestamps in OTEL logs (#5366) - Only return root spans for Jaeger HTTP API (#5358) - Share aggregation limit on node (#5357) +- Make regex lenient to start and end anchors (#6089) — *later reverted, see Fixed* +- Use correct precision level for fastfield-based term queries on datetime (#6027) +- Disable the Tokio LIFO slot and tune per-shard default load (#5898) +- Improve control-plane logging (#6003) +- Migrate Quickwit metrics to `metrics-rs` and move exporter setup into `quickwit-telemetry-exporters` (#6374) +- Move OTLP metrics export to `metrics-opentelemetry`, remove the temporality override, and add default retry policy to OTLP exporters (#6499, #6510, #6522, #6535) +- Use CRC32C instead of MD5 for object-storage checksums, and document the `disable_checksums` storage config parameter (#6325, #6442) +- Make `Storage::get_slice` zero-copy for single-segment bodies (#6336) +- Add Protobuf WAL mrecord serialization support for forward/backward-compatible schema evolution; legacy WAL writes remain supported (#6521) +- Improve search scheduling by using current node load, prioritizing result merging over split searches, and aborting split warmup when a required term is missing (#6390, #6511, #6512) +- Update Lambda release artifacts and automate Lambda binary builds in the release workflow (#6330, #6456, #6457, #6458) +- Upgraded Tantivy to 1e859fd with multiple search, aggregation, and tokenizer improvements (see Tantivy CHANGELOG) (#6327, #6360, #6365, #6380, #6444, #6495, #6516, #6532) ### Fixed +- Fix timestamp field bound precision and add range checks to floating-point timestamp parsing (#6201, #6525) - Fix existence queries for nested fields (#5581) - Fix lenient option with wildcard queries (#5575) - Fix incompatible ES Java date format (#5462) @@ -86,12 +140,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix configuration interpolation (#5403) - Fix jaeger duration parse error (#5518) - Fix unit conversion in jaeger http search endpoint (#5519) +- Fix Kinesis source panic on resharding (#5912) +- Fix Azure multipart upload data corruption (#5919) +- Fix leaf list fields merging logic (#5908) +- Fix empty intermediate aggregation results merge (#5930) +- Fix error when running a scoring query with cache (#6025) +- Fix `f64` not working properly with concatenated fields (#6074) +- Fix wrong range result when datetime was inferred in JSON type (#6048) +- Fix infinite-loop OOM bug caused by rebalancing shards from unavailable ingesters (#6078) +- Fix index reincarnation routing bug (#6217) +- Fix bug when deploying a new routing table (#6249) +- Fix retiring/decommissioned indexer handling, shard ownership deletion, empty-shard indexing checks, and material indexer pool updates (#6427, #6504, #6509, #6518, #6553) +- Fix control-plane scheduling idempotency and unavailable-node reporting (#6503, #6524, #6551) +- Fix descending sorted-series encoding, null ordering in sorted-series keys, and maturity assignment on Parquet splits (#6338, #6343, #6399) +- Fix Parquet merge adapter and consumer edge cases around sorted input, sub-regions, and stronger verifiers (#6426, #6428) +- Fix OpenDAL GCS TLS regression, GCS put memory growth, single-part MD5 headers, S3 stalled-stream retryability, S3 dispatch retries, and localstack checksum compatibility (#6478, #6482, #6485, #6492, #6501, #6502, #6539, #6541) +- Fix Azure delete metrics for the Azure blob backend (#6469) +- Fix Lambda retry log storms and empty `LAMBDA_ZIP_PATH` handling (#6318, #6462) +- Fix gRPC telemetry exporters (#6558) +- Truncate split lists in error logs to keep large routing errors readable (#6315) +- Fix Chitchat gossip bug triggering excess gRPC traffic and bump chitchat (#6082, #6323) +- Revert over-eager anchor lenience in regex queries (#6089) +- `skip_aggregation_finalization` fixes for composite aggregations +- Jaeger: query resource attributes when the Jaeger request carries tags ### Removed -- Remove support for 2-digit years in java datetime parser (#5596) -- Remove DocMapper trait (#5508) -- Remove support for AWS Lambda (#5884) +- Remove support for 2-digit years in Java datetime parser (#5596) +- Remove `DocMapper` trait (#5508) +- Remove standalone AWS Lambda deployment mode — the previous dedicated search/indexing Lambda binaries are gone (#5884). *AWS Lambda is still supported for search offloading; see the Added section.* - Remove search stream endpoint (#5886) +- Remove mentions of the stream API from the docs (#5958) +- Remove the legacy telemetry crate and native-tls from transitive dependencies (#6431, #6537) +- Remove the legacy `/api/v1/{index}/ingest-v2` REST endpoint (V2 is now served from `/ingest` — see Breaking / Migration) +- Remove the unused multilang tokenizer feature (#6154) +- Restrict stemming to the `multilang` feature (#6085) + +### Security +- Upgrade dependencies including `rustls-webpki` for RUSTSEC-2026-0104, OpenSSL, Python requests, and UI packages with known vulnerabilities (#6219, #6307, #6341, #6342, #6387) # [0.8.1] diff --git a/docs/get-started/quickstart.md b/docs/get-started/quickstart.md index 6acc018001c..311fbaf6c03 100644 --- a/docs/get-started/quickstart.md +++ b/docs/get-started/quickstart.md @@ -6,7 +6,7 @@ sidebar_position: 1 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -In this quick start guide, we will install Quickwit, create an index, add documents and finally execute search queries. All the Quickwit commands used in this guide are documented [in the CLI reference documentation](/docs/reference/cli.md). +In this quick start guide, we will install Quickwit, create an index, add documents and finally execute search queries. All the Quickwit commands used in this guide are documented [in the CLI reference documentation](../reference/cli.md). ## Install Quickwit using Quickwit installer @@ -31,13 +31,7 @@ You can also pull and run the Quickwit binary in an isolated Docker container. ```bash # Create first the data directory. mkdir qwdata -docker run --rm quickwit/quickwit --version -``` - -If you are using Apple silicon based macOS system you might need to specify the platform. You can also safely ignore jemalloc warnings. - -```bash -docker run --rm --platform linux/amd64 quickwit/quickwit --version +docker run --rm quickwit/quickwit:0.9.0 --version ``` ## Start Quickwit server @@ -55,7 +49,7 @@ docker run --rm --platform linux/amd64 quickwit/quickwit --version ```bash -docker run --rm -v $(pwd)/qwdata:/quickwit/qwdata -p 127.0.0.1:7280:7280 quickwit/quickwit run +docker run --rm -v $(pwd)/qwdata:/quickwit/qwdata -p 127.0.0.1:7280:7280 quickwit/quickwit:0.9.0 run ``` @@ -72,16 +66,16 @@ curl http://localhost:7280/api/v1/version ## Create your first index -Before adding documents to Quickwit, you need to create an index configured with a YAML config file. This config file notably lets you define how to map your input documents to your index fields and whether these fields should be stored and indexed. See the [index config documentation](/docs/configuration/index-config.md). +Before adding documents to Quickwit, you need to create an index configured with a YAML config file. This config file notably lets you define how to map your input documents to your index fields and whether these fields should be stored and indexed. See the [index config documentation](../configuration/index-config.md). Let's create an index configured to receive Stackoverflow posts (questions and answers). ```bash # First, download the stackoverflow dataset config from Quickwit repository. -curl -o stackoverflow-index-config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/stackoverflow/index-config.yaml +curl -o stackoverflow-index-config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/v0.9.0/config/tutorials/stackoverflow/index-config.yaml ``` -The index config defines three fields: `title`, `body` and `creationDate`. `title` and `body` are [indexed and tokenized](../configuration/index-config.md#text-type), and they are also used as default search fields, which means they will be used for search if you do not target a specific field in your query. `creationDate` serves as the timestamp for each record. There are no more explicit field definitions as we can use the default dynamic [mode](/docs/configuration/index-config.md#mode): the undeclared fields will still be indexed, by default fast fields are enabled to enable aggregation queries. and the `raw` tokenizer is used for text. +The index config defines three fields: `title`, `body` and `creationDate`. `title` and `body` are [indexed and tokenized](../configuration/index-config.md#text-type), and they are also used as default search fields, which means they will be used for search if you do not target a specific field in your query. `creationDate` serves as the timestamp for each record. There are no more explicit field definitions as we can use the default dynamic [mode](../configuration/index-config.md#mode): the undeclared fields will still be indexed, by default fast fields are enabled to enable aggregation queries. and the `raw` tokenizer is used for text. And here is the complete config: @@ -89,7 +83,7 @@ And here is the complete config: # # Index config file for stackoverflow dataset. # -version: 0.7 +version: 0.8 index_id: stackoverflow @@ -117,7 +111,7 @@ search_settings: default_search_fields: [title, body] indexing_settings: - commit_timeout_secs: 30 + commit_timeout_secs: 10 ``` Now we can create the index with the command: @@ -148,7 +142,7 @@ You're now ready to fill the index. ## Let's add some documents -Quickwit can index data from many [sources](/docs/configuration/source-config.md). We will use a new line delimited json [ndjson](http://ndjson.org/) datasets as our data source. +Quickwit can index data from many [sources](../configuration/source-config.md). We will use a new line delimited json [ndjson](http://ndjson.org/) datasets as our data source. Let's download [a bunch of stackoverflow posts (10 000)](https://quickwit-datasets-public.s3.amazonaws.com/stackoverflow.posts.transformed-10000.json) in [ndjson](http://ndjson.org/) format and index it. ```bash @@ -276,7 +270,7 @@ Congrats! You can level up with the following tutorials to discover all Quickwit Run the following command from within Quickwit's installation directory. ```bash -curl -o stackoverflow-index-config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/stackoverflow/index-config.yaml +curl -o stackoverflow-index-config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/v0.9.0/config/tutorials/stackoverflow/index-config.yaml ./quickwit index create --index-config ./stackoverflow-index-config.yaml curl -O https://quickwit-datasets-public.s3.amazonaws.com/stackoverflow.posts.transformed-10000.json ./quickwit index ingest --index stackoverflow --input-path ./stackoverflow.posts.transformed-10000.json --force diff --git a/docs/get-started/tutorials/prometheus-metrics.md b/docs/get-started/tutorials/prometheus-metrics.md index 03ad40c4cc2..a2c6753ad0b 100644 --- a/docs/get-started/tutorials/prometheus-metrics.md +++ b/docs/get-started/tutorials/prometheus-metrics.md @@ -17,27 +17,19 @@ Here’s the complete Docker Compose configuration: ```yaml services: quickwit: - image: quickwit/quickwit - environment: - QW_ENABLE_OPENTELEMETRY_OTLP_EXPORTER: "true" - OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:7281" + image: quickwit/quickwit:0.9.0 ports: - 7280:7280 command: ["run"] grafana: - image: grafana/grafana-oss + image: grafana/grafana-oss:13.0.2 container_name: grafana ports: - "${MAP_HOST_GRAFANA:-127.0.0.1}:3000:3000" - environment: - GF_INSTALL_PLUGINS: https://github.com/quickwit-oss/quickwit-datasource/releases/download/v0.4.6/quickwit-quickwit-datasource-0.4.6.zip;quickwit-quickwit-datasource - GF_AUTH_DISABLE_LOGIN_FORM: "true" - GF_AUTH_ANONYMOUS_ENABLED: "true" - GF_AUTH_ANONYMOUS_ORG_ROLE: Admin prometheus: - image: prom/prometheus:latest + image: prom/prometheus:v3.13.1 container_name: prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml # Ensure prometheus.yml exists in the same directory @@ -80,10 +72,10 @@ This will launch Quickwit, Prometheus, and Grafana services. ## Step 4: Configure Grafana to Use Prometheus -1. Open Grafana in your browser at `http://localhost:3000`. -2. Navigate to **Configuration** > **Data Sources**. -3. Click **Add Data Source**, select **Prometheus**, and set the URL to `http://prometheus:9090`. -4. Click **Save & Test** to verify the connection. +1. Open Grafana in your browser at `http://localhost:3000` and sign in with the default credentials (`admin` / `admin`). Grafana will ask you to choose a new password. +2. Navigate to **Connections** > **Data sources**. +3. Click **Add new data source**, select **Prometheus**, and set the URL to `http://prometheus:9090`. +4. Click **Save & test** to verify the connection. ## Step 5: Create or Use Pre-Configured Dashboards @@ -92,4 +84,3 @@ Now that Grafana is set up with Prometheus as a data source, you can create cust 1. Go to the **Dashboards** section in Grafana. 2. Import or create a new dashboard to visualize metrics. 3. Alternatively, use one of Quickwit’s [pre-configured dashboards](../../operating/monitoring). - diff --git a/docs/get-started/tutorials/trace-analytics-with-grafana.md b/docs/get-started/tutorials/trace-analytics-with-grafana.md index 6d099b6ee0d..d34447acfb1 100644 --- a/docs/get-started/tutorials/trace-analytics-with-grafana.md +++ b/docs/get-started/tutorials/trace-analytics-with-grafana.md @@ -17,10 +17,9 @@ First, create a `docker-compose.yml` file. This file will define the services ne Below is the complete Docker Compose configuration: ```yaml -version: '3.0' services: quickwit: - image: quickwit/quickwit + image: quickwit/quickwit:0.9.0 environment: QW_ENABLE_OPENTELEMETRY_OTLP_EXPORTER: "true" OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:7281" @@ -29,15 +28,12 @@ services: command: ["run"] grafana: - image: grafana/grafana-oss + image: grafana/grafana-oss:13.0.2 container_name: grafana ports: - "${MAP_HOST_GRAFANA:-127.0.0.1}:3000:3000" environment: - GF_INSTALL_PLUGINS: https://github.com/quickwit-oss/quickwit-datasource/releases/download/v0.4.6/quickwit-quickwit-datasource-0.4.6.zip;quickwit-quickwit-datasource - GF_AUTH_DISABLE_LOGIN_FORM: "true" - GF_AUTH_ANONYMOUS_ENABLED: "true" - GF_AUTH_ANONYMOUS_ORG_ROLE: Admin + GF_PLUGINS_PREINSTALL_SYNC: quickwit-quickwit-datasource@@https://github.com/quickwit-oss/quickwit-datasource/releases/download/v0.4.6/quickwit-quickwit-datasource-0.4.6.zip ``` The default Grafana port is 3000. If this port is already taken, you can modify the port mapping, for example, changing 3000:3000 to 3100:3000 or any other available port. @@ -50,14 +46,20 @@ $ docker compose up You should be able to access Quickwit's UI on `http://localhost:7280/` and Grafana's UI on `http://localhost:3000/`. +:::caution + +This local self-observability setup sends Quickwit's telemetry back into the same Quickwit instance and can generate data rapidly. Stop the services with `docker compose down` when you finish the tutorial. + +::: + ## Setting up the datasource -In Grafana, head to [Data Sources](http://localhost:3000/connections/datasources). If the plugin is installed correctly you should be able to find Quickwit in the list. +In Grafana, sign in with the default credentials (`admin` / `admin`) and choose a new password. Then head to [Data sources](http://localhost:3000/connections/datasources). If the plugin is installed correctly, you should be able to find Quickwit in the list. We're going to set up a new Quickwit data source looking at Quickwit's own OpenTelemetry traces, let's configure the datasource with the following parameters: - URL : `http://quickwit:7280/api/v1` _This uses the docker service name as the host_ -- Index ID : `otel-traces-v0_7` +- Index ID : `otel-traces-v0_9` Save and test, you should obtain a confirmation that the datasource is correctly set up. @@ -68,7 +70,7 @@ Save and test, you should obtain a confirmation that the datasource is correctly You can also set up a new Quickwit data source looking at Quickwit's own OpenTelemetry logs (or your own logs index), let's configure the datasource with the following parameters: - URL : `http://quickwit:7280/api/v1` _This uses the docker service name as the host_ -- Index ID : `otel-logs-v0_7` +- Index ID : `otel-logs-v0_9` ## Creating a dashboard @@ -77,7 +79,7 @@ You can then [create a new dashboard](http://localhost:3000/dashboard/new) and a Quickwit sends itself its own traces, so you should already have data to display. Let's configure some panels ! -- a Table counting span_names +- a Table counting `span_name` values - **Panel type** : Table - **Query**: _empty_ - **Metric** : Count @@ -89,9 +91,9 @@ Quickwit sends itself its own traces, so you should already have data to display - **Group by** : Date Histogram : `span_start_timestamp_nanos` : Interval 1h - a Bar Chart showing the amount of ERROR logs per hour for the last 6 hours : - **Panel type**: Bar Chart - - **Query**: "service_name:quickwit AND events.event_attributes.level:ERROR" + - **Query**: "service_name:quickwit AND severity_text:ERROR" - **Metric**: Count - - **Group by** : Terms : `span_start_timestamp_nanos` : Interval 1h + - **Group by** : Date Histogram : `timestamp_nanos` : Interval 1h - another query on the same Bar Chart for WARN logs ## The result @@ -100,4 +102,10 @@ Here's what your first dashboard can look like : ![Quickwit Panel in Grafana Dashboard](../../assets/images/screenshot-grafana-tutorial-dashboard.png) +## Clean up +Stop and remove the tutorial containers: + +```bash +docker compose down +``` diff --git a/docs/get-started/tutorials/tutorial-hdfs-logs-distributed-search-aws-s3.md b/docs/get-started/tutorials/tutorial-hdfs-logs-distributed-search-aws-s3.md index ea90f77cc1e..4af50b31451 100644 --- a/docs/get-started/tutorials/tutorial-hdfs-logs-distributed-search-aws-s3.md +++ b/docs/get-started/tutorials/tutorial-hdfs-logs-distributed-search-aws-s3.md @@ -6,7 +6,7 @@ icon_url: /img/tutorials/aws-logo.png sidebar_position: 6 --- -In this guide, we will index about 40 million log entries (13 GB decompressed) on AWS S3 using an EC2 instance and launch a three-node distributed search cluster. +In this guide, we will index about 20 million log entries (7 GB decompressed) on AWS S3 using an EC2 instance and launch a three-node distributed search cluster. Example of a log entry: ```json @@ -50,14 +50,14 @@ export S3_PATH=s3://{path/to/bucket}/indexes You'll want to include the necessary authorization for the given bucket, this can be done by setting the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables, or via the AWS credentials file. Usually located at `~/.aws/credentials`. -For more info check out [our AWS setup guide](https://quickwit.io/docs/guides/aws-setup) +For more information, check out [our AWS setup guide](../../guides/aws-setup). ::: Now we can create a Quickwit config file. ```bash # Create Quickwit config file. -echo "version: 0.7 +echo "version: 0.8 node_id: searcher-1 listen_address: 0.0.0.0 metastore_uri: ${S3_PATH} @@ -70,7 +70,7 @@ default_index_root_uri: ${S3_PATH} > # config.yaml > node_id: searcher-1 > listen_address: 0.0.0.0 -> version: 0.7 +> version: 0.8 > metastore_uri: ${S3_PATH} > default_index_root_uri: ${S3_PATH} >``` @@ -85,7 +85,7 @@ We are now ready to start Quickwit. ```bash # First, download the hdfs logs config from Quickwit repository. -curl -o hdfs_logs_index_config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/hdfs-logs/index-config.yaml +curl -o hdfs_logs_index_config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/v0.9.0/config/tutorials/hdfs-logs/index-config.yaml ``` The index config defines five fields: `timestamp`, `tenant_id`, `severity_text`, `body`, and one JSON field @@ -95,7 +95,7 @@ used by Quickwit for [splits pruning](../../overview/architecture) at query time Check out the [index config docs](../../configuration/index-config) for more details. ```yaml title="hdfs_logs_index_config.yaml" -version: 0.7 +version: 0.8 index_id: hdfs-logs @@ -146,7 +146,7 @@ Instead of downloading and indexing the data in separate steps, we will use pipe ```bash wget https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants.json.gz -gunzip -c hdfs-logs-multitenants.json.gz | ./quickwit index ingest --index hdfs-logs +gunzip -c hdfs-logs-multitenants.json.gz | ./quickwit index ingest --index hdfs-logs --force ``` :::note @@ -203,11 +203,9 @@ Also, it needs `{rest.listen_port} + 1` for gRPC communication between instances In AWS, you can create a security group to group these inbound rules. Check out the [network section](../../guides/aws-setup) of our AWS setup guide. To make things easier, let's create a security group that opens the TCP/UDP port range [7200-7300]. -Next, create three EC2 instances using the previously created security group. Take note of each instance's public IP address. +Next, create two additional EC2 instances using the previously created security group. Take note of each instance's public IP address. -Now ssh into the first EC2 instance, install Quickwit, and [configure the environment](../../guides/aws-setup) to let Quickwit access the index S3 buckets. - -Let's install Quickwit on the second and third EC2 instances. +SSH into the second and third EC2 instances, install Quickwit, and [configure the environment](../../guides/aws-setup) to let Quickwit access the index S3 bucket. ```bash curl -L https://install.quickwit.io | sh @@ -223,7 +221,7 @@ export IP_NODE_1={first-ec2-instance-public-ip} ```bash # configuration for our second node -echo "version: 0.7 +echo "version: 0.8 node_id: searcher-2 metastore_uri: ${S3_PATH} default_index_root_uri: ${S3_PATH} @@ -238,7 +236,7 @@ peer_seeds: ```bash # configuration for our third node -echo "version: 0.7 +echo "version: 0.8 node_id: searcher-3 listen_address: 0.0.0.0 peer_seeds: @@ -261,7 +259,7 @@ You will see in the terminal the confirmation that the instance has joined the e Now we can query one of our instance directly by issuing http requests to one of the nodes rest API endpoint. ``` -curl -v "http://0.0.0.0:7280/api/v1/hdfs-logs/search?query=severity_text:ERROR" +curl -v "http://127.0.0.1:7280/api/v1/hdfs-logs/search?query=severity_text:ERROR" ``` Check out the logs of all instances and you will see that all nodes are working. @@ -282,6 +280,6 @@ Let's do some cleanup by deleting the index: Also remember to remove the security group to protect your EC2 instances. You can just remove the instances if you don't need them. -Congratz! You finished this tutorial! +Congratulations! You finished this tutorial! -To continue your Quickwit journey, check out the [search REST API reference](/docs/reference/rest-api) or the [query language reference](/docs/reference/query-language). +To continue your Quickwit journey, check out the [search REST API reference](../../reference/rest-api) or the [query language reference](../../reference/query-language). diff --git a/docs/get-started/tutorials/tutorial-hdfs-logs.md b/docs/get-started/tutorials/tutorial-hdfs-logs.md index 23a941081ee..aec3499cf24 100644 --- a/docs/get-started/tutorials/tutorial-hdfs-logs.md +++ b/docs/get-started/tutorials/tutorial-hdfs-logs.md @@ -9,7 +9,7 @@ sidebar_position: 3 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -In this guide, we will index about 20 million log entries (7 GB decompressed) on a local machine. If you want to start a server with indexes on AWS S3 with several search nodes, check out the [tutorial for distributed search](tutorial-hdfs-logs-distributed-search-aws-s3.md). +In this guide, we will index about 20 million log entries (7 GB decompressed) on a local machine. If you want to start a server with indexes on AWS S3 with several search nodes, check out the [tutorial for distributed search](tutorial-hdfs-logs-distributed-search-aws-s3). Here is an example of a log entry: ```json @@ -40,7 +40,7 @@ cd quickwit-v*/ Or pull and run the Quickwit binary in an isolated Docker container. ```bash -docker run quickwit/quickwit --version +docker run quickwit/quickwit:0.9.0 --version ``` ## Start a Quickwit server @@ -58,11 +58,9 @@ docker run quickwit/quickwit --version ```bash -docker run --rm -v $(pwd)/qwdata:/quickwit/qwdata -p 127.0.0.1:7280:7280 quickwit/quickwit run +docker run --rm -v $(pwd)/qwdata:/quickwit/qwdata -p 127.0.0.1:7280:7280 quickwit/quickwit:0.9.0 run ``` -You may need to specify the platform if you are using Apple silicon based macOS system with the `--platform linux/amd64` flag. You can also safely ignore jemalloc warnings. - @@ -74,17 +72,17 @@ Let's create an index configured to receive these logs. ```bash # First, download the hdfs logs config from Quickwit repository. -curl -o hdfs_logs_index_config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/hdfs-logs/index-config.yaml +curl -o hdfs_logs_index_config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/v0.9.0/config/tutorials/hdfs-logs/index-config.yaml ``` The index config defines five fields: `timestamp`, `tenant_id`, `severity_text`, `body`, and one JSON field for the nested values `resource.service`, we could use an object field here and maintain a fixed schema, but for convenience we're going to use a JSON field. It also sets the `default_search_fields`, the `tag_fields`, and the `timestamp_field`. -The `timestamp_field` and `tag_fields` are used by Quickwit for [splits pruning](../../overview/concepts/querying.md#time-sharding) at query time to boost search speed. +The `timestamp_field` and `tag_fields` are used by Quickwit for [splits pruning](../../overview/concepts/querying#time-sharding) at query time to boost search speed. Check out the [index config docs](../../configuration/index-config) for more details. ```yaml title="hdfs-logs-index.yaml" -version: 0.7 +version: 0.8 index_id: hdfs-logs @@ -151,15 +149,23 @@ This can take up to 10 minutes on a modern machine, the perfect time for a coffe ```bash -curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants.json.gz | gunzip | ./quickwit index ingest --index hdfs-logs +curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants.json.gz | gunzip | ./quickwit index ingest --index hdfs-logs --force ``` +On macOS or Windows: + +```bash +curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants.json.gz | gunzip | docker run -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit:0.9.0 index ingest --index hdfs-logs --force --endpoint http://host.docker.internal:7280 +``` + +On Linux: + ```bash -curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants.json.gz | gunzip | docker run -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit index ingest --index hdfs-logs +curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants.json.gz | gunzip | docker run --network=host -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit:0.9.0 index ingest --index hdfs-logs --force --endpoint http://127.0.0.1:7280 ``` @@ -175,7 +181,7 @@ If you are in a hurry, use the sample dataset that contains 10 000 documents, we ```bash -curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json | ./quickwit index ingest --index hdfs-logs +curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json | ./quickwit index ingest --index hdfs-logs --force ``` @@ -185,13 +191,13 @@ curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10 On macOS or Windows: ```bash -curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json | docker run -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit index ingest --index hdfs-logs --endpoint http://host.docker.internal:7280 +curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json | docker run -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit:0.9.0 index ingest --index hdfs-logs --force --endpoint http://host.docker.internal:7280 ``` On linux: ```bash -curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json | docker run --network=host -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit index ingest --index hdfs-logs --endpoint http://127.0.0.1:7280 +curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json | docker run --network=host -v $(pwd)/qwdata:/quickwit/qwdata -i quickwit/quickwit:0.9.0 index ingest --index hdfs-logs --force --endpoint http://127.0.0.1:7280 ``` @@ -200,7 +206,7 @@ curl https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10 ```bash wget https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json -curl -XPOST http://localhost:7280/api/v1/hdfs-logs/ingest -H "content-type: application/json" --data-binary @hdfs-logs-multitenants-10000.json +curl -XPOST "http://localhost:7280/api/v1/hdfs-logs/ingest?commit=force" -H "content-type: application/json" --data-binary @hdfs-logs-multitenants-10000.json ``` @@ -224,13 +230,13 @@ You can check it's working by searching for `INFO` in `severity_text` field: On macOS or Windows: ```bash -docker run -v $(pwd)/qwdata:/quickwit/qwdata quickwit/quickwit index search --index hdfs-logs --query "severity_text:INFO" --endpoint http://host.docker.internal:7280 +docker run -v $(pwd)/qwdata:/quickwit/qwdata quickwit/quickwit:0.9.0 index search --index hdfs-logs --query "severity_text:INFO" --endpoint http://host.docker.internal:7280 ``` On linux: ```bash -docker run --network=host -v $(pwd)/qwdata:/quickwit/qwdata quickwit/quickwit index search --index hdfs-logs --query "severity_text:INFO" --endpoint http://127.0.0.1:7280 +docker run --network=host -v $(pwd)/qwdata:/quickwit/qwdata quickwit/quickwit:0.9.0 index search --index hdfs-logs --query "severity_text:INFO" --endpoint http://127.0.0.1:7280 ``` @@ -298,7 +304,7 @@ curl -XDELETE http://127.0.0.1:7280/api/v1/indexes/hdfs-logs -Congratz! You finished this tutorial! +Congratulations! You finished this tutorial! -To continue your Quickwit journey, check out the [tutorial for distributed search](tutorial-hdfs-logs-distributed-search-aws-s3.md) or dig into the [search REST API](/docs/reference/rest-api) or [query language](/docs/reference/query-language). +To continue your Quickwit journey, check out the [tutorial for distributed search](tutorial-hdfs-logs-distributed-search-aws-s3) or dig into the [search REST API](../../reference/rest-api) or [query language](../../reference/query-language). diff --git a/docs/get-started/tutorials/tutorial-jaeger.md b/docs/get-started/tutorials/tutorial-jaeger.md index 9da5d29766c..8d2dfc6d538 100644 --- a/docs/get-started/tutorials/tutorial-jaeger.md +++ b/docs/get-started/tutorials/tutorial-jaeger.md @@ -12,11 +12,9 @@ You only need a minute to get Jaeger working with Quickwit storage backend. Let's use `docker compose` with the following configuration: ```yaml title="docker-compose.yaml" -version: "3" - services: quickwit: - image: quickwit/quickwit:${QW_VERSION:-0.8.1} + image: quickwit/quickwit:0.9.0 volumes: - ./qwdata:/quickwit/qwdata ports: @@ -27,7 +25,7 @@ services: command: ["run"] jaeger-query: - image: jaegertracing/jaeger-query:1.60 + image: jaegertracing/jaeger-query:1.68.0 ports: - 16686:16686 environment: @@ -36,6 +34,18 @@ services: - GRPC_STORAGE_TLS=false ``` +:::note + +Jaeger v1 is used here only for this local tutorial. It is end-of-life; use Jaeger v2 for production deployments. + +::: + +:::caution + +This local self-observability setup sends Quickwit's telemetry back into the same Quickwit instance and can generate data rapidly. Stop the services when you finish the tutorial. The indexed data remains in the `./qwdata` directory until you remove it. + +::: + As you can see in the docker compose file, Quickwit is configured to send its own traces `OTEL_EXPORTER_OTLP_ENDPOINT` to itself `http://localhost:7281`. On the other side, Jaeger is configured to use a gRPC storage server `quickwit:7281`. @@ -45,10 +55,10 @@ Save and run the recipe: $ docker compose up ``` -You should be able to access Quickwit's UI on `http://localhost:7280/` and Jager's UI on `http://localhost:16686/`. +You should be able to access Quickwit's UI on `http://localhost:7280/` and Jaeger's UI on `http://localhost:16686/`. -## Searching and view traces in Jaeger +## Searching and viewing traces in Jaeger Quickwit generates many traces, let's take a look at some of them: - `find_traces`: generated by the "Find traces" Jaeger button. @@ -69,12 +79,22 @@ You can also use the Quickwit UI at [http://localhost:7280](http://localhost:728 Here are a couple of query examples: - `service_name:quickwit AND events.event_attributes.level:INFO` - `span_duration_millis:>100` -- `resource_attributes.service.version:v0.8.1` +- `resource_attributes.service.version:0.9.0` - `service_name:quickwit` That's it! You can level up with the following tutorials to discover all Quickwit features. +## Clean up + +Stop and remove the tutorial containers: + +```bash +docker compose down +``` + +If you no longer need the tutorial data, you can also remove the `./qwdata` directory. + ## Next tutorials -- [Send traces using an OTEL collector](/docs/distributed-tracing/send-traces/using-otel-collector.md) -- [Send traces from a python web server](/docs/distributed-tracing/send-traces/using-otel-sdk-python.md) +- [Send traces using an OTEL collector](../../distributed-tracing/send-traces/using-otel-collector) +- [Send traces from a Python web server](../../distributed-tracing/send-traces/using-otel-sdk-python) diff --git a/docs/get-started/upgrade.md b/docs/get-started/upgrade.md new file mode 100644 index 00000000000..3a0781f3289 --- /dev/null +++ b/docs/get-started/upgrade.md @@ -0,0 +1,62 @@ +--- +title: Upgrade +sidebar_position: 5 +--- + +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. + +## Upgrading to 0.9 + +1. **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. +2. **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. +3. **Stop all 0.8.x nodes before starting any 0.9 node.** Mixed-version clusters are not supported during the migration. + +### Ingest V2 + +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_V2` now defaults to `true`. +- `POST /api/v1/{index}/ingest` routes to V2 automatically. V1 still exists internally and can be reached per-request with `?use_legacy_ingest=true`, or cluster-wide by setting `QW_ENABLE_INGEST_V2=false`. +- `POST /api/v1/{index}/ingest-v2` has been removed. +- `QW_DISABLE_INGEST_V1=true` lets 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. + +### Configuration changes + +- **`rest_listen_port` is deprecated.** Move it under the new `rest` block: + ```yaml + # 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. + +### Metric name changes + +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 `service` label instead of embedding the service name in the metric name: + - `quickwit__grpc_requests_total` becomes `quickwit_grpc_requests_total{service=""}` + - `quickwit__grpc_requests_in_flight` becomes `quickwit_grpc_requests_in_flight{service=""}` + - `quickwit__grpc_request_duration_seconds` becomes `quickwit_grpc_request_duration_seconds{service=""}` +- Janitor GC metrics no longer include the duplicated `quickwit_` prefix from the old `quickwit_janitor` namespace. For example, `quickwit_quickwit_janitor_gc_deleted_bytes_total` becomes `quickwit_janitor_gc_deleted_bytes_total`. + +### Rust toolchain (for source builds only) + +Building from source now requires Rust **1.92** (tracked in `rust-toolchain.toml`). Users of the published Docker images or prebuilt binaries are unaffected. + +### Rolling back + +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. + +## Upgrading to earlier versions + +See the [CHANGELOG](https://github.com/quickwit-oss/quickwit/blob/main/CHANGELOG.md) for breaking changes in prior releases. diff --git a/docs/reference/es_compatible_api.md b/docs/reference/es_compatible_api.md index 28ba1aa7eb2..b1a0ba3702b 100644 --- a/docs/reference/es_compatible_api.md +++ b/docs/reference/es_compatible_api.md @@ -408,7 +408,7 @@ The `index_filter` parameter allows you to filter which indices contribute to th Like Elasticsearch, this is a **best-effort** approach: Quickwit may return field capabilities from indices that do not actually contain any matching documents. In Quickwit, the filtering is limited to the existing split-pruning based on metadata: - **Time pruning**: Range queries on the timestamp field can eliminate splits whose time range does not overlap with the filter. -- **Tag pruning**: Term queries on [tag fields](../configuration/index-config.md#tag-fields) can eliminate splits that do not contain the requested tag value. +- **Tag pruning**: Term queries on [tag fields](../overview/concepts/querying#tag-pruning) can eliminate splits that do not contain the requested tag value. Other filter types (e.g. full-text queries or term queries on non-tag fields) are accepted but will not prune any splits — all indices will be returned as if no filter was specified. In particular, Quickwit does not check whether terms are present in the term dictionary. diff --git a/quickwit/Cargo.lock b/quickwit/Cargo.lock index 42a2933af36..9078c32e129 100644 --- a/quickwit/Cargo.lock +++ b/quickwit/Cargo.lock @@ -8313,7 +8313,7 @@ dependencies = [ [[package]] name = "quickwit-actors" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8333,7 +8333,7 @@ dependencies = [ [[package]] name = "quickwit-aws" -version = "0.8.0" +version = "0.9.0" dependencies = [ "aws-config", "aws-runtime", @@ -8353,7 +8353,7 @@ dependencies = [ [[package]] name = "quickwit-cli" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "backtrace", @@ -8405,7 +8405,7 @@ dependencies = [ [[package]] name = "quickwit-cluster" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8432,7 +8432,7 @@ dependencies = [ [[package]] name = "quickwit-codegen" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "futures", @@ -8448,7 +8448,7 @@ dependencies = [ [[package]] name = "quickwit-codegen-example" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8475,7 +8475,7 @@ dependencies = [ [[package]] name = "quickwit-common" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-speed-limit", @@ -8525,7 +8525,7 @@ dependencies = [ [[package]] name = "quickwit-compaction" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8549,7 +8549,7 @@ dependencies = [ [[package]] name = "quickwit-config" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "bytes", @@ -8581,7 +8581,7 @@ dependencies = [ [[package]] name = "quickwit-control-plane" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8612,7 +8612,7 @@ dependencies = [ [[package]] name = "quickwit-datafusion" -version = "0.8.0" +version = "0.9.0" dependencies = [ "arrow", "async-trait", @@ -8651,7 +8651,7 @@ dependencies = [ [[package]] name = "quickwit-datetime" -version = "0.8.0" +version = "0.9.0" dependencies = [ "itertools 0.15.0", "serde", @@ -8663,7 +8663,7 @@ dependencies = [ [[package]] name = "quickwit-df-core" -version = "0.8.0" +version = "0.9.0" dependencies = [ "arrow", "async-trait", @@ -8685,7 +8685,7 @@ dependencies = [ [[package]] name = "quickwit-directories" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8702,7 +8702,7 @@ dependencies = [ [[package]] name = "quickwit-doc-mapper" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "arrow", @@ -8734,14 +8734,14 @@ dependencies = [ [[package]] name = "quickwit-dst" -version = "0.8.0" +version = "0.9.0" dependencies = [ "stateright", ] [[package]] name = "quickwit-index-management" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "futures", @@ -8763,7 +8763,7 @@ dependencies = [ [[package]] name = "quickwit-indexing" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "arc-swap", @@ -8831,7 +8831,7 @@ dependencies = [ [[package]] name = "quickwit-ingest" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8872,7 +8872,7 @@ dependencies = [ [[package]] name = "quickwit-integration-tests" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "arrow", @@ -8916,7 +8916,7 @@ dependencies = [ [[package]] name = "quickwit-jaeger" -version = "0.8.0" +version = "0.9.0" dependencies = [ "async-trait", "itertools 0.15.0", @@ -8949,7 +8949,7 @@ dependencies = [ [[package]] name = "quickwit-janitor" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -8983,7 +8983,7 @@ dependencies = [ [[package]] name = "quickwit-lambda-client" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -9010,7 +9010,7 @@ dependencies = [ [[package]] name = "quickwit-lambda-server" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -9034,7 +9034,7 @@ dependencies = [ [[package]] name = "quickwit-macros" -version = "0.8.0" +version = "0.9.0" dependencies = [ "proc-macro2", "quote", @@ -9043,7 +9043,7 @@ dependencies = [ [[package]] name = "quickwit-metastore" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -9090,7 +9090,7 @@ dependencies = [ [[package]] name = "quickwit-metrics" -version = "0.8.0" +version = "0.9.0" dependencies = [ "atomic_float", "const_format", @@ -9108,14 +9108,14 @@ dependencies = [ [[package]] name = "quickwit-metrics-inventory" -version = "0.8.0" +version = "0.9.0" dependencies = [ "quickwit-metrics", ] [[package]] name = "quickwit-opentelemetry" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "arrow", @@ -9139,7 +9139,7 @@ dependencies = [ [[package]] name = "quickwit-parquet-engine" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "arrow", @@ -9170,7 +9170,7 @@ dependencies = [ [[package]] name = "quickwit-proto" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "async-trait", @@ -9208,7 +9208,7 @@ dependencies = [ [[package]] name = "quickwit-query" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -9233,7 +9233,7 @@ dependencies = [ [[package]] name = "quickwit-rest-client" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "bytes", @@ -9259,7 +9259,7 @@ dependencies = [ [[package]] name = "quickwit-search" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "assert-json-diff", @@ -9303,7 +9303,7 @@ dependencies = [ [[package]] name = "quickwit-serve" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "assert-json-diff", @@ -9382,7 +9382,7 @@ dependencies = [ [[package]] name = "quickwit-storage" -version = "0.8.0" +version = "0.9.0" dependencies = [ "ahash", "anyhow", @@ -9437,7 +9437,7 @@ dependencies = [ [[package]] name = "quickwit-telemetry-exporters" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "metrics", @@ -9460,7 +9460,7 @@ dependencies = [ [[package]] name = "quickwit-transport" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "arc-swap", diff --git a/quickwit/Cargo.toml b/quickwit/Cargo.toml index 2ae2d51aab6..bf57c1c53b5 100644 --- a/quickwit/Cargo.toml +++ b/quickwit/Cargo.toml @@ -89,7 +89,7 @@ default-members = [ ] [workspace.package] -version = "0.8.0" +version = "0.9.0" edition = "2024" homepage = "https://quickwit.io/" documentation = "https://quickwit.io/docs/"