From 6e8f43d310a9b89bf245457db6e363211a716af4 Mon Sep 17 00:00:00 2001 From: Peter Barnett Date: Wed, 28 Oct 2026 20:42:08 -0400 Subject: [PATCH 01/10] docs(release-notes): add v3.12.2 and v3.11.8 release notes Adds v3.12.2 and v3.11.8 entries to the shared Core and Enterprise release notes, and updates the reference docs to match: - `query-system-data`: from v3.11.8 and v3.12.2, an `ingest` row in `system.upgrade_parquet_node` reads `failed` with the first unconvertible Parquet file in `last_message`. - `influxdb3 manage retry-upgrade-to-pacha-tree`: the command refuses to run while an ingest node lists Parquet files it could not convert. - `data/products.yml`: `latest_patch` moves from 3.12.0 to 3.12.2 for Core and Enterprise, for merge on the v3.12.2 release day. Sources in influxdb_pro: - v3.12.2: `v3.12.1..1d56d74a85` on the 3.12 branch. Not tagged yet. - v3.11.8: `v3.11.7..b67d65872c` on the 3.11 branch. Not tagged yet. Shared by both: the Python 3.13.18 bump, Core 429 for ResourcesExhausted (#6466), the table_deletion_status re-entrant lock (#6459), WAL plugin column binding (#6791), the node-stop registrant guard and fence (#6730, (#6439), table index cache start (#6455), removed-generation details (#6462), gen0 write order on a restarted query node (#6441), and the storage engine upgrade fixes (#6417, #6528, #6693). 3.12 only: `debug catalog repair` backport (#6560), run-set pruning by column family (#5799), two-phase deduplication (#6144), stopping-ingester replication (#6764, #6777), Core-to-Enterprise catalog promotion (#6574), and the bounded runtime shutdown at exit (#6827). Enterprise already shut its runtime down in the background, so that bullet says so. Left out of the notes: dependency advisories (rustls 0.23.46, wasmtime 48.0.7, ctutils 0.4.5, zstd-sys on 3.11, the emSign root, aws-sdk-s3 sigv4a), which change no product behavior; the planning-load count of unresolved output groups (#6202), whose effect is an internal admission limit; and CI, deny.toml, and lockfile alignment commits. The Core 429 bullet differs between the two lines: 3.12 has the streamed-error fix (#6362) so CSV, JSON, and JSON Lines get the status when the query fails before the first rows; 3.11 does not, so only `pretty` and `parquet` output return 429 there. The v3.12.2 and v3.11.8 dates (2026-10-29) are the planned release day. Both branch heads were fetched on 2026-10-28; commits after the documented refs would need a follow-up. Each bullet was checked against source at the previous tag and the release ref, then reviewed adversarially by two independent passes. Those passes corrected three claims: a `failed` cluster upgrade is terminal, so the operator must run the retry command after restarting the node; the deleted-snapshot skip concerns Gen1 file cleanup, not compaction cleanup; and the table index cache bullet now states only the verified ordering change, not the connection-limit diagnosis from the commit message. Vale (hooks' error level) passes on the changed files. `yarn lint-codeblocks` could not run locally (ERR_MODULE_NOT_FOUND); no code blocks were added. No Hugo build or link check was run. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_015hYwVhKpPRctfV6Eko1zV5 --- .../manage/retry-upgrade-to-pacha-tree.md | 5 ++ .../query-system-data/_index.md | 6 ++ .../_index.md | 83 +++++++++++++++++++ data/products.yml | 4 +- 4 files changed, 96 insertions(+), 2 deletions(-) diff --git a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md index 25046c532a..5b95d2e206 100644 --- a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md +++ b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md @@ -26,6 +26,11 @@ The command re-checks every previously failed upgrade source against the catalog The reset itself only changes durable state. The migration resumes the next time a compactor node starts with `--upgrade-pacha-tree`. +Starting in v3.11.8 and v3.12.2, the command refuses to run while an ingest +node lists Parquet files it couldn't convert. +Fix the cause and restart the node, which retries the files, before you run +the command. + ## Usage diff --git a/content/shared/influxdb3-admin/query-system-data/_index.md b/content/shared/influxdb3-admin/query-system-data/_index.md index d0761100cd..ddc763150c 100644 --- a/content/shared/influxdb3-admin/query-system-data/_index.md +++ b/content/shared/influxdb3-admin/query-system-data/_index.md @@ -335,6 +335,12 @@ The `conversion_*` and `import_*` columns report conversion and import progress. These columns are null on `ingest` rows. +Starting in v3.11.8 and v3.12.2, an `ingest` row reads `failed` when a Parquet +file failed every conversion attempt, and `last_message` names the file and +its error. +Fix the cause, restart the node, then run +[`influxdb3 manage retry-upgrade-to-pacha-tree`](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/). + **Query telemetry** — the query telemetry endpoint provides detailed execution statistics for analyzing query performance: diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index 00faa459d6..87e3f6c6fc 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -6,6 +6,89 @@ > All updates to Core are automatically included in Enterprise. > The Enterprise sections below only list updates exclusive to Enterprise. +## v3.12.2 {date="2026-10-29"} + + + +### Core + +#### Features + +- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now available on 3.12. It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. Stop every node before you run it with `--execute`. +- **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. + +#### Bug fixes + +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. Enterprise already returned `429`. +- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. +- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. +- **Shutdown hung while a processing engine plugin was stuck**: The server now exits within about 2 seconds after shutdown completes, even while a plugin is stuck in a blocking call. Previously, it waited for the plugin's thread forever. Enterprise already exited this way. +- Other bug fixes and performance improvements + +### Enterprise + +All Core updates are included in Enterprise. +Additional Enterprise-specific updates: + +#### Features + +- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. +- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. Previously, each was parsed twice. +- **Table index cache starts once the server is ready (Parquet engine)**: On ingest nodes, the table index cache now starts its background work when the server reports ready, instead of at the beginning of startup. +- **Fewer file downloads per query (upgraded storage engine)**: A query now downloads only the run set files whose key range covers the queried field family. Previously, it also downloaded files that held only the table's other field families. +- **Faster merging of overlapping files (upgraded storage engine)**: When a query merges rows from several files, each output column is now built in one vectorized step instead of row by row. + +#### Bug fixes + +- **Storage engine upgrade completed with unconverted Parquet files**: An ingest node whose Parquet file fails every conversion attempt now reports `failed` in `system.upgrade_parquet_node`, with the file and its error in `last_message`, and the cluster upgrade fails. Fix the cause, restart the node, then run [`influxdb3 manage retry-upgrade-to-pacha-tree`](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/). Previously, the node dropped the file and reported its upgrade as complete. +- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. Previously, a removed ingest node held the cluster at `upgrading` forever. +- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. Previously, a query could return the value from before an overwrite until compaction. +- **Query node could miss writes from a stopping ingest node (upgraded storage engine)**: A query node now keeps following an ingest node that is [`stopping`](/influxdb3/enterprise/admin/node-lifecycle/) and fetches its remaining WAL files after it acknowledges the stop. Previously, the query node could stop fetching before the node flushed its last writes. +- **Trailing WAL fetch could hang after an ingest node stopped (upgraded storage engine)**: A query node's fetch of a stopped ingest node's remaining WAL files now completes. Previously, it could wait forever on files its workers had already fetched. +- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. +- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. +- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. +- **Schema changes lost when upgrading a Core node to Enterprise**: [Upgrading from Core](/influxdb3/enterprise/admin/upgrade-from-core/) now promotes the node's live catalog. Previously, if the Core node had first run a release before 3.10, the upgrade promoted a stale catalog checkpoint, so schema changes made since then were missing. +- Other bug fixes and performance improvements + +## v3.11.8 {date="2026-10-29"} + + + +### Core + +#### Features + +- **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. + +#### Bug fixes + +- **Queries that exceed memory limits returned `500`**: With `pretty` or `parquet` output, the HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. Other output formats still return `200` and end the response early. Enterprise already returned `429`. +- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. +- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. +- Other bug fixes and performance improvements + +### Enterprise + +All Core updates are included in Enterprise. +Additional Enterprise-specific updates: + +#### Features + +- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. +- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. Previously, each was parsed twice. +- **Table index cache starts once the server is ready (Parquet engine)**: On ingest nodes, the table index cache now starts its background work when the server reports ready, instead of at the beginning of startup. + +#### Bug fixes + +- **Storage engine upgrade completed with unconverted Parquet files**: An ingest node whose Parquet file fails every conversion attempt now reports `failed` in `system.upgrade_parquet_node`, with the file and its error in `last_message`, and the cluster upgrade fails. Fix the cause, restart the node, then run [`influxdb3 manage retry-upgrade-to-pacha-tree`](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/). Previously, the node dropped the file and reported its upgrade as complete. +- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. Previously, a removed ingest node held the cluster at `upgrading` forever. +- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. Previously, a query could return the value from before an overwrite until compaction. +- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. +- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. +- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. +- Other bug fixes and performance improvements + ## v3.12.1 {date="2026-10-14"} ### Core diff --git a/data/products.yml b/data/products.yml index 1998f9f885..0b34e7cef7 100644 --- a/data/products.yml +++ b/data/products.yml @@ -13,7 +13,7 @@ influxdb3_core: list_order: 2 search_includes_resources: false latest: core - latest_patch: 3.12.1 + latest_patch: 3.12.2 placeholder_host: localhost:8181 scheme: http limits: @@ -60,7 +60,7 @@ influxdb3_enterprise: list_order: 2 search_includes_resources: false latest: enterprise - latest_patch: 3.12.1 + latest_patch: 3.12.2 placeholder_host: localhost:8181 scheme: http limits: From f7baf3a2383ad1c5c1c9cb3277a19dfe72d33649 Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 08:52:18 -0500 Subject: [PATCH 02/10] fix(influxdb3): align patch notes with selected release commits What changed: Remove the Core shutdown fix from the v3.12.2 notes, qualify the HTTP streaming behavior by release line, add the complete ingest-failure retry procedure, and apply semantic line feeds to the new release notes. Why: The shutdown fix at 1d56d74a85 is beyond the selected 3.12.2 candidate 3aeb9c30. Resetting a failed upgrade does not restart its compactor. The 3.11 and 3.12 HTTP execution-error paths differ. Impact: Readers get release-scoped claims and an actionable recovery sequence. Publication remains blocked on final tags, artifacts, and release approval. Verification: Hugo 0.156.0 full build, code-block lint, Vale at error level, and staged diff whitespace checks passed. Checked five rendered consumers, Enterprise-only upgrade guidance, and nine internal page/anchor targets. All 32 new binary/checksum URLs returned 404; v3.12.1 controls returned 200. No live target-version product tests ran. Git hooks did not run; this commit was created through the GitHub API. --- .../manage/retry-upgrade-to-pacha-tree.md | 25 ++++- .../query-system-data/_index.md | 10 +- .../_index.md | 104 ++++++++++++------ 3 files changed, 98 insertions(+), 41 deletions(-) diff --git a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md index 5b95d2e206..18e73865ef 100644 --- a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md +++ b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md @@ -26,10 +26,10 @@ The command re-checks every previously failed upgrade source against the catalog The reset itself only changes durable state. The migration resumes the next time a compactor node starts with `--upgrade-pacha-tree`. -Starting in v3.11.8 and v3.12.2, the command refuses to run while an ingest -node lists Parquet files it couldn't convert. -Fix the cause and restart the node, which retries the files, before you run -the command. +Starting in v3.11.8 and v3.12.2, the command refuses to run while any ingest node +in the upgrade lists Parquet files it couldn't convert. +Follow the [retry procedure](#retry-after-an-ingest-conversion-failure) to resolve +these failures before you run the command. ## Usage @@ -60,3 +60,20 @@ influxdb3 manage retry-upgrade-to-pacha-tree \ ``` If any sources are left unresolved, run the command again to re-attempt them. + +## Retry after an ingest conversion failure + +Starting in v3.11.8 and v3.12.2, an ingest node reports exhausted conversion +attempts in `system.upgrade_parquet_node`. +The cluster upgrade remains `failed` until you reset it with this command. + +1. [Query `system.upgrade_parquet_node`](/influxdb3/enterprise/admin/query-system-data/#query-storage-engine-tables) + and check `last_message` for the file and error. +2. Fix the cause of the conversion failure. +3. Restart each affected ingest node to retry its files. +4. Run `influxdb3 manage retry-upgrade-to-pacha-tree` as shown in the [example](#example). + If the command reports that an ingest node still lists unconverted files, + resolve that node's failure and retry. +5. Restart a compactor node with + [`--upgrade-pacha-tree`](/influxdb3/enterprise/reference/internals/storage-engine/#upgrade-from-parquet) + to resume the migration. diff --git a/content/shared/influxdb3-admin/query-system-data/_index.md b/content/shared/influxdb3-admin/query-system-data/_index.md index ddc763150c..c6f391f81d 100644 --- a/content/shared/influxdb3-admin/query-system-data/_index.md +++ b/content/shared/influxdb3-admin/query-system-data/_index.md @@ -335,11 +335,11 @@ The `conversion_*` and `import_*` columns report conversion and import progress. These columns are null on `ingest` rows. -Starting in v3.11.8 and v3.12.2, an `ingest` row reads `failed` when a Parquet -file failed every conversion attempt, and `last_message` names the file and -its error. -Fix the cause, restart the node, then run -[`influxdb3 manage retry-upgrade-to-pacha-tree`](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/). +Starting in v3.11.8 and v3.12.2, if a Parquet file fails every conversion attempt, +the `status` column of the node's `ingest` row is `failed`. +The `last_message` column identifies the file and its error. +To resume the upgrade, follow the +[retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). **Query telemetry** — the query telemetry endpoint provides detailed execution statistics for analyzing query performance: diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index 87e3f6c6fc..a40fe0e9e4 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -8,21 +8,29 @@ ## v3.12.2 {date="2026-10-29"} - + ### Core #### Features -- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now available on 3.12. It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. Stop every node before you run it with `--execute`. -- **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. +- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now available on 3.12. + It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. + Stop every node before you run it with `--execute`. +- **Processing engine Python updated to 3.13.18**: The processing engine now uses Python 3.13.18. + This includes the security fixes released since Python 3.13.15. #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. Enterprise already returned `429`. -- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. -- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. -- **Shutdown hung while a processing engine plugin was stuck**: The server now exits within about 2 seconds after shutdown completes, even while a plugin is stuck in a blocking call. Previously, it waited for the plugin's thread forever. Enterprise already exited this way. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. + Previously, they returned `500`. + For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. + An error after the first rows still ends the HTTP `200` response early. + Enterprise already mapped resource-exhaustion errors to `429`. +- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. + Previously, a catalog change that arrived between its two reads could deadlock the catalog. +- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. + Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements ### Enterprise @@ -32,40 +40,61 @@ Additional Enterprise-specific updates: #### Features -- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. -- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. Previously, each was parsed twice. +- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. + Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. +- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. + Previously, each was parsed twice. - **Table index cache starts once the server is ready (Parquet engine)**: On ingest nodes, the table index cache now starts its background work when the server reports ready, instead of at the beginning of startup. -- **Fewer file downloads per query (upgraded storage engine)**: A query now downloads only the run set files whose key range covers the queried field family. Previously, it also downloaded files that held only the table's other field families. +- **Fewer file downloads per query (upgraded storage engine)**: A query now downloads only the run set files whose key range covers the queried field family. + Previously, it also downloaded files that held only the table's other field families. - **Faster merging of overlapping files (upgraded storage engine)**: When a query merges rows from several files, each output column is now built in one vectorized step instead of row by row. #### Bug fixes -- **Storage engine upgrade completed with unconverted Parquet files**: An ingest node whose Parquet file fails every conversion attempt now reports `failed` in `system.upgrade_parquet_node`, with the file and its error in `last_message`, and the cluster upgrade fails. Fix the cause, restart the node, then run [`influxdb3 manage retry-upgrade-to-pacha-tree`](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/). Previously, the node dropped the file and reported its upgrade as complete. -- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. Previously, a removed ingest node held the cluster at `upgrading` forever. -- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. Previously, a query could return the value from before an overwrite until compaction. -- **Query node could miss writes from a stopping ingest node (upgraded storage engine)**: A query node now keeps following an ingest node that is [`stopping`](/influxdb3/enterprise/admin/node-lifecycle/) and fetches its remaining WAL files after it acknowledges the stop. Previously, the query node could stop fetching before the node flushed its last writes. -- **Trailing WAL fetch could hang after an ingest node stopped (upgraded storage engine)**: A query node's fetch of a stopped ingest node's remaining WAL files now completes. Previously, it could wait forever on files its workers had already fetched. -- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. -- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. -- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. -- **Schema changes lost when upgrading a Core node to Enterprise**: [Upgrading from Core](/influxdb3/enterprise/admin/upgrade-from-core/) now promotes the node's live catalog. Previously, if the Core node had first run a release before 3.10, the upgrade promoted a stale catalog checkpoint, so schema changes made since then were missing. +- **Storage engine upgrade completed with unconverted Parquet files**: If a Parquet file fails every conversion attempt, the ingest node now reports `failed` in `system.upgrade_parquet_node`. + The `last_message` column identifies the file and its error. + The cluster upgrade also fails. + To resume the upgrade, follow the [retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). + Previously, the node dropped the file and reported its upgrade as complete. +- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. + Previously, a removed ingest node held the cluster at `upgrading` forever. +- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. + Previously, a query could return the value from before an overwrite until compaction. +- **Query node could miss writes from a stopping ingest node (upgraded storage engine)**: A query node now keeps following an ingest node that is [`stopping`](/influxdb3/enterprise/admin/node-lifecycle/) and fetches its remaining WAL files after it acknowledges the stop. + Previously, the query node could stop fetching before the node flushed its last writes. +- **Trailing WAL fetch could stop responding after an ingest node stopped (upgraded storage engine)**: A query node's fetch of a stopped ingest node's remaining WAL files now completes. + Previously, it could wait forever on files its workers had already fetched. +- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. + Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. +- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. + Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. +- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. + Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. +- **Schema changes lost when upgrading a Core node to Enterprise**: [Upgrading from Core](/influxdb3/enterprise/admin/upgrade-from-core/) now promotes the node's live catalog. + Previously, if the Core node had first run a release before 3.10, the upgrade promoted a stale catalog checkpoint, so schema changes made since then were missing. - Other bug fixes and performance improvements ## v3.11.8 {date="2026-10-29"} - + ### Core #### Features -- **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. +- **Processing engine Python updated to 3.13.18**: The processing engine now uses Python 3.13.18. + This includes the security fixes released since Python 3.13.15. #### Bug fixes -- **Queries that exceed memory limits returned `500`**: With `pretty` or `parquet` output, the HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. Other output formats still return `200` and end the response early. Enterprise already returned `429`. -- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. -- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. + If the error occurs during query execution, `pretty` and `parquet` output return `429`. + For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. + Enterprise already mapped resource-exhaustion errors to `429`. +- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. + Previously, a catalog change that arrived between its two reads could deadlock the catalog. +- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. + Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements ### Enterprise @@ -75,18 +104,29 @@ Additional Enterprise-specific updates: #### Features -- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. -- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. Previously, each was parsed twice. +- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. + Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. +- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. + Previously, each was parsed twice. - **Table index cache starts once the server is ready (Parquet engine)**: On ingest nodes, the table index cache now starts its background work when the server reports ready, instead of at the beginning of startup. #### Bug fixes -- **Storage engine upgrade completed with unconverted Parquet files**: An ingest node whose Parquet file fails every conversion attempt now reports `failed` in `system.upgrade_parquet_node`, with the file and its error in `last_message`, and the cluster upgrade fails. Fix the cause, restart the node, then run [`influxdb3 manage retry-upgrade-to-pacha-tree`](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/). Previously, the node dropped the file and reported its upgrade as complete. -- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. Previously, a removed ingest node held the cluster at `upgrading` forever. -- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. Previously, a query could return the value from before an overwrite until compaction. -- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. -- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. -- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. +- **Storage engine upgrade completed with unconverted Parquet files**: If a Parquet file fails every conversion attempt, the ingest node now reports `failed` in `system.upgrade_parquet_node`. + The `last_message` column identifies the file and its error. + The cluster upgrade also fails. + To resume the upgrade, follow the [retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). + Previously, the node dropped the file and reported its upgrade as complete. +- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. + Previously, a removed ingest node held the cluster at `upgrading` forever. +- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. + Previously, a query could return the value from before an overwrite until compaction. +- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. + Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. +- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. + Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. +- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. + Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. - Other bug fixes and performance improvements ## v3.12.1 {date="2026-10-14"} From 77a4476ab6def892165fcb5724a5c2113b319f2c Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 09:37:11 -0500 Subject: [PATCH 03/10] docs(influxdb3): introduce the upgrade reset procedure --- .../cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md index 18e73865ef..e8efcf9a51 100644 --- a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md +++ b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md @@ -67,6 +67,8 @@ Starting in v3.11.8 and v3.12.2, an ingest node reports exhausted conversion attempts in `system.upgrade_parquet_node`. The cluster upgrade remains `failed` until you reset it with this command. +To reset the failed upgrade and resume the migration: + 1. [Query `system.upgrade_parquet_node`](/influxdb3/enterprise/admin/query-system-data/#query-storage-engine-tables) and check `last_message` for the file and error. 2. Fix the cause of the conversion failure. From 6bf8b98614104681c104e322ba854555c688bfca Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 09:41:56 -0500 Subject: [PATCH 04/10] docs(influxdb3): use a complete procedure introduction --- .../cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md index e8efcf9a51..6ef413c0e7 100644 --- a/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md +++ b/content/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree.md @@ -67,7 +67,7 @@ Starting in v3.11.8 and v3.12.2, an ingest node reports exhausted conversion attempts in `system.upgrade_parquet_node`. The cluster upgrade remains `failed` until you reset it with this command. -To reset the failed upgrade and resume the migration: +To reset the failed upgrade and resume the migration, follow these steps: 1. [Query `system.upgrade_parquet_node`](/influxdb3/enterprise/admin/query-system-data/#query-storage-engine-tables) and check `last_message` for the file and error. From b652b60dd95b4cc4bde017f160d771c92082659d Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 10:18:16 -0500 Subject: [PATCH 05/10] docs(influxdb3): restore release-note formatting for focused review --- .../_index.md | 105 ++++++------------ 1 file changed, 32 insertions(+), 73 deletions(-) diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index a40fe0e9e4..5d62e316f1 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -14,23 +14,14 @@ #### Features -- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now available on 3.12. - It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. - Stop every node before you run it with `--execute`. -- **Processing engine Python updated to 3.13.18**: The processing engine now uses Python 3.13.18. - This includes the security fixes released since Python 3.13.15. - -#### Bug fixes - -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. - Previously, they returned `500`. - For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. - An error after the first rows still ends the HTTP `200` response early. - Enterprise already mapped resource-exhaustion errors to `429`. -- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. - Previously, a catalog change that arrived between its two reads could deadlock the catalog. -- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. - Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. +- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now available on 3.12. It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. Stop every node before you run it with `--execute`. +- **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. + +#### Bug fixes + +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Enterprise already mapped resource-exhaustion errors to `429`. +- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. +- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements ### Enterprise @@ -40,38 +31,23 @@ Additional Enterprise-specific updates: #### Features -- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. - Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. -- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. - Previously, each was parsed twice. +- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. +- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. Previously, each was parsed twice. - **Table index cache starts once the server is ready (Parquet engine)**: On ingest nodes, the table index cache now starts its background work when the server reports ready, instead of at the beginning of startup. -- **Fewer file downloads per query (upgraded storage engine)**: A query now downloads only the run set files whose key range covers the queried field family. - Previously, it also downloaded files that held only the table's other field families. +- **Fewer file downloads per query (upgraded storage engine)**: A query now downloads only the run set files whose key range covers the queried field family. Previously, it also downloaded files that held only the table's other field families. - **Faster merging of overlapping files (upgraded storage engine)**: When a query merges rows from several files, each output column is now built in one vectorized step instead of row by row. #### Bug fixes -- **Storage engine upgrade completed with unconverted Parquet files**: If a Parquet file fails every conversion attempt, the ingest node now reports `failed` in `system.upgrade_parquet_node`. - The `last_message` column identifies the file and its error. - The cluster upgrade also fails. - To resume the upgrade, follow the [retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). - Previously, the node dropped the file and reported its upgrade as complete. -- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. - Previously, a removed ingest node held the cluster at `upgrading` forever. -- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. - Previously, a query could return the value from before an overwrite until compaction. -- **Query node could miss writes from a stopping ingest node (upgraded storage engine)**: A query node now keeps following an ingest node that is [`stopping`](/influxdb3/enterprise/admin/node-lifecycle/) and fetches its remaining WAL files after it acknowledges the stop. - Previously, the query node could stop fetching before the node flushed its last writes. -- **Trailing WAL fetch could stop responding after an ingest node stopped (upgraded storage engine)**: A query node's fetch of a stopped ingest node's remaining WAL files now completes. - Previously, it could wait forever on files its workers had already fetched. -- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. - Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. -- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. - Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. -- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. - Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. -- **Schema changes lost when upgrading a Core node to Enterprise**: [Upgrading from Core](/influxdb3/enterprise/admin/upgrade-from-core/) now promotes the node's live catalog. - Previously, if the Core node had first run a release before 3.10, the upgrade promoted a stale catalog checkpoint, so schema changes made since then were missing. +- **Storage engine upgrade completed with unconverted Parquet files**: If a Parquet file fails every conversion attempt, the ingest node now reports `failed` in `system.upgrade_parquet_node`. The `last_message` column identifies the file and its error. The cluster upgrade also fails. To resume the upgrade, follow the [retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). Previously, the node dropped the file and reported its upgrade as complete. +- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. Previously, a removed ingest node held the cluster at `upgrading` forever. +- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. Previously, a query could return the value from before an overwrite until compaction. +- **Query node could miss writes from a stopping ingest node (upgraded storage engine)**: A query node now keeps following an ingest node that is [`stopping`](/influxdb3/enterprise/admin/node-lifecycle/) and fetches its remaining WAL files after it acknowledges the stop. Previously, the query node could stop fetching before the node flushed its last writes. +- **Trailing WAL fetch could hang after an ingest node stopped (upgraded storage engine)**: A query node's fetch of a stopped ingest node's remaining WAL files now completes. Previously, it could wait forever on files its workers had already fetched. +- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. +- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. +- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. +- **Schema changes lost when upgrading a Core node to Enterprise**: [Upgrading from Core](/influxdb3/enterprise/admin/upgrade-from-core/) now promotes the node's live catalog. Previously, if the Core node had first run a release before 3.10, the upgrade promoted a stale catalog checkpoint, so schema changes made since then were missing. - Other bug fixes and performance improvements ## v3.11.8 {date="2026-10-29"} @@ -82,19 +58,13 @@ Additional Enterprise-specific updates: #### Features -- **Processing engine Python updated to 3.13.18**: The processing engine now uses Python 3.13.18. - This includes the security fixes released since Python 3.13.15. +- **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. - If the error occurs during query execution, `pretty` and `parquet` output return `429`. - For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. - Enterprise already mapped resource-exhaustion errors to `429`. -- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. - Previously, a catalog change that arrived between its two reads could deadlock the catalog. -- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. - Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Enterprise already mapped resource-exhaustion errors to `429`. +- **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. +- **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements ### Enterprise @@ -104,29 +74,18 @@ Additional Enterprise-specific updates: #### Features -- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. - Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. -- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. - Previously, each was parsed twice. +- **Faster [file index](/influxdb3/enterprise/admin/file-index/) loading (Parquet engine)**: Loading a table's file index, including during a storage engine upgrade, now sorts each posting list once. Previously, every generation re-sorted each list it touched, so a table with many generations loaded slowly and used more memory. +- **Faster reads of compaction metadata (Parquet engine)**: Compaction and snapshot metadata files are now parsed in one pass, including during a storage engine upgrade. Previously, each was parsed twice. - **Table index cache starts once the server is ready (Parquet engine)**: On ingest nodes, the table index cache now starts its background work when the server reports ready, instead of at the beginning of startup. #### Bug fixes -- **Storage engine upgrade completed with unconverted Parquet files**: If a Parquet file fails every conversion attempt, the ingest node now reports `failed` in `system.upgrade_parquet_node`. - The `last_message` column identifies the file and its error. - The cluster upgrade also fails. - To resume the upgrade, follow the [retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). - Previously, the node dropped the file and reported its upgrade as complete. -- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. - Previously, a removed ingest node held the cluster at `upgrading` forever. -- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. - Previously, a query could return the value from before an overwrite until compaction. -- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. - Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. -- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. - Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. -- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. - Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. +- **Storage engine upgrade completed with unconverted Parquet files**: If a Parquet file fails every conversion attempt, the ingest node now reports `failed` in `system.upgrade_parquet_node`. The `last_message` column identifies the file and its error. The cluster upgrade also fails. To resume the upgrade, follow the [retry procedure](/influxdb3/enterprise/reference/cli/influxdb3/manage/retry-upgrade-to-pacha-tree/#retry-after-an-ingest-conversion-failure). Previously, the node dropped the file and reported its upgrade as complete. +- **Storage engine upgrade stalled after an ingest node was removed**: The upgrade now drops a removed ingest node from its roster once its Parquet files are converted or absorbed. Previously, a removed ingest node held the cluster at `upgrading` forever. +- **Overwrites lost after a query node restart (upgraded storage engine)**: After a restart, a query node now reads gen0 files in the order they were written, so the latest write to a series and timestamp wins. Previously, a query could return the value from before an overwrite until compaction. +- **Nodes stopped applying compaction updates after falling behind (Parquet engine)**: A node that refreshes its view of compacted data no longer reads the detail of each generation the compaction removed. Previously, a node more than [`--compaction-cleanup-wait`](/influxdb3/enterprise/reference/config-options/#compaction-cleanup-wait) behind the compactor failed every refresh with `generation detail not found` until it restarted. +- **Retention stopped after Gen1 file cleanup deleted a snapshot (Parquet engine)**: The table index cache now skips a snapshot that [Gen1 file cleanup](/influxdb3/enterprise/admin/gen1-file-cleanup/) already deleted. Previously, the missing snapshot failed the cache initialization, and retention didn't run until the next restart. +- **Restarted node listed as stopped by its previous process**: A process that is shutting down no longer marks its node stopped once another process has registered under the same `--node-id`. Previously, a slow shutdown could mark the running replacement as stopped, and on the upgraded storage engine query nodes stopped following its WAL. - Other bug fixes and performance improvements ## v3.12.1 {date="2026-10-14"} From 7b6f31c6864f5df53bd8a31b98de15a7399c35c6 Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 16:38:02 -0500 Subject: [PATCH 06/10] docs(release-notes): qualify Core memory-error status codes What changed: Add the remaining Core HTTP 500 caveat to v3.12.2 and v3.11.8. Update the v3.12.2 source comment to the verified final tag. Why: Table deduplication can wrap memory exhaustion in an External error. Phil reported this remaining case in influxdb_pro#6443. Impact: Preserves the streaming-response distinctions and Enterprise wording. Verification: Resolved v3.12.2 to f1972a0ff7 and compared it with 3aeb9c30e9. Only the pulldown-cmark lockfile update was added. Verified exactly three changed lines and preserved all existing bullet text. --- content/shared/v3-core-enterprise-release-notes/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index 5d62e316f1..fd6e3e9106 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -8,7 +8,7 @@ ## v3.12.2 {date="2026-10-29"} - + ### Core @@ -19,7 +19,7 @@ #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Enterprise already mapped resource-exhaustion errors to `429`. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Some Core queries still return `500`, such as a query on a table that runs out of memory while deduplicating data. Enterprise already mapped resource-exhaustion errors to `429`. - **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. - **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements @@ -62,7 +62,7 @@ Additional Enterprise-specific updates: #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Enterprise already mapped resource-exhaustion errors to `429`. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Some Core queries still return `500`, such as a query on a table that runs out of memory while deduplicating data. Enterprise already mapped resource-exhaustion errors to `429`. - **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. - **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements From 79a4ef0d060ebfc40c53a1de36faa5c2c884feca Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 16:41:34 -0500 Subject: [PATCH 07/10] revert: move release-note addendum back to contributor PR Revert the file changes from 5bad3394bd4191b27aae562285e440c6792f91de. The reconciled corrections are now on Phil's PR #7961 so they can be reviewed and merged as his contribution. Verification: Restores the exact file content from 43f045fe90108b48774b1fd0c53bf13e74242f17. --- content/shared/v3-core-enterprise-release-notes/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index fd6e3e9106..5d62e316f1 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -8,7 +8,7 @@ ## v3.12.2 {date="2026-10-29"} - + ### Core @@ -19,7 +19,7 @@ #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Some Core queries still return `500`, such as a query on a table that runs out of memory while deduplicating data. Enterprise already mapped resource-exhaustion errors to `429`. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Enterprise already mapped resource-exhaustion errors to `429`. - **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. - **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements @@ -62,7 +62,7 @@ Additional Enterprise-specific updates: #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Some Core queries still return `500`, such as a query on a table that runs out of memory while deduplicating data. Enterprise already mapped resource-exhaustion errors to `429`. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Enterprise already mapped resource-exhaustion errors to `429`. - **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. - **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements From 9ed0f02b72e4592cd4e4de6981dc359dc23041a1 Mon Sep 17 00:00:00 2001 From: Phil Bracikowski Date: Thu, 29 Oct 2026 12:52:04 -0700 Subject: [PATCH 08/10] docs(release-notes): drop #6827 from v3.12.2 and note queries that still return 500 v3.12.2 is tagged at 3aeb9c30 plus #6990, so #6827 (1d56d74a85) is not in it. Smoke tests of both Core builds showed a GROUP BY on a table that exhausts memory during deduplication still returns 500. --- content/shared/v3-core-enterprise-release-notes/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index 5d62e316f1..aaf8f907dc 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -19,7 +19,7 @@ #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Enterprise already mapped resource-exhaustion errors to `429`. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now return `429 Too Many Requests` when a query exhausts the DataFusion memory pool. Previously, they returned `500`. For CSV, JSON, and JSON Lines output, this applies when the query fails before it returns any rows. An error after the first rows still ends the HTTP `200` response early. Some Core queries still return `500`, such as a query on a table that runs out of memory while deduplicating data. Enterprise already mapped resource-exhaustion errors to `429`. - **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. - **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements @@ -62,7 +62,7 @@ Additional Enterprise-specific updates: #### Bug fixes -- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Enterprise already mapped resource-exhaustion errors to `429`. +- **Queries that exceed memory limits returned `500`**: The HTTP query endpoints now map DataFusion memory-pool exhaustion to `429 Too Many Requests` instead of `500`. If the error occurs during query execution, `pretty` and `parquet` output return `429`. For CSV, JSON, and JSON Lines output, execution errors still end the HTTP `200` response early, even before the first rows. Some Core queries still return `500`, such as a query on a table that runs out of memory while deduplicating data. Enterprise already mapped resource-exhaustion errors to `429`. - **Catalog deadlock when checking a deleted table**: Checking whether a table is deleted now takes the catalog lock once. Previously, a catalog change that arrived between its two reads could deadlock the catalog. - **WAL plugins received values under the wrong column names**: Rows passed to a WAL trigger's plugin now use the column names of their own record batch. Previously, when a flush held batches with the same columns in a different order, later batches used the first batch's column names. - Other bug fixes and performance improvements From 95ebb59bf81607ac745ea5286a3e6a0d5ba0351e Mon Sep 17 00:00:00 2001 From: Phil Bracikowski Date: Thu, 29 Oct 2026 13:45:23 -0700 Subject: [PATCH 09/10] docs(release-notes): name the v3.12.2 commit in the source comment --- content/shared/v3-core-enterprise-release-notes/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index aaf8f907dc..fd6e3e9106 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -8,7 +8,7 @@ ## v3.12.2 {date="2026-10-29"} - + ### Core From 6ce78fc55cf1df8836d2a12a798be529f25fad8b Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Thu, 29 Oct 2026 17:14:33 -0500 Subject: [PATCH 10/10] Update content/shared/v3-core-enterprise-release-notes/_index.md Co-authored-by: Scott Anderson --- content/shared/v3-core-enterprise-release-notes/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/shared/v3-core-enterprise-release-notes/_index.md b/content/shared/v3-core-enterprise-release-notes/_index.md index fd6e3e9106..a8d02f7fc5 100644 --- a/content/shared/v3-core-enterprise-release-notes/_index.md +++ b/content/shared/v3-core-enterprise-release-notes/_index.md @@ -14,7 +14,7 @@ #### Features -- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now available on 3.12. It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. Stop every node before you run it with `--execute`. +- **`influxdb3 debug catalog repair`**: This offline command, added in v3.11.6, is now also available on 3.12.2. It repairs a catalog that fails to load because of a duplicate table name or a reused table or database ID. Stop every node before you run it with `--execute`. - **Processing engine Python updated to 3.13.18**: Picks up the security fixes released since 3.13.15. #### Bug fixes