v3.6.5
- Return bad request for invalid URI by @fool1280 in https://github.com/Netflix/zuul/pull/2127
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.4...v3.6.5
9.4.0
QuestDB 9.4.0 introduces a compact, high-performance posting and covering index for SYMBOL columns, a local parquet metadata sidecar that unlocks row-group pruning, parallelised SAMPLE BY FILL with new cross-column FILL(PREV) syntax, three new window functions, and sparkline() / bar() text visualisations. It also delivers meaningful GROUP BY / hash-join speed-ups and fixes a number of correctness issues across the SQL planner, the WAL apply path, and the PGWire protocol.
For any questions or feedback, please join us on Slack or on Discourse.
See also our prettier release notes page.
A new INDEX TYPE POSTING for SYMBOL columns delivers ~13x smaller index files and 1.3-1.5x faster lookups vs. the BITMAP index, at a ~9% write-amplification cost. An optional INCLUDE (...) list builds a covering sidecar so queries that read only the indexed column plus the included columns skip the column files entirely:
CREATE TABLE trades (
ts TIMESTAMP,
sym SYMBOL INDEX TYPE POSTING INCLUDE (price, qty),
price DOUBLE,
qty INT
) TIMESTAMP(ts) PARTITION BY DAY;
ALTER TABLE trades
ALTER COLUMN sym ADD INDEX TYPE POSTING INCLUDE (price, qty);
Supported query shapes that benefit from the covering path include WHERE sym = 'X', WHERE sym IN (...), LATEST ON ts PARTITION BY sym, and SELECT DISTINCT sym. Covering data is ALP-compressed for FLOAT/DOUBLE, FoR bit-packed for integer types, and FSST-compressed for STRING/VARCHAR. Native AVX2 decoding fast paths kick in for common bit-widths.
A few practical notes:
⚠️ Drop the posting index before rolling back to an older QuestDB version. Pre-9.4.0 binaries do not recognise the new index type in column metadata and will refuse to open a table that has a posting index. If you need to downgrade, runALTER TABLE <t> ALTER COLUMN <sym> DROP INDEXon every posting-indexed column first.- High-cardinality SYMBOL columns benefit most — hundreds to thousands of distinct values on wide tables where the win from skipping full column files is largest.
- The designated timestamp is auto-appended to
INCLUDEwhen you supply anINCLUDEclause, soSHOW CREATE TABLErendersINCLUDE (price, qty)back asINCLUDE (price, qty, ts). Controlled bycairo.posting.index.auto.include.timestamp(defaulttrue). - Verify the covering path with
EXPLAIN— the plan showsCoveringIndex on: sym with: ..., withop: latestforLATEST ONqueries andop: distinctforSELECT DISTINCT.SHOW COLUMNSandtable_columns()also expose newindexTypeandindexIncludefields. - Async GROUP BY and filter paths through the covering index are currently slower than the regular plan in some workloads. A follow-up release will close this gap. If
EXPLAINshows a query picking the covering path and you see a regression, opt that query out with/*+ no_covering */(or/*+ no_index */to disable indexing entirely) until the optimisations land.
See the posting index and covering index documentation for the full feature reference, encoding variants (POSTING DELTA / POSTING EF, both for benchmarking), and storage layout details. by @bluestreak01 in #6861
Each parquet partition now ships with a compact binary _pm sidecar that stores column descriptors, per-row-group byte ranges, encodings and min/max statistics. The query planner reads pruning information from _pm without ever opening data.parquet, which is a prerequisite for efficient cold-storage scans. A migration (Mig940) generates _pm files for all existing parquet partitions on engine upgrade. by @RaphDal in #6913
Imagine a stream of FX quotes where you want one-minute bars of average bid and ask. On quiet minutes you want both prices to show the last known ask — not the last bid for bid_price and the last ask for ask_price, which is what FILL(PREV, PREV) would give you. Before 9.4.0 that meant dropping down to a CTE with last_value(...) IGNORE NULLS OVER (...) and a coalesce per column. Now it is a one-liner:
SELECT timestamp, symbol,
avg(bid_price) AS bid_price,
avg(ask_price) AS ask_price
FROM core_price
WHERE symbol = 'EURUSD' AND timestamp IN '$today'
SAMPLE BY 100T FILL(PREV(ask_price), PREV);
FILL(PREV(col_ref)) carries the previous value of another aggregate column by alias. The reference must match the target column's type, cannot be broadcast across aggregates, and is rejected when either side is a SYMBOL. FILL(NULL), FILL(<constant>), and bare FILL(PREV) can be mixed freely in the same per-aggregate fill list.
At the same time, SAMPLE BY FILL(NULL | <constant> | PREV) moves from the sequential cursor path onto QuestDB's parallel GROUP BY path. Read-side wins compound for keyed queries on wide tables and for queries with FROM/TO boundaries — keyed FROM-TO with constant bounds is also now supported natively, removing the previous cookbook workaround.
Other fixes that ride along:
- Sub-day
SAMPLE BYwithTIME ZONEandFROM/TOno longer misaligns the fill grid by the timezone offset. ALIGN TO CALENDAR WITH OFFSETcombined with FILL no longer falls into an infinite fill loop.- SAMPLE BY FILL now works on tables with pre-1970 timestamps.
FILL(LINEAR) and ALIGN TO FIRST OBSERVATION continue to use the cursor path. See the SAMPLE BY FILL options and the Fill from one column cookbook recipe. by @jovfer in #6946
ntile(n)— distributes rows of an ordered partition intonapproximately equal buckets.cume_dist()— cumulative distribution of the current row within its partition.nth_value(expr, n)— the n-th value within the current frame; supportsDOUBLE,LONG, andTIMESTAMParguments. Works withROWSandRANGEframes.
All three honour PARTITION BY and ORDER BY. by @jovfer in #6925 and #7037
Two new functions render numeric data as Unicode glyphs directly in SQL output:
SELECT symbol, sparkline(price) FROM trades SAMPLE BY 1m;
-- ▁▂▄▆█▇▅▃▂▁
SELECT symbol, bar(volume, 0, max(volume) OVER ()) FROM daily_volumes;
-- ▊▋▌▍▎▏
sparkline() is an aggregate that renders a trend line with auto-scaling, clamping and width control. bar() is a scalar that renders a single value as a horizontal bar with eight levels of sub-character precision. Both return VARCHAR and work across all clients. by @javier in #6975
PARQUET_ENCODING(...) now propagates through projected streaming parquet exports — COPY (SELECT ...) TO ... WITH format parquet and /exp?query=... preserve the configured encoding instead of silently reverting to defaults for pass-through columns. by @RaphDal in #6949
- Parallel keyed GROUP BY: batched aggregate dispatch eliminates per-row virtual calls on the reducer, with up to ~4.6x speed-up on single-column
count()over fixed-size keys and 1.4-1.8x on multi-aggregate GROUP BY queries. Also fixes a pre-existing data-correctness bug incount(uuid)for UUIDs whose high half equalsLong.MIN_VALUE. by @puzpuzpuz in #6959 - GROUP BY, hash joins and count_distinct: a faster xxh3-derived hash finalizer and denser hash tables shave ~15-25% off many GROUP BY queries and improve worst-case probe behaviour by orders of magnitude on adversarial inputs. ClickBench total time improves by ~1.2% across 43 queries. by @puzpuzpuz in #6997
- Parallel top-K with SELECT projections:
ORDER BY ... LIMIT Nnow uses the parallel top-K path even when a column projection (duplicate columns, computed columns) sits between the limit and the filtered scan. by @DHRUV6029 in #6993 - Timestamp equality filters: comparing a
TIMESTAMPcolumn against a string bind variable (or any runtime constant) no longer re-parses the value on every row. EXPLAIN plans may show the equality arguments swapped. by @jerrinot in #6986 - Lateral join decorrelation: shared sub-query computations now execute once instead of being cloned per correlated reference, by introducing a shared-cursor framework that GROUP BY factories also use. by @kafka1991 in #6941
-
Create materialized view from the table menu: a new context-menu action on tables and existing materialized views generates a starter
CREATE MATERIALIZED VIEWstatement and drops it into the editor. From a base table the generator infersREFRESH IMMEDIATE,SAMPLE BY,PARTITION BYandTTLper QuestDB's default rules, and pickssum/lastaggregates by column-name pattern. From an existing materialized view it produces a downsample one rung up the SAMPLE BY ladder, re-rootsWITH BASEat the source view, rewrites aggregates against the layer-1 aliases, and stepsTTLup to match. Disabled on non-WAL tables and tables without a designated timestamp. in questdb/ui#557 -
Context-aware SQL autocompletion: function suggestions now filter by grammar context, so the popup stops dumping the full function list at every identifier position. Examples:
SELECT * FROM trades WHERE price = c|previously mixed scalars and aggregates (coalesce,count,count_distinct,corr,covar_*, ...) and now suggests scalars only (coalesce,concat,cos,ceil).SELECT * FROM trades ASOF JOIN m|shrinks from 332 mixed entries to the three actual join targets (materialized_views,memory_metrics,table_writer_metrics).INSERT INTO trades VALUES (n|previously offered nothing; now suggestsnow,now_ns,nullif,nanos,netmask.
Statement-start suggestions also include implicit-
SELECTtargets, and the editor no longer hangs on a trailing comma in the SELECT list. in questdb/ui#556
- Fixed window functions nested inside GROUP BY expressions producing wrong results — e.g.
avg(x) - avg(x) OVER ()combined with GROUP BY. Such shapes are now rejected at compile time with a clear error rather than computing silently incorrect output. by @jovfer in #6943 - Fixed nested window inside aggregate with explicit GROUP BY (
max(avg(x) OVER ())patterns). by @jovfer in #6955 - Fixed
EMA,VWEMAandKSUMfailures when combined with other window functions in the same query. by @jerrinot in #7030 - Fixed WINDOW JOIN crash when the master side projects a symbol column. by @puzpuzpuz in #7098
- Fixed wrong results from the JIT filter when UUID bind variables are involved. by @nwoolmer in #7049
- Fixed
BETWEENevaluation inside sub-expressions (e.g. when it appears as an operand of a larger boolean expression). by @brunocalza in #7044 - Fixed silent drop of outer-join predicates of the form
y.a = y.b(both sides on the slave); fixedNOTrewriting in UNION ALL queries that previously only descended into the left side; isolated parser state to allow concurrentSqlParserinstances. by @bluestreak01 in #7027 - Fixed empty LIMIT inside a DECLARE sub-query. by @jerrinot in #6979
- Fixed crash on SELECT-CHOOSE with an explicit timestamp clause combined with a column rename. by @bluestreak01 in #6987
- Fixed ASOF/LT joins losing the timestamp shift when the slave subquery already shifts its timestamp. by @jerrinot in #6981
- Fixed
arg_max/arg_minreturning the wrong precision when the timestamp argument is aTIMESTAMP_NScolumn. by @bluestreak01 in #7078 - Fixed
SAMPLE BYbucket timestamp after a DST-skipped day. by @bluestreak01 in #6988
- Fixed a rare WAL apply live-lock when transactions are committed at a very high rate. by @ideoma in #7064
- Fixed a race between WAL writer open and the table-drop purge. by @kafka1991 in #7090
- Fixed a server-main error on a WAL table rename race. by @jerrinot in #7046
- Fixed incorrect write amplification and dedup counts reported by
tables(). by @nwoolmer in #7047 - Avoided a redundant bitmap-index rollback after a WAL O3 append. by @jerrinot in #6971
- Fixed memory corruption from malformed PGWire messages. by @bluestreak01 in #6983
- Fixed partial query result when re-binding a suspended portal in PGWire. by @RaphDal in #7066
- Fixed JSON-escaping of
CHARcolumn values in/execand/queryresponses. by @jerrinot in #7106
- feat(core): add compact, high-performance posting index for symbol columns by @bluestreak01 in #6861
- feat(core): add local parquet metadata sidecar file for optimized query planning by @RaphDal in #6913
- feat(sql): add cross-column FILL(PREV) and parallelise SAMPLE BY FILL by @jovfer in #6946
- feat(sql): add ntile, cume_dist, and nth_value window functions by @jovfer in #6925
- feat(sql): add nth_value support for LONG and TIMESTAMP arguments by @jovfer in #7037
- feat(sql): add sparkline() and bar() text visualization functions by @javier in #6975
- feat(sql): add configurable encodings on parquet export by @RaphDal in #6949
- perf(sql): speed up parallel keyed GROUP BY queries by introducing batch calls by @puzpuzpuz in #6959
- perf(sql): speed up GROUP BY, hash joins, and count_distinct with a faster hash finalizer by @puzpuzpuz in #6997
- perf(sql): apply parallel top-K to queries with SELECT projections by @DHRUV6029 in #6993
- perf(sql): cache operands in timestamp equality filters by @jerrinot in #6986
- perf(sql): share repeated computations in lateral join decorrelation by @kafka1991 in #6941
- fix(core): avoid redundant bitmap index rollback after WAL O3 append by @jerrinot in #6971
- fix(sql): report empty LIMIT in DECLARE subquery by @jerrinot in #6979
- fix(sql): preserve shifted timestamps for ASOF/LT joins by @jerrinot in #6981
- fix(sql): fix crash on select-choose with explicit timestamp and column rename by @bluestreak01 in #6987
- fix(sql): fix SAMPLE BY DST bucket timestamp after a skipped day by @bluestreak01 in #6988
- fix(pgwire): fix memory corruption from malformed wire messages by @bluestreak01 in #6983
- fix(sql): fix window functions nested inside GROUP BY expressions producing wrong results by @jovfer in #6943
- fix(sql): fix nested window inside aggregate with explicit GROUP BY by @jovfer in #6955
- fix(core): avoid server-main error on WAL table rename race by @jerrinot in #7046
- fix(sql): between and inside sub-expression by @brunocalza in #7044
- fix(sql): fix wrong results from JIT filter with UUID bind variables by @nwoolmer in #7049
- fix(sql): preserve outer-join predicates, fix NOT in UNION, isolate parser state by @bluestreak01 in #7027
- fix(sql): fix EMA, VWEMA and KSUM failures in combined window queries by @jerrinot in #7030
- fix(wal): correct write amplification and dedup counts in tables() by @nwoolmer in #7047
- fix(pgwire): fix partial query result when re-binding a suspended portal by @RaphDal in #7066
- fix(sql): return correct precision from arg_max/arg_min on TIMESTAMP_NS columns by @bluestreak01 in #7078
- fix(core): fix rare WAL apply live lock when transactions are committed at a very high rate by @ideoma in #7064
- fix(core): fix race between WAL writer open and table drop purge by @kafka1991 in #7090
- fix(sql): WINDOW JOIN crash when master projects a symbol column by @puzpuzpuz in #7098
- fix(http): JSON-escape CHAR column values in /exec and /query responses by @jerrinot in #7106
Full Changelog: 9.3.5...9.4.0
v1.44.0
Meilisearch v1.44.0 adds remote federated facet search, indexing performance improvements, and other improvements and bugfixes. It also contains a couple of breaking changes, detailed below.
- When using the
networkexperimental feature, with sharding enabled (leaderis notnullin the network configuration),POST /indexes/{indexUid}/facet-searchcalls now default to a remote federated facet search, fetching and merging results from all shards in the network. - The timeout for calling an external REST embedder at search time is now tied to the
searchCutOffMsdefined in the index, rather than fixed.- If you observe missing semantic results after upgrading, or HTTP 500 errors for pure semantic search, please increase the value of the search cutoff in the index settings.
- By @dureuill in https://github.com/meilisearch/meilisearch/pull/6377
Meilisearch now has the ability to search across all shards of a network during facet search via the existing dedicated facet search route.
- If you are using the
networkexperimental feature and have aleaderdefined for your network, remote calls are now the default for calls toPOST /indexes/{indexUid}/facet-search - The behavior can be controlled explicitly via the new
useNetworkparameter of the facet search object.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6375
Reduces allocated memory when computing prefixes and speeds up some operations to avoid unnecessary deserialization.
If you still see high memory usage while the engine is post-processing, we recommend using the --experimental-reduce-indexing-memory-usage option.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6334
This PR upgrades the cellulite library to a version that includes a GeoJSON indexing optimization. With this change, GeoJSON indexing avoids reprocessing documents that were already indexed in dense cells, and only handles newly added documents incrementally as they descend through the recursive cell tree.
By @YoEight in https://github.com/meilisearch/meilisearch/pull/6374
Adds two new query parameters to GET /indexes/{indexUid}/stats and GET /stats:
showInternalDatabaseSizes: boolean, optional, defaults tofalse. When present, the index stat objects in responses of the stat routes now contain an additionalinternalDatabaseSizeskey, whose value is a dictionary of the internal database names and their current size in the index, like in the stats object of a batch.sizeFormat:humanorraw: optional, defaults toraw. When present and set tohuman, then all database sizes in responses of the stat routes will be returned as a string containing an appropriate unit (MiB, GiB, etc). When missing or set toraw, then the current behavior of expressing the size in bytes as a number is retained.
Note for integrations: The keys in internalDatabaseSizes are subject to change and should not be exposed as a strongly typed object. This is the same as the existing internalDatabaseSizes in batch stats.
Adding showInternalDatabaseSizes to an index stats
showInternalDatabaseSizes to an index stats
Adding showInternalDatabaseSizes and sizeFormat=human to global stats
showInternalDatabaseSizes and sizeFormat=human to global stats// curl -X GET "http://localhost:7700/stats?showInternalDatabaseSizes=true&sizeFormat=human"
{
"databaseSize": "351.38 MiB",
"usedDatabaseSize": "350.64 MiB",
"lastUpdate": "2026-04-16T13:07:02.74243Z",
"indexes": {
"comics": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": "23.14 MiB",
"avgDocumentSize": "751 B",
"isIndexing": false,
"internalDatabaseSizes": {
"wordPairProximityDocids": "98.06 MiB",
"documents": "23.14 MiB",
"wordPositionDocids": "17.22 MiB",
"wordFidDocids": "10.36 MiB",
"wordPrefixPositionDocids": "9.47 MiB",
"wordDocids": "8.97 MiB",
"wordPrefixFidDocids": "4.36 MiB",
"wordPrefixDocids": "3.27 MiB",
"main": "1.36 MiB",
"externalDocumentsIds": "944 KiB",
"fieldIdWordCountDocids": "240 KiB",
"exactWordPrefixDocids": "16 KiB",
"celluliteMetadata": "16 KiB"
},
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
},
"movies": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": "19.64 MiB",
"avgDocumentSize": "636 B",
"isIndexing": false,
"internalDatabaseSizes": {
"wordPairProximityDocids": "96.16 MiB",
"documents": "19.64 MiB",
"wordPositionDocids": "17.83 MiB",
"wordFidDocids": "10.22 MiB",
"wordPrefixPositionDocids": "9.78 MiB",
"wordDocids": "9.02 MiB",
"wordPrefixFidDocids": "4.39 MiB",
"wordPrefixDocids": "3.27 MiB",
"main": "1.36 MiB",
"externalDocumentsIds": "976 KiB",
"fieldIdWordCountDocids": "240 KiB",
"exactWordPrefixDocids": "16 KiB",
"celluliteMetadata": "16 KiB"
},
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
}
}
}
The call without any parameters is the same as in previous versions.
// curl -X GET "http://localhost:7700/stats"
{
"databaseSize": 368443392,
"usedDatabaseSize": 367673344,
"lastUpdate": "2026-04-16T13:07:02.74243Z",
"indexes": {
"comics": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": 24264704,
"avgDocumentSize": 751,
"isIndexing": false,
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
},
"movies": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": 20594688,
"avgDocumentSize": 636,
"isIndexing": false,
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
}
}
}
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6338
- Settings changes performed via a settings subroute (not the "all settings" route) are now correctly propagated to other remotes on the network. By @dureuill in https://github.com/meilisearch/meilisearch/pull/6380
- The chat route no longer fails in some condition when using Mistral as a provider. By @renezander030 in https://github.com/meilisearch/meilisearch/pull/6327
- Prevent accidentally renaming a remote when modifying the network configuration. By @dureuill in https://github.com/meilisearch/meilisearch/pull/6370
- Replace boolean by PatternMatch for searchable by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6344
- Add query to federated search metadata by @StephaneRob in https://github.com/meilisearch/meilisearch/pull/6371
- Remove issue template for feature issues by @curquiza in https://github.com/meilisearch/meilisearch/pull/6372
- Improve the documentation of the health route by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6376
- @renezander030 made their first contribution in https://github.com/meilisearch/meilisearch/pull/6327
- @quyentonndbs made their first contribution in https://github.com/meilisearch/meilisearch/pull/6382
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.43.1...v1.44.0
4.26
-
Erasure Coding
- rust(seaweed-volume): distributed EC read across peer servers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9516
- fix(ec): mount falls back to sibling-disk .ecx (fixes #9519) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9521
- fix(ec): blanket-clean every destination over the full shard range by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9512
- fix(ec): mirror EC sidecars onto every shard-bearing disk at startup by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9525
-
Mini
- mini: quieter startup with a docker-compose-style progress board by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9524
-
Iceberg Catalog and Maintenance
- fix(iceberg): dial filer gRPC address verbatim in plugin worker by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9527
-
Helm Chart
- helm: decouple JWT signing from cert-manager mTLS (fixes #9506) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9508
- helm(admin): support secretExtraEnvironmentVars (refs #9511) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9513
-
S3 API
- fix: ListBucketsHandler for pathStyleDomains by @kmlebedev in https://github.com/seaweedfs/seaweedfs/pull/9510
- iam: honor configured credential store for IAM API policies and propagate to S3 caches (fixes #9518) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9522
-
Admin Server and Worker
- filer/iam-grpc: make admin Bearer auth opt-in (fixes #9509) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9514
- admin: convert filer address to gRPC form before dispatch by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9523
-
Misc
- fix(tests): make 32-bit GOARCH tests build and run by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9507
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.25...4.26
v7.3.7
Special thanks to the following individuals for their excellent contributions:
- @mmoayyed
- @leleuj
4.25
This is a quick follow up for 4.24. It is safe to upgrade.
- The erasure coding with multi-disk servers needs to recover automatically from previous failures.
- The added security checking caused Admin UI not working well. Users with security.toml configured may get into this.
-
Admin UI
- admin: attach admin-signed Bearer token on filer IAM gRPC calls by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9498
-
Erasure Coding
- fix(ec): clear cross-server stale EC shards before re-distribute (#9478) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9499
-
Docker image
- ci(docker): tag latest in unified release instead of rebuilding by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9500
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.24...4.25
8.8-RC1
This is the first Release Candidate of Redis 8.8 in Redis Open Source.
Release Candidates are feature-complete pre-releases. Pre-releases are not suitable for production use.
Redis 8.8 introduces new features and performance improvements.
- Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat), 26.04 (Resolute Raccoon)
- Rocky Linux 8.10, 9.7, 10.1
- AlmaLinux 8.10, 9.7, 10.1
- Debian 12.13 (Bookworm), Debian 13.4 (Trixie)
- Alpine 3.23
- macOS 14.8.4 (Sonoma), 15.7.4 (Sequoia), 26.3 (Tahoe) - for both Intel and ARM
- (CVE-2026-23479) Use-After-Free in unblock client flow may lead to Remote Code Execution.
- (CVE-2026-25243) Invalid memory access in
RESTOREmay lead to Remote Code Execution - (CVE-2026-23631) Lua Use-After-Free may lead to remote code execution
- (CVE-2026-25588) Invalid memory access in
RESTOREmay lead to Remote Code Execution (Time Series) - (CVE-2026-25589) Invalid memory access in
RESTOREmay lead to Remote Code Execution (Probabilistic)
- #15162 New data structure: Array (@antirez)
- #15045
INCREX: a window counter rate limiter combiningINCR,INCRBY,INCRBYFLOAT, bounds, and expiration (@raffertyyu + Redis team) - In group sorting new reducer, allowing unwind grouped documents (after
GROUPBY) and sort them
- #15191 Remove GCRA rate limiter
SUBSCRIBE,PSUBSCRIBE,SSUBSCRIBE: crash on OOM (RED-167788)CONFIG SET: some settings allow invalid characters (RED-167787)SCRIPT DEBUG: potential crash on scripts (RED-175507)VADD: crash or buffer overflow on largeREDUCEvalue (RED-170921)VSET: crash on huge allocations (MOD-12678)- #15188
cluster-announce-iprejecting hostnames (regression) - #15095 Double free when loading streams with duplicate consumer PEL entries
- #15124 Issues processing corrupt Streams RDB data
- #15111
fast_float_strtodrounding mismatch - #15190
vecClearreset the logical size without releasing element ownership - #15163
MULTIqueue memory incorrect memory accounting - #15094 Cluster crash when
CLIENT KILLunsubscribesSSUBSCRIBEclient insideEXEC - #15151 Listpack backlength encoding thresholds off-by-one
- #15115 Under-copy in the Lua debugger
- #14970 Sentinel config injection via
SENTINEL SET - #14934 Client output buffer memory tracking not accounting for copy-avoided bulk string references
- RediSearch/RediSearch#9182
FT.PROFILE HYBRIDreturns an empty reply (MOD-14778) - RediSearch/RediSearch#9079
FT.SPELLCHECKtreatsPARAMSplaceholders as literal terms instead of resolving them (MOD-10596) - RediSearch/RediSearch#9047
FT.PROFILEoutput is inconsistent when a profiled value is missing (MOD-10560) - RediSearch/RediSearch#9078
FT.CREATEnow rejects schema definitions with invalid option combinations at creation time (MOD-14655) - RediSearch/RediSearch#9012
PERSISTandHPERSISTnotifications are not reflected in index expiration tracking (MOD-14800) - RediSearch/RediSearch#9066 Race condition in
FT.HYBRIDcauses intermittent failures under concurrent hybrid query load (MOD-14732) - RediSearch/RediSearch#9163 Crash on
FT.SEARCHwhen topology validation fails (for example, some nodes unreachable) (MOD-14475) - RediSearch/RediSearch#9031, RediSearch/RediSearch#9473 Coordinator deadlock under mixed
FT.SEARCHandFT.AGGREGATEload (MOD-14268) - RediSearch/RediSearch#9028 Memory leak when
FT.DROPINDEXruns concurrently with in-flight hybrid queries (MOD-14135) - RediSearch/RediSearch#9310, RediSearch/RediSearch#9350
FT.CURSOR READtimeout andON_TIMEOUT FAILnot enforced on coordinator and shard (MOD-14284, MOD-14998) - RediSearch/RediSearch#9425 Cursors not cleaned up after
MAXIDLE, causing resource exhaustion (MOD-6430) - RediSearch/RediSearch#9234, RediSearch/RediSearch#9404 Coordinator
RETURN_STRICTreturns wrong data on partial results, includingSORTBYpipeline (MOD-13617) - RediSearch/RediSearch#9382
MAXPREFIXEXPANSIONwarnings not propagated to clients in cluster mode (MOD-13804) - RediSearch/RediSearch#9218 Search commands fail when no worker thread is available instead of falling back to main thread (MOD-14921)
- RediSearch/RediSearch#9448 RDB load missing validation of
FT.CREATEarguments, allowing corrupt index state on load (MOD-13118) - RediSearch/RediSearch#9377 Use-after-move in
Indexer_Processcauses crash during indexing (MOD-14980) - RediSearch/RediSearch#9408 Deadlock between background query and main-thread writer (MOD-15364)
- RediSearch/RediSearch#9114
FT.PROFILEprints output using wrong iterator type (MOD-14678) - RediSearch/RediSearch#9421 Confusing error returned when
DEBUG_PARAMS_COUNTis zero (MOD-15118) - RediSearch/RediSearch#9045 Stack-smashing error in coordinator code path (MOD-14649)
- RedisJSON/RedisJSON#1554 Trailing chars are ignored (MOD-7266); Fixes RedisJSON/RedisJSON#976
- RedisJSON/RedisJSON#1543 Wrong mutation ordering for array commands with recursive paths (MOD-6722)
- RedisJSON/RedisJSON#1542 JSONPath evaluation issues (MOD-14664); Fixes RedisJSON/RedisJSON#968 (MOD-7264), RedisJSON/RedisJSON#962 (MOD-7272), RedisJSON/RedisJSON#963 (MOD-7270), RedisJSON/RedisJSON#1089 (MOD-7268)
- RedisTimeSeries/RedisTimeSeries#2003 Potential crash on disconnections and TLS failures (MOD-14850)
- RedisTimeSeries/RedisTimeSeries#2013
count,countNaN,countAllreducers return NaN when all values are NaN (MOD-14420)
- #15049 Hyperloglog: 4 independent accumulators that are merged at the end
- #15133 Batched prefetch for
MGETandMSET - #14988 Batched prefetch for
HGETALLon hashtable-encoded hashes - #15071 Pass size hint to jemalloc for faster deallocation
- #15096 Reduces allocator and accounting overhead by adding compile-time jemalloc tuning
- RediSearch/RediSearch#9197 Vector index hot path (HNSW and brute-force) devirtualized, reducing per-query latency (MOD-14916)
- RediSearch/RediSearch#9262, RediSearch/RediSearch#9476 Inline LSE atomics enabled on AArch64, improving atomic operation throughput on ARM64 (MOD-14916, MOD-15419)
- RediSearch/RediSearch#9293 Expiration handling overhead reduced when many keys expire simultaneously (MOD-14916)
- RediSearch/RediSearch#9017 LTO (link-time optimization) enabled for x86_64 release builds (MOD-14700)
- RediSearch/RediSearch#8765 Shard-level timeout adjusted to coordinator dispatch time for more accurate accounting (MOD-13189)
- RediSearch/RediSearch#8790, RediSearch/RediSearch#8900, RediSearch/RediSearch#8827, RediSearch/RediSearch#8971, RediSearch/RediSearch#8966, RediSearch/RediSearch#8762, RediSearch/RediSearch#8678, RediSearch/RediSearch#8915, RediSearch/RediSearch#8653, RediSearch/RediSearch#9085, RediSearch/RediSearch#8751, RediSearch/RediSearch#8692, RediSearch/RediSearch#9224 Iterators ported to Rust, reducing FFI overhead
- RediSearch/RediSearch#9500
numRecordsno longer updated for vector fields, removing unnecessary write overhead on ingest (MOD-15487) - VecSim SVS thread pool integrated with the worker pool for better thread utilization (MOD-9881)
- #15182 Slowlog entry truncation limits:
slowlog-entry-max-argc: maximum number of command arguments kept in a slowlog entryslowlog-entry-max-string-len: maximum length of a command argument in a slowlog entry
- RediSearch/RediSearch#8876, RediSearch/RediSearch#8960 Default maximum worker threads value updated;
MAX_WORKER_THREADSis now a string config (MOD-14486, MOD-14763)
- RediSearch/RediSearch#8210, RediSearch/RediSearch#8231
FT.PROFILE: added queue time tracking (MOD-13602)
- #15150 Memory leak on malformed legacy help entry in redis-cli
3.2.52
This patch release contain an additional fix in query engine "order by" logic with nested properties, and a fix in dates without time.
- Truncate asDate timestamps with 24-hour clock, thanks @officialasishkumar
- Avoid to use index when using order by with nested property issue #10732
- Dependencies updates
orientdb-community-3.2.52.tar.gz orientdb-community-3.2.52.zip
1.0.0-beta.3
- fix(object-lock): materialize default retention metadata by @GatewayJ in https://github.com/rustfs/rustfs/pull/2824
- test(s3): promote passing copy metadata case by @overtrue in https://github.com/rustfs/rustfs/pull/2832
- fix: 2827 lifecycle days next midnight by @cxymds in https://github.com/rustfs/rustfs/pull/2833
- fix(security): document unsafe and TLS overrides by @overtrue in https://github.com/rustfs/rustfs/pull/2835
- feat: add features option to build script by @giter in https://github.com/rustfs/rustfs/pull/2834
- test(build): cover build script feature flags by @overtrue in https://github.com/rustfs/rustfs/pull/2837
- test(helm): cover standalone scale-to-zero rendering by @overtrue in https://github.com/rustfs/rustfs/pull/2831
- test(lifecycle): cover ILM process time aliases by @overtrue in https://github.com/rustfs/rustfs/pull/2839
- test(object-lock): cover default retention delete marker by @GatewayJ in https://github.com/rustfs/rustfs/pull/2836
- fix(replication): handle version ID format mismatch with AWS S3 by @ajax-bakun-n in https://github.com/rustfs/rustfs/pull/2829
- test(replication): cover ETag comparison edge cases by @overtrue in https://github.com/rustfs/rustfs/pull/2840
- fix(build): quote build script features argument by @overtrue in https://github.com/rustfs/rustfs/pull/2841
- fix(admin): normalize empty admin POST content length by @cxymds in https://github.com/rustfs/rustfs/pull/2843
- feat(rustfs): add ftps/webdav defaults to info output by @houseme in https://github.com/rustfs/rustfs/pull/2845
- bump workspace versions and replace cfg-if in crypto by @houseme in https://github.com/rustfs/rustfs/pull/2851
- fix(ecstore): remove startup order sensitivity by @cxymds in https://github.com/rustfs/rustfs/pull/2850
- test(admin): cover POST content length compat layer by @overtrue in https://github.com/rustfs/rustfs/pull/2844
- feat(targets): complete redis mysql postgres target wiring by @houseme in https://github.com/rustfs/rustfs/pull/2842
- fix(ecstore): repair decommission pool quorum by @cxymds in https://github.com/rustfs/rustfs/pull/2847
- docs(io-metrics): fix misleading metrics links by @marshawcoco in https://github.com/rustfs/rustfs/pull/2849
- fix(targets): probe webhook health by host port by @houseme in https://github.com/rustfs/rustfs/pull/2854
- docs(security): refresh advisory lesson states by @overtrue in https://github.com/rustfs/rustfs/pull/2859
- test(targets): cover Redis env config loading by @overtrue in https://github.com/rustfs/rustfs/pull/2857
- test(s3): promote lifecycle expiration header tests by @overtrue in https://github.com/rustfs/rustfs/pull/2858
- docs(security): make advisory skill lesson first by @overtrue in https://github.com/rustfs/rustfs/pull/2860
- feat: enrich admin pools list response by @cxymds in https://github.com/rustfs/rustfs/pull/2853
- fix(ecstore): reset drive health between store init format retries by @weisd in https://github.com/rustfs/rustfs/pull/2848
- test(ecstore): cover store init health reset delegation by @overtrue in https://github.com/rustfs/rustfs/pull/2865
- test(admin): cover pool used-size saturation by @overtrue in https://github.com/rustfs/rustfs/pull/2863
- docs: ban rust-refactor-helper skill by @overtrue in https://github.com/rustfs/rustfs/pull/2869
- test(admin): cover pools list response serialization by @overtrue in https://github.com/rustfs/rustfs/pull/2862
- fix(iam): keep error state on initial load failure by @marshawcoco in https://github.com/rustfs/rustfs/pull/2846
- fix(ecstore): harden runtime read-path quorum handling by @houseme in https://github.com/rustfs/rustfs/pull/2872
- test(ecstore): cover system path failure classifier by @overtrue in https://github.com/rustfs/rustfs/pull/2874
- test(ecstore): cover offline capacity snapshots by @overtrue in https://github.com/rustfs/rustfs/pull/2880
- feat(targets): add AMQP support for notify and audit by @houseme in https://github.com/rustfs/rustfs/pull/2879
- fix(targets): handle postgres dsn redaction scheme case by @overtrue in https://github.com/rustfs/rustfs/pull/2886
- test(ecstore): cover empty runtime listing candidates by @overtrue in https://github.com/rustfs/rustfs/pull/2889
- docs(targets): sync AGENTS.md and test doc comments with code by @JaySon-Huang in https://github.com/rustfs/rustfs/pull/2881
- fix(server): handle public health before s3 host parsing by @marshawcoco in https://github.com/rustfs/rustfs/pull/2866
- fix: empty-body requests without content length by @SamuraJey in https://github.com/rustfs/rustfs/pull/2888
- fix(sse): Temporarily refactored the SSE design for ECStore by @reatang in https://github.com/rustfs/rustfs/pull/2813
- feat: enhance WebDAV support with features and directory operations (#2856) by @houseme in https://github.com/rustfs/rustfs/pull/2892
- feat(sftp): add SFTPv3 protocol support by @simon-escapecode in https://github.com/rustfs/rustfs/pull/2875
- chore(deps): update flake.lock by @houseme in https://github.com/rustfs/rustfs/pull/2894
- test(sftp): cover init negotiation and platform gating by @overtrue in https://github.com/rustfs/rustfs/pull/2896
- test(sftp): cover init session activity stamp by @overtrue in https://github.com/rustfs/rustfs/pull/2898
- keep sftp e2e tests buildable by @houseme in https://github.com/rustfs/rustfs/pull/2897
- feat(targets): add check_mysql_server_available probe function by @JaySon-Huang in https://github.com/rustfs/rustfs/pull/2884
- test(s3): promote passing SSE multipart cases by @overtrue in https://github.com/rustfs/rustfs/pull/2900
- optimize(obs):zero and expire removed replication bandwidth series by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/2901
- fix(targets): handle MySQL DSN scheme case by @overtrue in https://github.com/rustfs/rustfs/pull/2903
- test(obs): cover replication bandwidth tombstones by @overtrue in https://github.com/rustfs/rustfs/pull/2906
- test(targets): cover MySQL probe validation by @overtrue in https://github.com/rustfs/rustfs/pull/2907
- fix(sftp): classify backend errors by type by @marshawcoco in https://github.com/rustfs/rustfs/pull/2909
- fix(protocols): encode storage client request URIs by @marshawcoco in https://github.com/rustfs/rustfs/pull/2911
- test(e2e): gate protocol runner by requested features by @marshawcoco in https://github.com/rustfs/rustfs/pull/2912
- fix(notify): match filters against decoded event keys by @marshawcoco in https://github.com/rustfs/rustfs/pull/2921
- fix(ecstore): fail listing on stalled reader by @marshawcoco in https://github.com/rustfs/rustfs/pull/2920
- fix(storage): sync transition tier config across peers by @cxymds in https://github.com/rustfs/rustfs/pull/2918
- fix(ecstore): preserve list marker set index by @marshawcoco in https://github.com/rustfs/rustfs/pull/2919
- fix(protocols): add hot reload for WebDAV FTPS and SFTP by @houseme in https://github.com/rustfs/rustfs/pull/2922
- test(protocols): cover TLS reload fingerprint ordering by @overtrue in https://github.com/rustfs/rustfs/pull/2927
- iam: handle sts claim policy names by @GatewayJ in https://github.com/rustfs/rustfs/pull/2902
- test(iam): cover mixed STS claim policy names by @overtrue in https://github.com/rustfs/rustfs/pull/2932
- test(protocols): cover SFTP host key reload failure by @overtrue in https://github.com/rustfs/rustfs/pull/2928
- fix(sftp): preserve open attrs metadata by @marshawcoco in https://github.com/rustfs/rustfs/pull/2929
- test(notify): cover encoded key target union by @overtrue in https://github.com/rustfs/rustfs/pull/2934
- fix: make HeadObject consistent after write completion by @houseme in https://github.com/rustfs/rustfs/pull/2936
- fix(tls): ignore Kubernetes secret projection dirs by @marshawcoco in https://github.com/rustfs/rustfs/pull/2938
- fix(server): fail fast when configured TLS parsing fails by @houseme in https://github.com/rustfs/rustfs/pull/2939
- fix(ecstore): surface prefix listing storage errors by @weisd in https://github.com/rustfs/rustfs/pull/2940
- fix(storage): keep storage info RPC map encoded by @weisd in https://github.com/rustfs/rustfs/pull/2942
- fix(sftp): avoid metadata on multipart copy by @overtrue in https://github.com/rustfs/rustfs/pull/2935
- fix(ecstore): fail listing on walk_dir producer errors by @marshawcoco in https://github.com/rustfs/rustfs/pull/2937
- fix: preserve pagination when max keys exceed limit by @weisd in https://github.com/rustfs/rustfs/pull/2943
- fix(ecstore): map missing metadata to not found by @cxymds in https://github.com/rustfs/rustfs/pull/2944
- Fix #2775 recursive list handling in LocalDisk::scan_dir() by @SamuraJey in https://github.com/rustfs/rustfs/pull/2923
- fix(ecstore): propagate walk listing errors by @marshawcoco in https://github.com/rustfs/rustfs/pull/2949
- fix(notify): keep live listen events active when disabled by @marshawcoco in https://github.com/rustfs/rustfs/pull/2952
- test(ecstore): cover walk listing error success paths by @overtrue in https://github.com/rustfs/rustfs/pull/2954
- chore(release): prepare 1.0.0-beta.3 by @houseme in https://github.com/rustfs/rustfs/pull/2957
- refactor(targets): unify queue/connectivity handling and coverage by @houseme in https://github.com/rustfs/rustfs/pull/2953
- fix(ecstore): use hex sha256 for delete objects by @marshawcoco in https://github.com/rustfs/rustfs/pull/2958
- test(notify): cover prefix suffix event dispatch by @marshawcoco in https://github.com/rustfs/rustfs/pull/2960
- @ajax-bakun-n made their first contribution in https://github.com/rustfs/rustfs/pull/2829
- @SamuraJey made their first contribution in https://github.com/rustfs/rustfs/pull/2888
Full Changelog: https://github.com/rustfs/rustfs/compare/1.0.0-beta.2...1.0.0-beta.3
4.24
4.23 is not safe when there are multiple disks configured and erasure coding(EC) is using the worker. The worker added a capability to distribute EC shards to different disks to ensure proper shard distribution. However, the volume server fails to loaded the EC shards, because the EC index could be on a different peer disk.
-
Table Buckets and Iceberg Catalog
- test(s3tables): add Apache Doris Iceberg catalog integration test by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9307
- test(s3tables): Unity Catalog OSS integration tests against SeaweedFS by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9308
-
Volume Server
- quiet noisy 'shard X not found' log when EC shard lives on another server by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9316
- fix(balance): don't move remote-tiered volumes; don't fatal on missing .idx by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9335
- fix(volume): don't panic on read when needle map is nil by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9342
- fix(ec): planner treats each (server, disk_id) as a distinct target (#9369) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9371
- volume: require admin auth on ReadAllNeedles and VolumeNeedleStatus by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9437
- volume: require admin auth on BatchDelete by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9438
- fix(volume): don't nuke local data on transient IO error (#9378) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9382
- fix(volume): sticky EIO quarantine; track streamed reads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9384
- fix(volume): pre-size ParseUpload buffer to request ContentLength by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9421
- perf(volume): stream-count the gzip size when no Content-MD5 is set by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9433
- fix(ec): preserve source disk type across EC encoding (#9423) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9449
- fix(ec): skip re-encode when EC shards already exist for the volume (#9448) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9458
- fix(storage): refuse to load .vif-only entry as regular volume when .ecx exists (#9448) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9461
- volume: gate FetchAndWriteNeedle behind admin auth and refuse internal endpoints by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9441
- fix(storage): prune partial EC shards when sibling disk has healthy .dat (#9478) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9480
- fix(volume): seed indexFileOffset in SortedFileNeedleMap so Delete appends by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9483
- fix(ec): make multi-disk same-server EC reads work + full-lifecycle integration test by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9487
- fix(ec): verify full shard set before deleting source volume (#9490) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9493
-
Misc
- fix(volume): add authentication to destructive gRPC admin endpoints by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8876
- chore(weed/mq/kafka/protocol): remove unused functions and variables by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9488
- chore(weed/util/chunk_cache): remove unused functions by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9372
- fix(pb): skip Unix-socket gRPC registration on Windows (#9430) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9434
- chore(weed/util/log_buffer): remove unused functions by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9444
- shell: expose retention flags on mq.topic.configure by @pmiriyev in https://github.com/seaweedfs/seaweedfs/pull/9416
- cluster: restrict Ping RPC to known peers of the requested type by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9445
-
Mini Mode
- fix(mini): raise admin readiness timeout to 2 minutes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9329
-
S3
- fix(iam): deny IAM users with no policies instead of granting full access by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9317
- fix(s3): add HMAC-SHA256 key commitment to SSE-S3 and SSE-KMS by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8879
- fix(s3): encrypt SSE-S3 KEK at rest with AES-GCM wrapping by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8880
- feat(iam): STS web-identity AWS-fidelity polish (Phase 1) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9318
- feat(iam): OIDC provider store + read-only IAM API (Phase 2a) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9319
- fix(test/s3/policy): allocate fresh admin port per subtest by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9332
- feat(iam): OIDC provider mutations + multi-client + TLS thumbprints (Phase 2b) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9320
- feat(iam): principal session tags from OIDC tokens (Phase 3a) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9321
- feat(iam): claim-based policy mode for AssumeRoleWithWebIdentity (Phase 3b) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9322
- fix(iam): reject empty issuer in ComputeParentUser by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9326
- feat(iam): account-scoped OIDC providers (Phase 3c) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9323
- feat(iam): opt-in session revocation via JTI blocklist (Phase 3d) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9324
- feat(iam): OIDC provider audit trail (Phase 3e) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9325
- fix(iam): four phase-3 follow-ups (provider scoping, public path wrapper, static mirror, claim-mode RoleArn) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9333
- fix(s3api): cap copy-chunk receive buffer to avoid append-grow blowup by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9420
- fix: cap pool retention so chunk-copy buffers don't hoard memory by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9422
- feat(s3api): stream chunk copy via io.Pipe to cut peak working set by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9424
- feat(s3api): full-chunk gzip pass-through skips volume-side decompress by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9427
- feat(s3): stamp noncurrent_since on versioned demotions by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9431
- fix(s3/audit): emit audit log for successful GET/HEAD by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9467
- fix(s3/versioning): repair dangling latest-version pointer after partial delete by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9460
- feat(s3/versioning): grep-able heal logs + scan-anomaly diagnostics + audit cmd by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9468
-
S3 Lifecycle
- A series of PRs to implement metadata event driven lifecycle enforcement
-
Admin Server and Worker
- fix(admin/view): wrap plugin history URL with basePath by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9341
- Fix UI prefix url encoding by @msk-psp in https://github.com/seaweedfs/seaweedfs/pull/9344
-
FUSE mount
- fix(mount): skip pressure-eviction of gappy page chunks (#9330) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9334
- fix(mount): preserve user-set mtime through async/periodic flush (#9363) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9370
- fix(mount): fall through to filer when cached dir misses a tracked inode by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9436
-
Shell
- fix(shell): scope volume.fsck filer walk when -volumeId selects one bucketed collection by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9347
-
Master
- fix(master): route ec shard vids to NewEcVids on initial subscribe by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9435
-
Filer
- filer: scope JWT allowed_prefixes to path components by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9439
- filer: require admin-signed JWT on the IAM gRPC service by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9442
- @msk-psp made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9344
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.23...4.24