v0.9.0-pre.1
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.9.0-pre.1/turso_cli-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.9.0-pre.1/turso_cli-installer.ps1 | iex"
| File | Platform | Checksum |
|---|---|---|
| turso_cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| turso_cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| turso_cli-aarch64-pc-windows-msvc.zip | ARM64 Windows | checksum |
| turso_cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| turso_cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| turso_cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso
You can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
RustFS 1.0.2-preview.1 (preview)
- docs(release): validate candidates on release branch by @overtrue in https://github.com/rustfs/rustfs/pull/8280
- fix(scanner): validate checkpoints against global cycle fence by @abe723 in https://github.com/rustfs/rustfs/pull/8278
- fix(ci): restore E2E membership and pagination timeouts by @overtrue in https://github.com/rustfs/rustfs/pull/8281
- ci: locate the auto-testing checkout for lanes that run evidence from a subdirectory by @majinghe in https://github.com/rustfs/rustfs/pull/8279
- fix(s3): bound multipart copy admission and HTTP write buffers by @overtrue in https://github.com/rustfs/rustfs/pull/8288
- fix(connect): preserve site replication S3 key path by @overtrue in https://github.com/rustfs/rustfs/pull/8300
- fix: resolve Rust 1.99 Clippy warnings by @houseme in https://github.com/rustfs/rustfs/pull/8301
- ci: remove Docker Hub description sync by @overtrue in https://github.com/rustfs/rustfs/pull/8303
- fix(connect): send endpoint origin for relay session authentication by @overtrue in https://github.com/rustfs/rustfs/pull/8310
- fix(sse): guard copy-source SSE-C keys over TLS and reject bucket-keyed KMS context by @reatang in https://github.com/rustfs/rustfs/pull/8296
- feat(table-catalog): expose durable strong diagnostics by @marshawcoco in https://github.com/rustfs/rustfs/pull/8232
- feat(s3select): support quoted record delimiters by @GatewayJ in https://github.com/rustfs/rustfs/pull/8203
- chore(release): merge 1.0.1 back into main and refresh installation references by @overtrue in https://github.com/rustfs/rustfs/pull/8314
- perf(ecstore): reduce multipart and object I/O overhead by @GatewayJ in https://github.com/rustfs/rustfs/pull/8095
- docs(release): maintain milestones after publishing by @overtrue in https://github.com/rustfs/rustfs/pull/8317
- fix(heal): skip removed usage observations during read repair by @hkwi in https://github.com/rustfs/rustfs/pull/8135
- feat(webdav): report quota properties on PROPFIND by @Hatsune-Imagine in https://github.com/rustfs/rustfs/pull/8197
- fix(scanner): preserve checkpoint children in large prefixes by @jkossis in https://github.com/rustfs/rustfs/pull/8292
- fix(s3): correct ListParts pagination termination and markers by @qwerprog in https://github.com/rustfs/rustfs/pull/8295
- feat(iam): expose stored bucket tags to OPA by @rjregenold in https://github.com/rustfs/rustfs/pull/8298
- fix(scanner): drain terminal remote responses to clean EOF by @abe723 in https://github.com/rustfs/rustfs/pull/8306
- fix(http): classify peer closures from error sources by @abe723 in https://github.com/rustfs/rustfs/pull/8307
- test(connect): verify local runtime peer credential boundary by @overtrue in https://github.com/rustfs/rustfs/pull/8304
- fix: resolve pagination fixtures and heal recovery CI failures by @overtrue in https://github.com/rustfs/rustfs/pull/8316
- docs: trim redundant project skills by @overtrue in https://github.com/rustfs/rustfs/pull/8323
- docs(storage): verify object generation authority contract by @overtrue in https://github.com/rustfs/rustfs/pull/8322
- fix(oidc): ignore groups without a matching policy at login by @nilsmelchert in https://github.com/rustfs/rustfs/pull/8164
- refactor(storage): bind rename rollback to its commit context by @overtrue in https://github.com/rustfs/rustfs/pull/8324
- refactor(storage): separate metadata scheduling from quorum decisions by @overtrue in https://github.com/rustfs/rustfs/pull/8327
- test(storage): verify rejected rollback inspection on real disks by @overtrue in https://github.com/rustfs/rustfs/pull/8331
- test(storage): make commit fault checkpoints independent by @overtrue in https://github.com/rustfs/rustfs/pull/8326
- fix(listing): count logical prefixes before pagination by @overtrue in https://github.com/rustfs/rustfs/pull/8328
- fix(scanner): isolate and coalesce dirty usage journals by @houseme in https://github.com/rustfs/rustfs/pull/8325
- fix(storage): retain typed owners across borrowed writes by @overtrue in https://github.com/rustfs/rustfs/pull/8329
- fix(ecstore): hide rollback backup residue in prefix listings by @overtrue in https://github.com/rustfs/rustfs/pull/8335
- fix(protocols): enforce S3 policies for file protocol operations by @GatewayJ in https://github.com/rustfs/rustfs/pull/8262
- test(ecstore): enforce main core regression gates by @overtrue in https://github.com/rustfs/rustfs/pull/8338
- fix(test): restore authenticated cluster fault scenarios by @overtrue in https://github.com/rustfs/rustfs/pull/8340
- ci: coerce the pool timeout input to a number by @majinghe in https://github.com/rustfs/rustfs/pull/8255
- fix(ecstore): own listing workers through cancellation by @houseme in https://github.com/rustfs/rustfs/pull/8342
- test: allow cleanup fixture CI headroom by @cxymds in https://github.com/rustfs/rustfs/pull/8336
- fix(s3): encode multipart listing response keys by @overtrue in https://github.com/rustfs/rustfs/pull/8347
- perf(scanner): reduce scan and checkpoint peak allocations by @houseme in https://github.com/rustfs/rustfs/pull/8346
- fix(auth): return ExpiredToken for retained STS credentials by @houseme in https://github.com/rustfs/rustfs/pull/8344
- docs: refresh security advisory lessons by @overtrue in https://github.com/rustfs/rustfs/pull/8350
- fix(heal): bound durable MRF rescheduling by @houseme in https://github.com/rustfs/rustfs/pull/8351
- build(deps): bump the dependencies group with 4 updates by @dependabot[bot] in https://github.com/rustfs/rustfs/pull/8359
- fix(table-catalog): verify Iceberg metadata path signatures by @GatewayJ in https://github.com/rustfs/rustfs/pull/8291
- fix(heal): increase stack size for absence receipt replay test by @overtrue in https://github.com/rustfs/rustfs/pull/8361
- fix(compose): Refactor volume paths and add service_completed_success… by @svengo in https://github.com/rustfs/rustfs/pull/8355
- fix(heal): retry typed RPC transport failures after peer restart by @overtrue in https://github.com/rustfs/rustfs/pull/8365
- fix(obs): avoid reactor panic in OTLP periodic exports by @houseme in https://github.com/rustfs/rustfs/pull/8368
- test(ecstore): verify multi-generation authority model by @overtrue in https://github.com/rustfs/rustfs/pull/8339
- fix(protocols): share the server context with protocol storage by @overtrue in https://github.com/rustfs/rustfs/pull/8367
- build(deps): bump rustls from 0.23.42 to 0.23.45 in /fuzz in the cargo group across 1 directory by @dependabot[bot] in https://github.com/rustfs/rustfs/pull/8370
- test(ecstore): cover real metadata cache and late identity reads by @overtrue in https://github.com/rustfs/rustfs/pull/8371
- ci: do not run some actions on fork by @yihong0618 in https://github.com/rustfs/rustfs/pull/8318
- fix(ecstore): refresh parsed bucket configs on every load by @overtrue in https://github.com/rustfs/rustfs/pull/8379
- fix(tier): drop reserved internal headers from transition PUT by @shurkus in https://github.com/rustfs/rustfs/pull/8363
- feat(table-catalog): support disabling empty catalogs by @GatewayJ in https://github.com/rustfs/rustfs/pull/8376
- test(e2e): bound mixed-version multipart acknowledgement by @overtrue in https://github.com/rustfs/rustfs/pull/8381
- feat(table-catalog): add durable catalog backups by @marshawcoco in https://github.com/rustfs/rustfs/pull/8266
- fix(ecstore): skip warning for absent .minio.sys volume by @ormandj in https://github.com/rustfs/rustfs/pull/8373
- chore(deps): refresh workspace dependencies and hotpath profiling by @houseme in https://github.com/rustfs/rustfs/pull/8380
- feat(http3): add opt-in QUIC transport by @tommady in https://github.com/rustfs/rustfs/pull/7903
- test(iam): freeze OIDC federation boundaries by @GatewayJ in https://github.com/rustfs/rustfs/pull/8393
- fix(heal): defer replacement retries until dangling grace expires by @cxymds in https://github.com/rustfs/rustfs/pull/8388
- feat(scanner): admit background disk I/O by @houseme in https://github.com/rustfs/rustfs/pull/8389
- ci: add daily main sync for the gateway integration branch by @overtrue in https://github.com/rustfs/rustfs/pull/8401
- fix(table-catalog): preserve credential vending after rename by @marshawcoco in https://github.com/rustfs/rustfs/pull/8400
- fix(obs): export bucket gauges from live snapshots by @houseme in https://github.com/rustfs/rustfs/pull/8399
- feat(targets): support Kafka SASL without TLS by @houseme in https://github.com/rustfs/rustfs/pull/8398
- test: record multipart target response diagnostics by @overtrue in https://github.com/rustfs/rustfs/pull/8382
- fix: stabilize scanner leases and connect diagnostics by @houseme in https://github.com/rustfs/rustfs/pull/8394
- refactor(iam): add verified federated identity model by @GatewayJ in https://github.com/rustfs/rustfs/pull/8413
- fix: resume stalled GET bodies and classify transient storage failures by @houseme in https://github.com/rustfs/rustfs/pull/8414
- fix(table-catalog): drop migrated tables after rename by @marshawcoco in https://github.com/rustfs/rustfs/pull/8417
- fix(table-catalog): reuse held entry locks in warehouse scans by @marshawcoco in https://github.com/rustfs/rustfs/pull/8418
- feat: support object lock remaining retention days by @v-belyakov in https://github.com/rustfs/rustfs/pull/8407
- refactor(iam): separate federated provider views by @GatewayJ in https://github.com/rustfs/rustfs/pull/8415
- feat(quota): add sharded durable reservation protocol by @houseme in https://github.com/rustfs/rustfs/pull/8402
- feat(auth): allow custom secret keys beyond 40 bytes by @cxymds in https://github.com/rustfs/rustfs/pull/8419
- fix(admin): resolve event destination subscription target types by @cxymds in https://github.com/rustfs/rustfs/pull/8386
- fix(ecstore): make deletes cancellation-safe and reclaim their residue by @cppudge in https://github.com/rustfs/rustfs/pull/8378
- fix(ci): preserve heal quorum retries and synchronize background tests by @cxymds in https://github.com/rustfs/rustfs/pull/8422
- test(ecstore): cover late GET object generation changes by @overtrue in https://github.com/rustfs/rustfs/pull/8383
- test(ecstore): cover mixed metadata arrival orders by @overtrue in https://github.com/rustfs/rustfs/pull/8385
- test(connect): reject unknown health flags by @overtrue in https://github.com/rustfs/rustfs/pull/8142
- test(connect): restore subscriber readiness deadlines by @overtrue in https://github.com/rustfs/rustfs/pull/8285
- ci(e2e): require fresh distributed JUnit reports by @overtrue in https://github.com/rustfs/rustfs/pull/8384
- refactor(iam): separate OIDC authentication mapping by @GatewayJ in https://github.com/rustfs/rustfs/pull/8416
- fix(lifecycle): coordinate tier free-version recovery scans by @cxymds in https://github.com/rustfs/rustfs/pull/8387
- fix: reconcile bucket generations and observe lock failures by @houseme in https://github.com/rustfs/rustfs/pull/8421
- fix(listing): continue versioned delimiter listings from raw key by @eye-gu in https://github.com/rustfs/rustfs/pull/8424
- fix(obs): pass RustFS build version to telemetry by @houseme in https://github.com/rustfs/rustfs/pull/8425
- fix(storage): warn on stalled local disk operations by @overtrue in https://github.com/rustfs/rustfs/pull/8395
- fix(rustfs): keep recovery handler within S3 gateway by @houseme in https://github.com/rustfs/rustfs/pull/8429
- fix(zip): statically link liblzma on macOS by @houseme in https://github.com/rustfs/rustfs/pull/8434
- refactor(iam): remove legacy OIDC federation paths by @GatewayJ in https://github.com/rustfs/rustfs/pull/8433
- fix: auto-repair breaking changes from 446479791 by @overtrue in https://github.com/rustfs/rustfs/pull/8451
- refactor(iam): construct OIDC runtime directly by @GatewayJ in https://github.com/rustfs/rustfs/pull/8436
- fix(ecstore): allow cold-start recovery at EC read quorum by @cxymds in https://github.com/rustfs/rustfs/pull/8458
- fix(scanner): avoid placeholder retention and resume checkpoints by @houseme in https://github.com/rustfs/rustfs/pull/8460
- fix(dev): restore VS Code debug configurations by @overtrue in https://github.com/rustfs/rustfs/pull/8450
- fix(storage): preserve heal failures and timeout responses by @houseme in https://github.com/rustfs/rustfs/pull/8462
- ci: reduce repeated PR runner work by @overtrue in https://github.com/rustfs/rustfs/pull/8463
- refactor(iam): organize OIDC runtime modules by @GatewayJ in https://github.com/rustfs/rustfs/pull/8445
- ci: reuse workspace test builds for serial ILM checks by @overtrue in https://github.com/rustfs/rustfs/pull/8465
- fix(log-analyzer): match structured heal writer failures by @houseme in https://github.com/rustfs/rustfs/pull/8469
- test(scanner): bound expansion fixture preparation I/O by @houseme in https://github.com/rustfs/rustfs/pull/8473
- docs: refresh security advisory lessons by @overtrue in https://github.com/rustfs/rustfs/pull/8472
- refactor(oidc): isolate config updates and replication view by @GatewayJ in https://github.com/rustfs/rustfs/pull/8446
- fix(obs): honor RUSTFS_OBS_USE_STDOUT with per-signal endpoints by @Pirat83 in https://github.com/rustfs/rustfs/pull/8476
- fix(scanner): skip child prefixes removed before they are opened by @basic-system in https://github.com/rustfs/rustfs/pull/8479
- feat(tls): reload and publish external certificate generations by @houseme in https://github.com/rustfs/rustfs/pull/8467
- build(deps): bump the dependencies group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/rustfs/rustfs/pull/8481
- fix: auto-repair breaking changes from acd26afd8 by @overtrue in https://github.com/rustfs/rustfs/pull/8483
- fix(s3): normalize PUT read quorum failures as unavailable by @cxymds in https://github.com/rustfs/rustfs/pull/8484
- fix(ecstore): recover interrupted delete transactions by @houseme in https://github.com/rustfs/rustfs/pull/8468
- fix(scanner): account remote progress and preserve dispatch limits by @houseme in https://github.com/rustfs/rustfs/pull/8485
- test(ecstore): deflake bucket sentinel and dispatch rollback tests by @cppudge in https://github.com/rustfs/rustfs/pull/8488
- fix(ecstore): validate recovery evidence before mutation by @houseme in https://github.com/rustfs/rustfs/pull/8487
- ci: guard OIDC architecture boundaries by @GatewayJ in https://github.com/rustfs/rustfs/pull/8447
- fix(s3): short-circuit conditional reads at metadata quorum by @houseme in https://github.com/rustfs/rustfs/pull/8459
- fix(oidc): recover providers after startup discovery failures by @GatewayJ in https://github.com/rustfs/rustfs/pull/8475
- fix: refresh peer metadata without blocking bucket mutations by @cxymds in https://github.com/rustfs/rustfs/pull/8486
- test(ecstore): cover delete cleanup crashes and retries by @overtrue in https://github.com/rustfs/rustfs/pull/8471
- test(storage): make recovery and upgrade checks deterministic by @houseme in https://github.com/rustfs/rustfs/pull/8491
- fix(test): discover data dirs by listing instead of info.data_dir by @overtrue in https://github.com/rustfs/rustfs/pull/8495
- test(e2e): borrow URLs in internode RPC helpers by @houseme in https://github.com/rustfs/rustfs/pull/8497
- fix(admin): add OIDC policy log fields by @GatewayJ in https://github.com/rustfs/rustfs/pull/8496
- fix(scanner): reuse observations and expose complete usage by @houseme in https://github.com/rustfs/rustfs/pull/8498
- test: isolate license and rebalance cancellation fixtures by @houseme in https://github.com/rustfs/rustfs/pull/8500
- test(e2e): bound scanner witnesses by the reported schedule by @houseme in https://github.com/rustfs/rustfs/pull/8501
- fix(scanner): bound superseded waits for regular maintenance by @houseme in https://github.com/rustfs/rustfs/pull/8502
- fix(s3): match AWS duplicate bucket responses by @cxymds in https://github.com/rustfs/rustfs/pull/8503
- fix(ilm): make missing lifecycle expiry targets idempotent by @cxymds in https://github.com/rustfs/rustfs/pull/8504
- perf(ecstore): isolate cleanup and preserve metadata authority by @houseme in https://github.com/rustfs/rustfs/pull/8289
- fix(table-catalog): allow commits after object-backed rename by @marshawcoco in https://github.com/rustfs/rustfs/pull/8508
- fix(obs): isolate bucket usage dashboards by cluster by @houseme in https://github.com/rustfs/rustfs/pull/8510
- fix(audit): preserve request identity and verified client address by @houseme in https://github.com/rustfs/rustfs/pull/8513
- refactor(iam): encapsulate federated authorization models by @GatewayJ in https://github.com/rustfs/rustfs/pull/8514
- fix(heal): reject incomplete administrator bucket discovery by @cxymds in https://github.com/rustfs/rustfs/pull/8512
- fix(ecstore): group rename data commit observations by @houseme in https://github.com/rustfs/rustfs/pull/8516
- fix: suppress clippy too_many_arguments on rename_data_commit_from_observations by @overtrue in https://github.com/rustfs/rustfs/pull/8515
- fix(server): restore socket peer fallback for client rate limits by @houseme in https://github.com/rustfs/rustfs/pull/8519
- fix(heal): merge disjoint replacement generations in cluster status by @majinghe in https://github.com/rustfs/rustfs/pull/8521
- fix(heal): preserve retained replacement histories by @houseme in https://github.com/rustfs/rustfs/pull/8525
- perf(heal): index replacement history reconciliation by @houseme in https://github.com/rustfs/rustfs/pull/8527
- fix(server): cancel request watchdogs with response futures by @houseme in https://github.com/rustfs/rustfs/pull/8528
- fix(ci): repair profiling and compact transition test gates by @houseme in https://github.com/rustfs/rustfs/pull/8526
- fix(build): enforce GNU ABI floor and canonical target metadata by @houseme in https://github.com/rustfs/rustfs/pull/8524
- feat(table-catalog): support durable-strong table maintenance by @marshawcoco in https://github.com/rustfs/rustfs/pull/8523
- fix(replication): skip version-addressed marker pre-check on targets that mint their own version ids by @ajax-bakun-n in https://github.com/rustfs/rustfs/pull/8492
- fix(ci): select Python 3.14 for Connect acceptance by @houseme in https://github.com/rustfs/rustfs/pull/8530
- fix(ci): prepare Docker environment for Connect acceptance by @houseme in https://github.com/rustfs/rustfs/pull/8531
- chore(deps): refresh crates and use Pyroscope 2.1.2 by @houseme in https://github.com/rustfs/rustfs/pull/8540
- fix(heal): unblock automatic replacement recovery by @houseme in https://github.com/rustfs/rustfs/pull/8533
- fix(ci): restore main lint and test reliability by @overtrue in https://github.com/rustfs/rustfs/pull/8543
- feat(table-catalog): add opt-in periodic maintenance queueing by @marshawcoco in https://github.com/rustfs/rustfs/pull/8537
- fix(heal): safely recover missing bucket directories by default by @cxymds in https://github.com/rustfs/rustfs/pull/8517
- fix(s3): advise retry after typed lock timeouts by @houseme in https://github.com/rustfs/rustfs/pull/8546
- chore(release): prepare 1.0.2 by @overtrue in https://github.com/rustfs/rustfs/pull/8549
- test(heal): avoid needless collect in legacy root recovery test (1.0.2 backport) by @overtrue in https://github.com/rustfs/rustfs/pull/8551
- @abe723 made their first contribution in https://github.com/rustfs/rustfs/pull/8278
- @Hatsune-Imagine made their first contribution in https://github.com/rustfs/rustfs/pull/8197
- @nilsmelchert made their first contribution in https://github.com/rustfs/rustfs/pull/8164
- @svengo made their first contribution in https://github.com/rustfs/rustfs/pull/8355
- @shurkus made their first contribution in https://github.com/rustfs/rustfs/pull/8363
- @ormandj made their first contribution in https://github.com/rustfs/rustfs/pull/8373
- @tommady made their first contribution in https://github.com/rustfs/rustfs/pull/7903
- @v-belyakov made their first contribution in https://github.com/rustfs/rustfs/pull/8407
- @cppudge made their first contribution in https://github.com/rustfs/rustfs/pull/8378
- @eye-gu made their first contribution in https://github.com/rustfs/rustfs/pull/8424
- @Pirat83 made their first contribution in https://github.com/rustfs/rustfs/pull/8476
- @basic-system made their first contribution in https://github.com/rustfs/rustfs/pull/8479
Full Changelog: https://github.com/rustfs/rustfs/compare/1.0.1...1.0.2-preview.1
v3.12.1 | 10-14-26
The following are some highlighted updates with the newest release for InfluxDB 3. Learn more via our full Release Notes.
- Faster startup after large file removals: At startup, the files that snapshots and checkpoints mark as removed are now dropped from each table's file list in one pass. Previously, every removed file scanned the table's whole file list, so startup slowed sharply after many files were removed from a large table.
- Catalog failed to load after upgrading to v3.12.0: The server now loads a catalog in which a table has more than one field family with the same automatically generated name. Core releases before v3.10.0 and Enterprise releases before v3.9.0 could write such names when fields were added to an existing table. v3.12.0 rejected them, so a node with an affected catalog failed to start.
- Acknowledged writes lost after a forced snapshot and a restart: WAL flushes now run one at a time. Previously, a forced Parquet snapshot, triggered by write buffer memory or
--force-snapshot-max-age, could run while an earlier WAL file was still being written, and recorded that file as covered before its rows reached the buffer. If the node restarted before the next snapshot, it skipped that file and the acknowledged writes in it were lost. - Overwrites lost across snapshots: When two Parquet files hold the same time window because it was persisted across two snapshots, a point in the later file now wins over a point with the same series and timestamp in the earlier file. Previously, the earlier file could win, so a query returned the value from before the overwrite.
- Failed streaming queries returned
200: A query in CSV, JSON, or JSON Lines format that fails before it returns any rows, such as a sort that exceeds the memory limit, now returns the error status and message. Previously, the server sent200and then dropped the connection, so clients saw an empty body and a transport error. An error after the first rows still ends the response early. - Writes near the maximum timestamp: A line with a timestamp later than
2262-04-11T23:39:59.999999999Zis now rejected with a400error. Previously, a timestamp that close to the maximum could panic the WAL flush when the server forced a snapshot. system.parquet_fileslisted files under the wrong tables: A query onsystem.parquet_fileswithout atable_namefilter now lists only the tables in the current database. Previously, it could list the current database's files under the names of tables in other databases that had the same table ID.- Other bug fixes and performance improvements
All Core updates are included in Enterprise. Additional Enterprise-specific updates:
- Larger bulk import batches (upgraded storage engine): The new
--compactor-import-batch-sizeoption sets the largest batch of staged data that one bulk import merge reads at once. The default is4gband is configurable up to one quarter of--compactor-input-size-budget. - Faster ingest node startup with many snapshots (upgraded storage engine): An ingest node no longer reads every snapshot manifest in object storage at startup. Previously, it read them all, so startup time grew with the number of manifests. The first start on v3.12.1 still reads every manifest once.
system.pt_ingest_filesnow lists the files from the newest manifest plus the snapshots taken since the node started. - Faster compaction I/O (Parquet engine): The compactor now uploads a finished output file while it encodes the next one, and checks up to 8 input files at a time. Previously, it did both one file at a time.
- WAL flush wait metric (Parquet engine): The new
influxdb3_parquet_wal_flush_lock_wait_secondshistogram reports how long a WAL flush waited for an earlier flush to finish. Thekindlabel istimedfor the regular flush interval andforcedfor a flush that forces a snapshot.
- Missing rows after changing a table's file index columns (Parquet engine): The file index now records which columns each compacted generation indexed. A query that filters on a column that only some generations indexed scans the other generations instead of skipping them. Previously, after you added or removed file index columns, such a query could return incomplete results from compacted data.
- Overwrites reverted to the older value (upgraded storage engine): When the ingest buffer merges new writes into data it already merged for the same time window, a later write now wins over an earlier write to the same series and timestamp. Previously, the earlier value could replace the later one.
- Storage engine upgrade failed with more than one compact node: During an upgrade to the upgraded storage engine, only the compact node that holds the compactor lease now drives the upgrade. Previously, every compact node drove it at the same time, their progress updates conflicted, and the upgrade could be marked as failed.
- Compactor replanned forever against a missing data file (upgraded storage engine): A run set whose data file is confirmed gone from object storage is now skipped after three failed compaction attempts, so planning moves on to other work. Previously, the compactor planned the same compaction on every pass, and it failed every time. Skipped run sets are counted in
influxdb3_compactor_skipped_run_setswithreason="auto_data_file_not_found". Compactions of new snapshots and imports aren't covered. - Bulk import could stall object storage requests (upgraded storage engine): The server no longer leaves object storage requests unfinished while it checks the status of uploaded imports. Previously, during a credential refresh, one of those requests could hold the object store client's credential lock and never release it, so every other request on the node waited behind it: the server stayed up but stopped reading from and writing to object storage.
- Nodes without query mode built an unused file index (Parquet engine): Only nodes that run in
querymode, includingall, now load the compacted data file index at startup. Previously, compact and process nodes also loaded it, which used startup time and memory for an index they never read. A node that skips the index logscompacted-data file index not loaded. - Ingest node refused to restart after an unclean stop (Parquet engine): An ingest node that stopped without a clean shutdown now starts again. Previously, if a snapshot covered all of its WAL or a forced snapshot ran during startup, the node could fail every start with an error that it was
still running in another process, though no other process existed. - Other bug fixes and performance improvements
2026-10-14, Version 26.12.0 (Current), @richardlau
- [
1ebd6d3677] - (SEMVER-MINOR) doc,lib,src: throw on missing WebAssembly or RX support (Paolo Insogna) #66533 - [
7f1937d2b9] - (SEMVER-MINOR) http: add websocketMask() and websocketUnmask() (James M Snell) #66335
- [
30e76bb16a] - benchmark: fix input passed to subtle.digest in webcrypto-digest (Rafael Gonzaga) #66608 - [
adef72223a] - benchmark: fix buffer option in buffer read/write benchmarks (Rafael Gonzaga) #66604 - [
2f498f08fe] - benchmark: add util.parseArgs benchmark (Rafael Gonzaga) #66599 - [
4ce8412e18] - benchmark: fix url-searchparams-sort to sort a fresh list (RafaelGSS) #66535 - [
493bd6c66e] - benchmark,tools: fix napi benchmarks on GHA (Nigro Simone) #66423 - [
e4515552d6] - build: run QUIC CI for V8 changes (Yuya Inoue) #66602 - [
a888e51062] - build: support Python 3.15 (Mike McCready) #65750 - [
2afab9a63b] - build: do not include shared gtest innodelink path (Antoine du Hamel) #66626 - [
f88c2f8ec6] - build,test: enable temporal support on no-ICU and system-ICU builds (Antoine du Hamel) #66697 - [
5fd03e6fdf] - child_process: propagate config-file permission flags to children (Rafael Gonzaga) #66559 - [
f771134b07] - crypto: isolate provider EC PKCS8 encoding (Filip Skokan) #66413 - [
4e00a293db] - crypto: remove key export and metadata locks (Filip Skokan) #66413 - [
bcd8018775] - crypto: remove verify setup key locking (Filip Skokan) #66413 - [
883250fee2] - crypto: remove KEM key locking (Filip Skokan) #66413 - [
9d98805071] - crypto: remove RSA-OAEP key locking (Filip Skokan) #66413 - [
d6293e7bb1] - crypto: skip secret key mutex allocation (Filip Skokan) #66413 - [
8d8af8003e] - crypto: keep the root cert store per Environment (Shelley Vohr) #66411 - [
c6f0614785] - crypto: remove select Web Crypto warnings (Filip Skokan) #66312 - [
e5360b5a08] - deps: update googletest to 988ea2c1798de7779f656df2281dd36d6039a17a (Node.js GitHub Bot) #66652 - [
7eb230a2c1] - deps: update acorn to 8.19.0 (Node.js GitHub Bot) #66655 - [
af946ba8f3] - deps: update sqlite to 3.54.0 (Node.js GitHub Bot) #66663 - [
007872a85d] - deps: V8: cherry-pick 8d14d49c4040 (Antoine du Hamel) #66627 - [
f44aec4966] - deps: update simdjson to 5.0.3 (Daniel Lemire) #66620 - [
1a33e914e8] - deps: V8: cherry-pick 7d5eb1df2a72 (inoway46) #66566 - [
3294d51e5a] - diagnostics_channel: fix default callback context (Matteo Collina) #66481 - [
5c602a5824] - doc: list futimes among fd APIs disabled by the permission model (Rafael Gonzaga) #66649 - [
eaeb4736c8] - doc: add Test Runner to list of built-in diagnostic channels (Vas Sudanagunta) #66563 - [
0e1c99afae] - doc: document stream/iter behaviors and Node.js extensions (James M Snell) #66483 - [
846236367d] - doc: document URL and Uint8Array references in process.permission (Rafael Gonzaga) #66557 - [
fc3b067be7] - doc: clarify http Agent keepSocketAlive behavior (Efe Karasakal) #66252 - [
73a4e90ce2] - doc: document keepAliveTimeoutBuffer server option (Efe Karasakal) #66286 - [
bb816582af] - doc: fix request.reusedSocket timeout example (Efe Karasakal) #66286 - [
82223ab4d9] - doc: clarify revert PR label policy (Antoine du Hamel) #66529 - [
c6f59d4e8e] - doc: clarify node binary misuse after compromise (Rafael Gonzaga) #66530 - [
8904178498] - doc: document linux-x64-musl build toolchain (Issac) #66523 - [
1e8247a74e] - doc: run license-builder (github-actions[bot]) #66517 - [
b2773d5e4c] - doc: add missing return types in cluster.md (Daniel Pinto) #66453 - [
1ebd6d3677] - (SEMVER-MINOR) doc,lib,src: throw on missing WebAssembly or RX support (Paolo Insogna) #66533 - [
c1073f31de] - ffi: fix exportArrayBuffer type check (Trivikram Kamat) #66455 - [
69148ee0ff] - fs: lock FileHandle on first read in pull() and pullSync() (James M Snell) #66483 - [
700c60a1cd] - fs: serialize FileHandle writer() async writes (James M Snell) #66483 - [
32833def1c] - http: reduce raw header name allocations (Roberto Bianchi) #66488 - [
7f1937d2b9] - (SEMVER-MINOR) http: add websocketMask() and websocketUnmask() (James M Snell) #66335 - [
115731dda7] - http2: speed up response getHeaders (Roberto Bianchi) #66592 - [
447c36cb45] - lib: fix AbortSignal.any() nested composite leak (Darius) #66617 - [
1722ced4b4] - lib: add --allow-fs-vfs to permission available flags (Rafael Gonzaga) #66554 - [
062ece77fc] - lib: fix benchmark record acknowledgement race (Filip Skokan) #66430 - [
05d0b14438] - lib: set exit code on failed node:bench run() (RafaelGSS) #66534 - [
2cab299471] - lib: default node:bench warmup to 10 invocations (RafaelGSS) #66536 - [
83f507845d] - meta: bump nodejs/node-pr-labeler to dfe5eb3 (Soul Lee) #66606 - [
6fbffd5ee5] - meta: bump codecov/codecov-action from 7.1.0 to 7.1.1 (dependabot[bot]) #66448 - [
bd567f8bd6] - module: fix require of imports with package map (Lazizbek Ergashev) #66565 - [
c442f471a5] - module: synchronously load most ES modules (Geoffrey Booth) #62530 - [
51f66f0134] - permission: keep explicit fs grants when dropping a covering directory (Rafael Gonzaga) #66556 - [
1aa10d80e2] - process: mark process.finalization as release candidate (Matteo Collina) #66436 - [
dd4715a6ba] - querystring: fix value decoding after encoded keys (Ved Chaudhari) #66553 - [
9648a6ba8e] - quic: reject closed stream writer writes with a TypeError (James M Snell) #66483 - [
d6f566baf8] - quic: give each BindingData its own allocator state (Shelley Vohr) #66411 - [
c3204c15bd] - quic: validate session close error codes (Christian Aurich Zanettini Martins) #66302 - [
5b87354f5a] - quic: destroy stream on invalid promise body (Christian Aurich Zanettini Martins) #66260 - [
9ef698c781] - sqlite: validate aggregate() name and options (Guilherme Araújo) #66463 - [
bbf41f8cfb] - sqlite: persist enableDefensive() across reopen (Trivikram Kamat) #66404 - [
54867cd25e] - sqlite: throw on oversized strings instead of aborting (Trivikram Kamat) #66521 - [
4314cde48b] - src: release uv_fs_t in permission WildcardIfDir (Rafael Gonzaga) #66555 - [
0e58916f08] - src: stop including simdjson.h from env.h (Daniel Lemire) #66620 - [
06f56a55bb] - src: use native CopyArrayBufferBytes for webstream buffer copy (René) #66400 - [
2e3dd5bb63] - src: fix config file handling (Marco Ippolito) #66431 - [
cd86506bc2] - src: mark config file as stable (Marco Ippolito) #66431 - [
15ff9884e4] - stream: skip idle webstreams start and watchers (Matteo Collina) #66424 - [
3f75c89fb8] - stream: add pipeToSync() failOnIncompleteClose option (James M Snell) #66483 - [
6cecf140e7] - stream: do not fail the writer when pipeToSync() cannot close (James M Snell) #66483 - [
16833534b6] - stream: fix fromSync() async input error messages (James M Snell) #66483 - [
af41622ad8] - stream: reject closed fromWritable() writes with a TypeError (James M Snell) #66483 - [
4b83c6c38e] - stream: accept explicit stream/iter budgets below 16384 (James M Snell) #66483 - [
f302fbd04a] - stream: reduce per-chunk overhead in stream/iter consumers (James M Snell) #66483 - [
7ba60dcdbe] - stream: keep the original error when writer.fail() throws (James M Snell) #66483 - [
dcac51a7db] - stream: align pull() abort handling with the spec (James M Snell) #66483 - [
995dee6b6b] - stream: honor stream/iter protocols on function objects (James M Snell) #66483 - [
6eaf91353a] - stream: do not hold back nested async data in from() (James M Snell) #66483 - [
69d44aedb4] - stream: bound pre-batched async values in from() (James M Snell) #66483 - [
6b1e7c4cf1] - stream: guard shareSync() against re-entrant source reads (James M Snell) #66483 - [
8a47365425] - stream: split oversized share batches under drop-oldest (James M Snell) #66483 - [
30cbc4e643] - stream: reject drop-newest backpressure in shareSync() (James M Snell) #66483 - [
42ae08594e] - stream: detach shareSync consumers on strict budget errors (James M Snell) #66483 - [
fa49de9ba6] - stream: keep share buffer when all consumers detach (James M Snell) #66483 - [
e6662cb904] - stream: fix Utf8Stream flush handling (James M Snell) #66473 - [
93596b1a9e] - stream: add dump()/dumpSync() for stream/iter (Ethan Arrowood) #65598 - [
4ba6ce1b0c] - stream: port remaining SonicBoom tests for Utf8Stream (Matteo Collina) #66275 - [
cd8b5fa5b0] - test: tolerate async block count updates in test-fs-stat-bigint (Rafael Gonzaga) #66576 - [
30814ce991] - test: replace discard loops with dump() (Ethan Arrowood) #65598 - [
20441b8fc0] - test: run node-bench tools test sequentially (Filip Skokan) #66338 - [
9618da6fe3] - test: remove duplicated cases in permission fs-read fixture (Rafael Gonzaga) #66450 - [
c348a4cb46] - test: run instantiateStreaming-bad-imports WPT (Filip Skokan) #66322 - [
7d4fda6ba7] - test: honor allowed WPT promise rejections (Filip Skokan) #66322 - [
d4c87eb086] - test: scope Blob WPT failures to big-endian (Filip Skokan) #66322 - [
7309ddf204] - test_runner: rerun failing todo tests in suites (Barak) #66605 - [
da908b3072] - test_runner: report load errors with --test-isolation=none (Lazizbek Ergashev) #66550 - [
b18e121625] - test_runner: add mock call assertions to t.assert (Guilherme Araújo) #66476 - [
3d691ab75e] - tools: restore Python 3.14 for daily WPT (Filip Skokan) #66699 - [
714aca1ef6] - tools: switch to PGP and SHA256 in ICU updater (Antoine du Hamel) #66469 - [
fa9fca45e4] - tools: lint thread_local in src (Shelley Vohr) #66411 - [
dbc3e97847] - tools: copy hdr_histogram_internal.h in update-histogram.sh (Filipe Oliveira (Redis)) #66528 - [
4760c27904] - tools: bump the eslint group in /tools/eslint with 5 updates (dependabot[bot]) #66445 - [
63c20ee58e] - vfs: add ComposableProvider for layered mounts (Matteo Collina) #66235 - [
ab057989af] - watch: strip underscore aliases of watch flags (Trivikram Kamat) #66365
v3.11.7 | 10-14-26
The following are some highlighted updates with the newest release for InfluxDB 3. Learn more via our full Release Notes.
- Catalog failed to load after upgrading to v3.11.6: The server now loads a catalog in which a table has more than one field family with the same automatically generated name. Core releases before v3.10.0 and Enterprise releases before v3.9.0 could write such names when fields were added to an existing table. v3.11.6 rejected them, so a node with an affected catalog failed to start.
- Acknowledged writes lost after a forced snapshot and a restart: WAL flushes now run one at a time. Previously, a forced Parquet snapshot, triggered by write buffer memory or
--force-snapshot-max-age, could run while an earlier WAL file was still being written, and recorded that file as covered before its rows reached the buffer. If the node restarted before the next snapshot, it skipped that file and the acknowledged writes in it were lost. - Other bug fixes and performance improvements
All Core updates are included in Enterprise. Additional Enterprise-specific updates:
- WAL flush wait metric (Parquet engine): The new
influxdb3_parquet_wal_flush_lock_wait_secondshistogram reports how long a WAL flush waited for an earlier flush to finish. Thekindlabel istimedfor the regular flush interval andforcedfor a flush that forces a snapshot.
- Two processes with the same
--node-id(upgraded storage engine): When two ingest-capable processes run with the same--node-id, the one that loses a snapshot write now logsanother process is writing under this node idand exits, so only one writer survives. - Ingest node refused to restart after an unclean stop (Parquet engine): An ingest node that stopped without a clean shutdown now starts again. Previously, if a snapshot covered all of its WAL or a forced snapshot ran during startup, the node could fail every start with an error that it was
still running in another process, though no other process existed.