Skip to content

v6.0.17

Added query-peer liveness probe options and external identity provider support, made hdx-scaler globally configurable, bumped in-cluster Grafana to version 13.0.3, and fixed late-arriving storage credentials and request signing on GET requests without a body.

This release contains bug fixes to Hydrolix v6.0. This changelog covers changes from v6.0.13 to v6.0.17. Refer to the release notes to see other notable feature announcements and information for this version.

Upgrade⚓︎

Don't skip minor versions when upgrading or downgrading

Skipping versions when upgrading or downgrading Hydrolix can result in database schema inconsistencies and cluster instability. Always upgrade or downgrade sequentially through each minor version.

Example:
Upgrade from 5.10.105.11.96.0.8, not 5.10.106.0.8.

Upgrade on GKE⚓︎

Upgrade on GKE
kubectl apply -f "https://www.hydrolix.io/operator/v6.0.17/operator-resources?namespace=${HDX_KUBERNETES_NAMESPACE}&gcp-storage-sa=${GCP_STORAGE_SA}"

Upgrade on EKS⚓︎

Upgrade on EKS
kubectl apply -f "https://www.hydrolix.io/operator/v6.0.17/operator-resources?namespace=${HDX_KUBERNETES_NAMESPACE}&aws-storage-role=${AWS_STORAGE_ROLE}"

Upgrade on LKE⚓︎

Upgrade on LKE
kubectl apply -f "https://www.hydrolix.io/operator/v6.0.17/operator-resources?namespace=$HDX_KUBERNETES_NAMESPACE"

Changelog⚓︎

Improvements⚓︎

Cluster operations improvements⚓︎

  • Added the tunable query_peer_liveness_mode which selects a liveness probe: exec (the ClickHouse-native check), http (the legacy SQL-probe path, and the default), tcp (socket only), or none. The query-peer liveness probe opens a ClickHouse-native TCP connection to the local peer and runs select 1, exercising the query path that query-head uses rather than only the HTTP path. Distinct exit codes let kubectl describe distinguish failure modes.

  • HDX Scaler: Added cluster-wide engine field as an alternative to setting per-service scalers.

  • Bumped the operator-managed Grafana from grafana/grafana-enterprise:12.4.2 to 13.0.3, with several quality-of-life improvements. Authentication is now required for Grafana image rendering, custom Grafana URLs are recognized by Keycloak and consolidated in Traefik routing, and the provisioned Prometheus datasource is removed when it's disabled.

Config API improvements⚓︎

  • The Config API can trust tokens signed by external issuers. The tunable turbine_api_trusted_token_issuers specifies the trusted issuers.

  • Added direct user creation. Create users without going through the invitation flow.

Bug fixes⚓︎

Cluster operations fixes⚓︎

  • Hardened protections for important pods during autoscaling. The operator now emits a PodDisruptionBudget (PDB) for every pool instead of only when the descheduler is enabled, so the cluster autoscaler no longer drains a node in a way that takes all of a service's pods to zero. Protected services are expressed through the descheduler.protected_services tunable and honored only when the descheduler is enabled, so the default PDBs don't block kubectl drain or autoscaler scale-down on clusters that don't run the descheduler.

Config API fixes⚓︎

  • Resolved an issue that prevented Keycloak-issued tokens from being accepted on clusters where the hydrolix_url isn't publicly accessible. This release also includes an operator fix that prevents JSON serialization errors.

Core fixes⚓︎

  • Fixed request-signing failures on GET requests that don't contain a body.

  • Fixed a bug where a storage filesystem was never rebuilt when its credential arrived late in the config.

  • Removed ZooKeeper I/O from the query execution path. A background poller now refreshes the ZooKeeper peer list so the query path reads a cached snapshot instead of blocking on ZooKeeper. These changes addressed a query-peer connection reset, a ZooKeeper async-handler context leak, segfaults, and a race condition bug.