1.0.0-alpha.84
- refactor(admin): extract health check handler module by @overtrue in https://github.com/rustfs/rustfs/pull/1777
- tool(agents): AGENTS.md instructs to respond in english, not chinese by @evanofslack in https://github.com/rustfs/rustfs/pull/1775
- refactor(admin): split remaining handlers into modules by @overtrue in https://github.com/rustfs/rustfs/pull/1782
- refactor(admin): modularize handlers and route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1787
- refactor(admin): move route registration into handler modules by @overtrue in https://github.com/rustfs/rustfs/pull/1789
- refactor(admin): move accountinfo route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1790
- fix: restore s3 compatibility regressions and CI coverage by @overtrue in https://github.com/rustfs/rustfs/pull/1793
- refactor(admin): extract user IAM route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1794
- refactor(admin): extract user lifecycle route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1795
- refactor(admin): extract user policy binding route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1796
- refactor(admin): move kms dynamic route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1798
- refactor(admin): move kms key route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1799
- refactor(admin): extract kms management route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1801
- fix: improve IAM and quota authorization by @yxrxy in https://github.com/rustfs/rustfs/pull/1781
- fix(helm): add {{ .Release.Namespace }} for kustomize v5.8 compat, closes #1808 by @shadow1runner in https://github.com/rustfs/rustfs/pull/1809
- refactor(storage): add s3_api facade and extract read helper by @overtrue in https://github.com/rustfs/rustfs/pull/1803
- fix(iam): STS parent groups fallback and session policy debug for #1423 by @GatewayJ in https://github.com/rustfs/rustfs/pull/1804
- refactor(storage): extract list_objects v1 response builder by @overtrue in https://github.com/rustfs/rustfs/pull/1810
- refactor(storage): extract ListObjectsV2 response assembly helper by @overtrue in https://github.com/rustfs/rustfs/pull/1811
- refactor(storage): extract ListParts response assembly helper by @overtrue in https://github.com/rustfs/rustfs/pull/1812
- refactor(storage): extract ListMultipartUploads response builder by @overtrue in https://github.com/rustfs/rustfs/pull/1815
- refactor(storage): extract list_parts parameter parsing by @overtrue in https://github.com/rustfs/rustfs/pull/1816
- refactor(storage): centralize S3 response/error helpers by @overtrue in https://github.com/rustfs/rustfs/pull/1818
- feat(observability): Add additional metric panels to grafana dashboard by @evanofslack in https://github.com/rustfs/rustfs/pull/1778
- build(deps): bump the dependencies group with 16 updates by @houseme in https://github.com/rustfs/rustfs/pull/1820
- ci: optimize and translate nix workflow by @houseme in https://github.com/rustfs/rustfs/pull/1821
- ci(Flake): optimize nix-flake-update workflow by @houseme in https://github.com/rustfs/rustfs/pull/1827
- fix(admin): return 503 when health deps are not ready by @yash27-lab in https://github.com/rustfs/rustfs/pull/1824
- refactor(storage): extract multipart list param parser by @overtrue in https://github.com/rustfs/rustfs/pull/1817
- refactor(storage): extract list object versions helpers by @overtrue in https://github.com/rustfs/rustfs/pull/1830
- refactor(storage): extract ListObjectsV2 parameter parsing by @overtrue in https://github.com/rustfs/rustfs/pull/1831
- refactor(storage): use named params for ListObjectVersions by @overtrue in https://github.com/rustfs/rustfs/pull/1832
- logging(disks): Propogate storage disk init error, improve logging by @evanofslack in https://github.com/rustfs/rustfs/pull/1825
- feat: add existing pvc claim for standalone by @majinghe in https://github.com/rustfs/rustfs/pull/1829
- fix: gateway api listener name hardcode issue by @majinghe in https://github.com/rustfs/rustfs/pull/1834
- feat(config): allow specifying keys via files (key files) by @JasmineLowen in https://github.com/rustfs/rustfs/pull/1814
- chore(deps): update flake.lock by @heihutu in https://github.com/rustfs/rustfs/pull/1835
- chore(deps): bump zip from 7.4.0 to 8.0.0 by @houseme in https://github.com/rustfs/rustfs/pull/1837
- chore(nix): update flake lock & fix devshell+package by @JasmineLowen in https://github.com/rustfs/rustfs/pull/1805
- metrics(scanner): Add metrics to scanner by @evanofslack in https://github.com/rustfs/rustfs/pull/1823
- fix(compress): downgrade non-compressible log level and expand excluded file types by @reatang in https://github.com/rustfs/rustfs/pull/1780
- build(deps): bump the dependencies group with 5 updates by @dependabot[bot] in https://github.com/rustfs/rustfs/pull/1845
- refactor(storage): use named params for multipart list APIs by @overtrue in https://github.com/rustfs/rustfs/pull/1833
- perf(read): Remove unecessary allocation in read_xl_meta_no_data by @evanofslack in https://github.com/rustfs/rustfs/pull/1846
- fix: remove duplicate common prefixes for slash delimiter (#1797) by @loverustfs in https://github.com/rustfs/rustfs/pull/1841
- obs(export): Add env vars to selectivly disable exporting traces/metrics/logs by @evanofslack in https://github.com/rustfs/rustfs/pull/1853
- perf(metrics): Cache metric handles instead of creating each call by @evanofslack in https://github.com/rustfs/rustfs/pull/1852
- perf(obs): optimize metrics recorder and telemetry initialization by @houseme in https://github.com/rustfs/rustfs/pull/1859
- fix(helm): apply traefikAnnotations and gate TLS secret on certManager.enabled by @Rohmilchkaese in https://github.com/rustfs/rustfs/pull/1864
- Increase ACCESS_KEY_MAX_LEN to 128 by @micafer in https://github.com/rustfs/rustfs/pull/1870
- fix:correctly handle replicate delete by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/1850
- refactor(storage): extract ListBuckets response assembly by @overtrue in https://github.com/rustfs/rustfs/pull/1879
- refactor(storage): extract ACL response builders into s3_api by @overtrue in https://github.com/rustfs/rustfs/pull/1880
- Feature/deployment probe override by @capitansec in https://github.com/rustfs/rustfs/pull/1876
- fix: remove deprecated darwin.apple_sdk references from flake.nix by @etak64n in https://github.com/rustfs/rustfs/pull/1884
- fix: uncompress -> compress by @cuiweixie in https://github.com/rustfs/rustfs/pull/1855
- fix(ecstore): invalidate GlobalFileCache after write_all_private to fix DeleteMarker visibility by @loverustfs in https://github.com/rustfs/rustfs/pull/1890
- Fix/x86 64 compat drop target cpu native by @loverustfs in https://github.com/rustfs/rustfs/pull/1895
- fix(replication): replicate delete all versions to targets by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/1898
- fix(startup): Only monitor disk health after format loading by @evanofslack in https://github.com/rustfs/rustfs/pull/1854
- chore(deps): update flake.lock by @github-actions[bot] in https://github.com/rustfs/rustfs/pull/1905
- refactor(storage): extract tagging helpers from ecfs by @overtrue in https://github.com/rustfs/rustfs/pull/1881
- refactor(storage): extract object-lock response builders from ecfs by @overtrue in https://github.com/rustfs/rustfs/pull/1906
- refactor(app): add application layer module entry by @overtrue in https://github.com/rustfs/rustfs/pull/1907
- refactor(app): add AppContext skeleton wiring by @overtrue in https://github.com/rustfs/rustfs/pull/1909
- refactor(app): route put/get/listv2 through usecases by @overtrue in https://github.com/rustfs/rustfs/pull/1910
- refactor(app): migrate copy/delete/head object flows by @overtrue in https://github.com/rustfs/rustfs/pull/1911
- refactor(app): migrate create/delete/head bucket flows by @overtrue in https://github.com/rustfs/rustfs/pull/1913
- refactor(app): migrate bucket sub-operation flows by @overtrue in https://github.com/rustfs/rustfs/pull/1914
- refactor: migrate multipart orchestration to usecase by @overtrue in https://github.com/rustfs/rustfs/pull/1915
- refactor(app): migrate restore/select and admin info orchestration by @overtrue in https://github.com/rustfs/rustfs/pull/1917
- build(deps): bump the dependencies group with 15 updates by @dependabot[bot] in https://github.com/rustfs/rustfs/pull/1912
- refactor(app): migrate bucket config flows to usecase by @overtrue in https://github.com/rustfs/rustfs/pull/1919
- refactor(app): migrate object ACL/tagging flows to usecase by @overtrue in https://github.com/rustfs/rustfs/pull/1921
- refactor(app): migrate object lock and attributes flows to usecase by @overtrue in https://github.com/rustfs/rustfs/pull/1922
- refactor(app): migrate bucket ACL/location/list-buckets orchestration by @overtrue in https://github.com/rustfs/rustfs/pull/1924
- fix: policy-action-1903 by @cxymds in https://github.com/rustfs/rustfs/pull/1927
- test: add regression coverage for access action mapping by @overtrue in https://github.com/rustfs/rustfs/pull/1928
- feat(admin): implement handler for delete group by @black-dragon74 in https://github.com/rustfs/rustfs/pull/1901
- feat(replication):add replication bandwidth throttle monitor and reader by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/1885
- feat(s3select): add JSON handling and flattening for EcObjectStore by @0xdx2 in https://github.com/rustfs/rustfs/pull/1930
- refactor(app): migrate multipart list and copy-part orchestration by @overtrue in https://github.com/rustfs/rustfs/pull/1932
- refactor(app): migrate delete-objects and listing orchestration by @overtrue in https://github.com/rustfs/rustfs/pull/1933
- rustfs#1916 Allow existing secrets to be used for tls certs in ingress by @mkrueger92 in https://github.com/rustfs/rustfs/pull/1918
- fix(ftps): Fix basename extraction and implement recursive delete by @yxrxy in https://github.com/rustfs/rustfs/pull/1920
- [codex] Refactor P1-07: slim KMS handler ownership by @overtrue in https://github.com/rustfs/rustfs/pull/1935
- test(admin): cover kms list-keys route registration by @overtrue in https://github.com/rustfs/rustfs/pull/1936
- refactor(storage): extract remaining s3_api response builders by @overtrue in https://github.com/rustfs/rustfs/pull/1937
- refactor(ecstore): split store_api into focused modules by @overtrue in https://github.com/rustfs/rustfs/pull/1938
- refactor(storage): split tonic_service into rpc modules by @overtrue in https://github.com/rustfs/rustfs/pull/1939
- refactor(ecstore): split store.rs into store submodules by @overtrue in https://github.com/rustfs/rustfs/pull/1942
- refactor(ecstore): split set_disk.rs into submodules by @overtrue in https://github.com/rustfs/rustfs/pull/1945
- refactor(filemeta): split filemeta into focused submodules by @overtrue in https://github.com/rustfs/rustfs/pull/1946
- refactor(app): add iam and notify interface boundaries by @overtrue in https://github.com/rustfs/rustfs/pull/1948
- feat: admin permission check by @GatewayJ in https://github.com/rustfs/rustfs/pull/1783
- fix: restore SSE baseline on latest main by @overtrue in https://github.com/rustfs/rustfs/pull/1951
- refactor(app): route metadata/endpoints access through AppContext by @overtrue in https://github.com/rustfs/rustfs/pull/1949
- fix: add liveness and readiness probe by @majinghe in https://github.com/rustfs/rustfs/pull/1953
- refactor(app): route admin/object globals through AppContext by @overtrue in https://github.com/rustfs/rustfs/pull/1954
- build(deps): bump the dependencies group with 4 updates by @houseme in https://github.com/rustfs/rustfs/pull/1955
- refactor(app): remove multipart metadata global fallback by @overtrue in https://github.com/rustfs/rustfs/pull/1957
- refactor(app): converge lower-priority global reads via AppContext by @overtrue in https://github.com/rustfs/rustfs/pull/1958
- refactor(admin): route tier config manager through AppContext by @overtrue in https://github.com/rustfs/rustfs/pull/1959
- refactor(server): route config access through AppContext by @overtrue in https://github.com/rustfs/rustfs/pull/1960
- refactor(storage): converge put-object quota metadata context by @overtrue in https://github.com/rustfs/rustfs/pull/1963
- refactor(app): route buffer config through AppContext by @overtrue in https://github.com/rustfs/rustfs/pull/1964
- refactor(admin): route kms handlers via app context by @overtrue in https://github.com/rustfs/rustfs/pull/1965
- fix(typo): change dang_ling to dangling by @evanofslack in https://github.com/rustfs/rustfs/pull/1968
- refactor(admin): route kms handlers through app context by @overtrue in https://github.com/rustfs/rustfs/pull/1967
- feat(iam): add OpenID Connect SSO with claim-based policy resolution by @jpoegs in https://github.com/rustfs/rustfs/pull/1875
- fix(iam): address PR 1875 review issues for OIDC STS flows by @overtrue in https://github.com/rustfs/rustfs/pull/1969
- refactor(app): decouple AppContext adapters from GLOBAL statics by @overtrue in https://github.com/rustfs/rustfs/pull/1970
- refactor(admin): move KMS management handlers by @overtrue in https://github.com/rustfs/rustfs/pull/1971
- refactor(rpc): use node name accessor in health handlers by @overtrue in https://github.com/rustfs/rustfs/pull/1972
- refactor(app): centralize context resolvers for admin/server paths by @overtrue in https://github.com/rustfs/rustfs/pull/1975
- refactor(ci): add layered dependency guard baseline by @overtrue in https://github.com/rustfs/rustfs/pull/1977
- refactor(app): remove remaining global access in main init by @overtrue in https://github.com/rustfs/rustfs/pull/1978
- refactor(app): complete phase 5 gate and equivalence guards by @overtrue in https://github.com/rustfs/rustfs/pull/1979
- build: update docker config and refine s3s region handling by @heihutu in https://github.com/rustfs/rustfs/pull/1976
- refactor region parsing by @heihutu in https://github.com/rustfs/rustfs/pull/1981
- fix(replication): handle TLS CA trust and force-delete replication edge cases by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/1983
- refactor(app): remove dead objects/ code and migrate put_object_extract to usecase layer by @overtrue in https://github.com/rustfs/rustfs/pull/1980
- fix(ecstore): adjust unformatted disk error mapping by @weisd in https://github.com/rustfs/rustfs/pull/1988
- chore(heal): remove unused global response broadcast by @weisd in https://github.com/rustfs/rustfs/pull/1991
- feat(config): refine defaults and improve region handling by @houseme in https://github.com/rustfs/rustfs/pull/1990
- refactor: stabilize heal format recovery integration tests by @overtrue in https://github.com/rustfs/rustfs/pull/1984
- fix(dashboard): Rename grafana dashboard rustfs.yaml -> rustfs.json by @evanofslack in https://github.com/rustfs/rustfs/pull/1987
- feat(targets): enhance webhook TLS support with custom CA and skip-verify by @houseme in https://github.com/rustfs/rustfs/pull/1994
- Openstack Keystone integration - v1 keeps the same mechanism as by @senolcolak in https://github.com/rustfs/rustfs/pull/1961
- feat: policy add object tag by @GatewayJ in https://github.com/rustfs/rustfs/pull/1908
- fix(scanner): skip recent IO-error objects by @LoganZ2 in https://github.com/rustfs/rustfs/pull/1860
- perf(lock): Use global lock manager, instead of one per request by @evanofslack in https://github.com/rustfs/rustfs/pull/1848
- fix(ecstore): allow trailing slash in object names to match S3 behavior by @brayanjuls in https://github.com/rustfs/rustfs/pull/1996
- refactor: improve code quality with safer error handling, trait decomposition, and dead code cleanup by @overtrue in https://github.com/rustfs/rustfs/pull/1997
- fix(s3): return proper HTTP 400 for SSE-C validation errors by @overtrue in https://github.com/rustfs/rustfs/pull/1998
- build(deps): bump the dependencies group with 4 updates by @houseme in https://github.com/rustfs/rustfs/pull/2001
- fix(s3): normalize GetObjectAttributes ETag XML response by @overtrue in https://github.com/rustfs/rustfs/pull/2002
- fix(ecstore): set expiration header for put object via lifecycle prediction by @overtrue in https://github.com/rustfs/rustfs/pull/2003
- Update logo image link in README.md by @overtrue in https://github.com/rustfs/rustfs/pull/2004
- Fix: validate SSE headers in object read/write paths by @overtrue in https://github.com/rustfs/rustfs/pull/2005
- fix: avoid region fallback panic paths by @overtrue in https://github.com/rustfs/rustfs/pull/2006
- fix(s3): reject SSE-C with partial headers per S3 spec by @overtrue in https://github.com/rustfs/rustfs/pull/2007
- fix(s3): reject invalid SSE algorithm (aes:kms) in PutObject by @overtrue in https://github.com/rustfs/rustfs/pull/2008
- fix: implement handling for "aws-chunked" Content-Encoding by @reatang in https://github.com/rustfs/rustfs/pull/2009
- chore(s3-tests): promote 42 passing tests to implemented list by @overtrue in https://github.com/rustfs/rustfs/pull/2011
- fix(s3): improve S3 API compatibility for versioning, SSE, and policy by @overtrue in https://github.com/rustfs/rustfs/pull/2013
- fix(obs): Update observability docker compose stack by @evanofslack in https://github.com/rustfs/rustfs/pull/2010
- fix: policy StringNotEquals double negation and delete_objects version mapping by @overtrue in https://github.com/rustfs/rustfs/pull/2015
- feat(obs): add advanced log management configuration by @heihutu in https://github.com/rustfs/rustfs/pull/2016
- feat(policy): add Service principal, ArnLike/IfExists conditions, and logging error ordering by @overtrue in https://github.com/rustfs/rustfs/pull/2018
- build(deps): bump the dependencies group with 2 updates by @heihutu in https://github.com/rustfs/rustfs/pull/2017
- fix(policy): address review feedback from #2018 by @overtrue in https://github.com/rustfs/rustfs/pull/2021
- chore(deps): update flake.lock by @github-actions[bot] in https://github.com/rustfs/rustfs/pull/2020
- test(s3): promote 145 passing tests to implemented list by @overtrue in https://github.com/rustfs/rustfs/pull/2023
- Bump Helm Chart version to 0.0.83 and appVersion to 1.0.0-alpha.83 by @smiggiddy in https://github.com/rustfs/rustfs/pull/2019
- fix(s3): allow Object Lock on versioned buckets and reject invalid checksums by @overtrue in https://github.com/rustfs/rustfs/pull/2024
- fix(s3): implement S3-compliant CORS and bucket existence checks by @overtrue in https://github.com/rustfs/rustfs/pull/2026
- fix(s3): return InvalidRange when CopySourceRange exceeds source object size by @overtrue in https://github.com/rustfs/rustfs/pull/2029
- fix(s3): add x-amz-grant-* headers to policy condition values by @overtrue in https://github.com/rustfs/rustfs/pull/2031
- Optimize log cleanup and rotation, update dependencies by @houseme in https://github.com/rustfs/rustfs/pull/2032
- feat(s3): enforce RestrictPublicBuckets for anonymous access by @overtrue in https://github.com/rustfs/rustfs/pull/2033
- @shadow1runner made their first contribution in https://github.com/rustfs/rustfs/pull/1809
- @yash27-lab made their first contribution in https://github.com/rustfs/rustfs/pull/1824
- @JasmineLowen made their first contribution in https://github.com/rustfs/rustfs/pull/1814
- @Rohmilchkaese made their first contribution in https://github.com/rustfs/rustfs/pull/1864
- @micafer made their first contribution in https://github.com/rustfs/rustfs/pull/1870
- @capitansec made their first contribution in https://github.com/rustfs/rustfs/pull/1876
- @etak64n made their first contribution in https://github.com/rustfs/rustfs/pull/1884
- @cuiweixie made their first contribution in https://github.com/rustfs/rustfs/pull/1855
- @github-actions[bot] made their first contribution in https://github.com/rustfs/rustfs/pull/1905
- @cxymds made their first contribution in https://github.com/rustfs/rustfs/pull/1927
- @black-dragon74 made their first contribution in https://github.com/rustfs/rustfs/pull/1901
- @jpoegs made their first contribution in https://github.com/rustfs/rustfs/pull/1875
- @senolcolak made their first contribution in https://github.com/rustfs/rustfs/pull/1961
- @brayanjuls made their first contribution in https://github.com/rustfs/rustfs/pull/1996
- @smiggiddy made their first contribution in https://github.com/rustfs/rustfs/pull/2019
Full Changelog: https://github.com/rustfs/rustfs/compare/1.0.0-alpha.83...1.0.0-alpha.84
v1.37.0
[!IMPORTANT]
This release contains breaking changes for users of thenetworkexperimental feature.
Meilisearch v1.37 introduces replicated sharding, removes the vectorStoreSetting experimental feature, stabilizes our new vector store for best performance, adds a security fix and miscellaneous improvements.
§ Replicated sharding
[!NOTE] Replicated sharding requires Meilisearch Enterprise Edition (EE).
- Users of Meilisearch Cloud, please contact support if you need replicated sharding.
- Users of the Community Edition, please contact the sales if you want to use replicated sharding in production.
§ Breaking changes
networkobjects sent to thePATCH /networkroute must now contain at least oneshardobject containing at least one remote whenleaderis notnull.
Existing databases will be migrated automatically when upgraded with --experimental-dumpless-upgrade when leader is not null, such that for each remote:
- A shard with the same name as the remote is created
- This shard has exactly one remote in its
remoteslist: the remote with the same name as the shard.
This change will not cause any document to be resharded.
To be able to upgrade without resharding, the migration uses the same name for remotes and for shards. However, in new configurations, we recommend using different names for shards and remotes.
Example of migration
For instance, the following network object:
is converted to:
{
"leader": "ms-00",
"self": "ms-01",
"remotes": {
"ms-00": { /* .. */ },
"ms-01": { /* .. */ }
},
"shards": { // ✨ NEW
"ms-00": { // shard named like the remote
"remotes": ["ms-00"] // is owned by the remote
},
"ms-01": {
"remotes": ["ms-01"]
}
}
}
The network object for routes PATCH /network and GET /network now contains the new field shards, which is an object whose values are shard objects, and keys the name of each shard.
Each shard object contains a single field remotes, which is an array of strings, each string representing the name of an existing remote.
The shard objects in PATCH /network contain the additional fields addRemotes and removeRemotes meant for convenience:
- pass an array of remote names to
shard.addRemotesto add these remotes to the list of remotes of a shard. - pass an array of remote names to
shard.removeRemotesto remove these remotes from the list of remotes of a shard. - if present and non-
null,shard.remoteswill completely override the existing list of remotes for a shard. - if several of these options are present and non-
null, then the order of application isshard.remotes, thenshard.addRemotes, thenshard.removeShards.
Adding a new shard with some remotes
// PATCH /network
{
// assuming that remotes `ms-0`, `ms-1`, `ms-2` where sent in a previous call to PATCH /network
"shards": {
"s-a": { // new shard
"remotes": ["ms-0", "ms-1"]
}
}
}
Remotes ms-0 and ms-1 own the new shard s-a.
Fully overriding the list of remotes owning a shard
// PATCH /network
{
// assuming remotes `ms-0`, `ms-1`, `ms-2`
// assuming shard `s-a`, owned by `ms-0` and `ms-1`
"shards": {
"s-a": {
"remotes": ["ms-2"]
}
}
}
ms-2 is now the sole owner of s-a, replacing ms-0 and ms-1.
Adding a remote without overriding the list of remotes owning a shard
// PATCH /network
{
// assuming remotes `ms-0`, `ms-1`, `ms-2`
// assuming shard `s-a`, owned by `ms-2`
"shards": {
"s-a": {
"addRemotes": ["ms-0"]
}
}
}
ms-0 and ms-2 are now the owners of s-a.
Removing a remote without overriding the list of remotes owning a shard
// PATCH /network
{
// assuming remotes `ms-0`, `ms-1`, `ms-2`
// assuming shard `s-a`, owned by `ms-0` and `ms-2`
"shards": {
"s-a": {
"removeRemotes": ["ms-2"]
}
}
}
ms-0 is now the sole owner of s-a.
Entirely removing a shard from the list of shards
Set the shard to null:
// PATCH /network
{
"shards": {
"s-a": null
}
}
Or set its remotes list to the empty list:
// PATCH /network
{
"shards": {
"s-a": {
"remotes": []
}
}
}
When network.leader is not null, each shard object in network.shards must:
- Only contain
remotesthat exist in the list ofremotes. - Contain at least one remote.
Additionally, network.shards must contain at least one shard.
Failure to meet any of these conditions will cause the PATCH /network route to respond with 400 invalid_network_shards.
Documents are now sharded according to the list of shards declared in the network rather than the list of remotes. All remotes owning a shard will process the documents that belong to this shard, allowing for replication.
Example of replication
The following configuration defines 3 remotes 0, 1 and 2, and 3 shards A, B, C, such that each remote owns two shards, achieving replication (losing one remote does not lose any document).
{
"leader": "0",
"self": "0",
"remotes": {
"0": { /* .. */ },
"1": { /* .. */ },
"2": { /* .. */ }
},
"shards": {
"A": {
"remotes": ["0", "1"]
},
"B": {
"remotes": ["1", "2"]
},
"C": {
"remotes": ["2", "0"]
}
}
}
- Full replication is supported by having all remotes own all the shards.
- Unbalanced replication is supported by having some remotes own more shards than other remotes.
- "Watcher" remotes are supported by having remotes that own no shards. Watcher remotes are not very useful in this release, and might be upgraded in a future release, so that they keep all documents without indexing them, allowing to "respawn" shards for other remotes.
When useNetwork: true is passed to a search query, it is expanded to multiple queries such that each shard declared in network.shards appears exactly once, associated with a remote that owns that shard.
This ensures that there is no missing or duplicate documents in the results.
When the network experimental feature is enabled, then it becomes possible to filter documents depending on the shard they belong to.
Given s-a and s-b the names of two shards declared in network.shards, then:
_shard = "s-a"in afilterparameter to the search or documents fetch will return the documents that belong tos-a._shard != "s-a"will return the documents that do not belong tos-a_shard IN ["s-a", "s-b"]will return the documents that belong tos-aor tos-b.
You can use these new filters in manual remote federated search to create a partitioning over all shards in the network.
[!IMPORTANT] To avoid duplicate or missing documents in results, for manually crafted remote federated search requests, all shards should appear in exactly one query.
[!TIP] Search requests built with
useNetwork: truealready build a correct partitioning over shards. They should be preferred to manually crafted remote federated search requests in replicated sharding scenarios.
When updating your Meilisearch network using dumpless upgrade, please observe the following guidelines:
- Do not call the
PATCH /networkroute until all remotes of the network are finished updating - If using the search routes with
useNetwork: true, call them on un-updated remotes. Calling it on already updated remotes will cause un-updated remotes to fail the search as they don't know about the_shardfilters.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6128
§ Remove vectorStoreSetting experimental feature
The new HNSW vector store (hannoy) has been stabilized and is now the only supported vector store in Meilisearch.
As a result, updating to v1.37.0 will migrate all remaining legacy vector store indexes (using arroy) to hannoy, and the vectorStoreSetting experimental feature is no longer available.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6176
We removed a computationally expensive step from vector indexing.
On a DB with 20M documents, this removes 300s per indexing batch of 1100s.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6175
§ 🔒 Security
- Bump mini-dashboard (local web interface) which
- now stores API key in RAM instead of in the
localStorage - bumps dependencies with potential security vulnerabilities
- now stores API key in RAM instead of in the
By @Strift and @curquiza in https://github.com/meilisearch/meilisearch/pull/6186 and https://github.com/meilisearch/meilisearch/pull/6172
§ 🔩 Miscellaneous
- Mark Cargo.lock as not linguist-generated by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6181
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.36.0...v1.37.0
3.10.0 / 2026-02-24
Prometheus now offers a distroless Docker image variant alongside the default
busybox image. The distroless variant provides enhanced security with a minimal
base image, uses UID/GID 65532 (nonroot) instead of nobody, and removes the
VOLUME declaration. Both variants are available with -busybox and -distroless
tag suffixes (e.g., prom/prometheus:latest-busybox, prom/prometheus:latest-distroless).
The busybox image remains the default with no suffix for backwards compatibility
(e.g., prom/prometheus:latest points to the busybox variant).
For users migrating existing named volumes from the busybox image to the distroless variant, the ownership can be adjusted with:
docker run --rm -v prometheus-data:/prometheus alpine chown -R 65532:65532 /prometheus
Then, the container can be started with the old volume with:
docker run -v prometheus-data:/prometheus prom/prometheus:latest-distroless
User migrating from bind mounts might need to ajust permissions too, depending on their setup.
- [CHANGE] Alerting: Add
alertmanagerdimension to following metrics:prometheus_notifications_dropped_total,prometheus_notifications_queue_capacity,prometheus_notifications_queue_length. #16355 - [CHANGE] UI: Hide expanded alert annotations by default, enabling more information density on the
/alertspage. #17611 - [FEATURE] AWS SD: Add MSK Role. #17600
- [FEATURE] PromQL: Add
fill()/fill_left()/fill_right()binop modifiers for specifying default values for missing series. #17644 - [FEATURE] Web: Add OpenAPI 3.2 specification for the HTTP API at
/api/v1/openapi.yaml. #17825 - [FEATURE] Dockerfile: Add distroless image variant using UID/GID 65532 and no VOLUME declaration. Busybox image remains default. #17876
- [FEATURE] Web: Add on-demand wall time profiling under
<URL>/debug/pprof/fgprof. #18027 - [ENHANCEMENT] PromQL: Add more detail to histogram quantile monotonicity info annotations. #15578
- [ENHANCEMENT] Alerting: Independent alertmanager sendloops. #16355
- [ENHANCEMENT] TSDB: Experimental support for early compaction of stale series in the memory with configurable threshold
stale_series_compaction_thresholdin the config file. #16929 - [ENHANCEMENT] Service Discovery: Service discoveries are now removable from the Prometheus binary through the Go build tag
remove_all_sdand individual service discoveries can be re-added with the build tagsenable_<sd name>_sd. Users can build a custom Prometheus with only the necessary SDs for a smaller binary size. #17736 - [ENHANCEMENT] Promtool: Support promql syntax features
promql-duration-exprandpromql-extended-range-selectors. #17926 - [PERF] PromQL: Avoid unnecessary label extraction in PromQL functions. #17676
- [PERF] PromQL: Improve performance of regex matchers like
.*-.*-.*. #17707 - [PERF] OTLP: Add label caching for OTLP-to-Prometheus conversion to reduce allocations and improve latency. #17860
- [PERF] API: Compute
/api/v1/targets/relabel_stepsin a single pass instead of re-running relabeling for each prefix. #17969 - [PERF] tsdb: Optimize LabelValues intersection performance for matchers. #18069
- [BUGFIX] PromQL: Prevent query strings containing only UTF-8 continuation bytes from crashing Prometheus. #17735
- [BUGFIX] Web: Fix missing
X-Prometheus-Stoppingheader for/-/readyendpoint inNotReadystate. #17795 - [BUGFIX] PromQL: Fix PromQL
info()function returning empty results when filtering by a label that exists on both the input metric andtarget_info. #17817 - [BUGFIX] TSDB: Fix a bug during exemplar buffer grow/shrink that could cause exemplars to be incorrectly discarded. #17863
- [BUGFIX] UI: Fix broken graph display after page reload, due to broken Y axis min encoding/decoding. #17869
- [BUGFIX] TSDB: Fix memory leaks in buffer pools by clearing reference fields (Labels, Histogram pointers, metadata strings) before returning buffers to pools. #17879
- [BUGFIX] PromQL: info function: fix series without identifying labels not being returned. #17898
- [BUGFIX] OTLP: Filter
__name__from OTLP attributes to prevent duplicate labels. #17917 - [BUGFIX] TSDB: Fix division by zero when computing stale series ratio with empty head. #17952
- [BUGFIX] OTLP: Fix potential silent data loss for sum metrics. #17954
- [BUGFIX] PromQL: Fix smoothed interpolation across counter resets. #17988
- [BUGFIX] PromQL: Fix panic with
@modifier on empty ranges. #18020 - [BUGFIX] PromQL: Fix
avg_over_timefor a single native histogram. #18058
{ "leader": "ms-00", "self": "ms-01", "remotes": { "ms-00": { /* .. */ }, "ms-01": { /* .. */ } } }