Releases: nspcc-dev/neofs-node
v0.53.0 - Sido
Added
storage.shard.metabase.search_iteration_limitSN config option limiting fruitless SearchV2 metabase iterations (#3915)- Policer cycle/object metrics with replica vs EC breakdown (#3945)
replicator.disable_post_initial_queueSN config option (#3959)sd_notifysupport: both storage and inner ring nodes now notify systemd when the service is ready, allowingType=notifyin systemd unit files (#3943)- GET now supports payload ranges (#3991)
Fixed
- Policer removes redundant local shard copies that could remain on disk forever (#3908, #3997)
- Treat only HALTed main transactions as successfully executed, retry the rest (#3868)
different object owner and session issuerfor stored objects (#3929)- SearchV2 method returning zero result instead of "bad request" error for incorrect numeric filters (#3934)
- Garbage double-counting in metrics (#3933)
- Panic in session token storage epoch parsing (#3941)
- Compressed object GET failure in some cases (#3936)
- Support v2 session tokens in cli object search (#3955, #3962)
- Write cache may flush empty objects to FSTree in some scenarious (#3937)
- Warnings in logs of node receiving garbage objects to store from peers (#3916)
meta resyncfailures with address mismatch on case-insensitive filesystems (#3969)
Changed
object searchCLI command is now the same asobject searchv2(#3931)- Optimized integer comparison in SearchV2 (#3938, #3947)
- Optimized number of nodes for SEARCH in EC containers (#3940)
- Optimized post-initial placement replication (#3923)
- All regular state-modifying DB operations are batched now (was Put-only, #3942)
- Optimized metabase object checks for container-level GC marks (#3953)
- Rejected metabase PUT requests into GC-marked containers (#3953)
- Improved IR list caching in SN (#3954)
- Optimized local (TTL=1, EC parts) request processing (#3957)
neofs-clidoes not allow searches based on homomorphic hash values (#3847)neofs-cli,neofs-nodedo not allow searches based on homomorphic hash values (#3847)- Storage nodes do not calculate homomorphic hashes for objects (#3847)
- Optimized GET/HEAD/RANGE request forwarding (#3877, #3967)
- Optimized netmap caching in node (#3966)
- Store associated object ID as bytes instead of Base58 in metabase (#3971)
- Optimized local RANGE request execution (#3967)
Removed
policer.max_workersconfiguration (#3920)- Deprecated
Searchmethod support from storage nodes (#3931) - Internal conversions of node addresses received from network map (#3981)
GetRangeHashmethod support from storage nodes and relatedobject hashCLI command (#3991)
Updated
- NeoGo dependency to 0.119.0 (#3993)
github.com/nspcc-dev/neofs-sdk-gomodule tov1.0.0-rc.19(#3991, #3999)
Updating from v0.52.0
Drop policer.max_workers configuration, it's no-op since 0.52.0.
Use CLI object search command instead of object searchv2, functionally they are the same now and v2 variant will be removed in future.
Storage nodes no longer implement deprecated and insecure Search method, migrate to Searchv2 if needed.
Metabase will migrate to version 11 with this release to update object counters, this can take a while for shards with a lot of objects.
Storage nodes no longer implement deprecated GetRangeHash method and neofs-cli object hash command has been removed.
GET now supports payload ranges. Migrate from deprecated RANGE requests to GET with range parameters, old ones are still supported but will be removed eventually.
v0.52.0 - Woodo
Delivering performance optimizations and initial placement feature this release also brings with it much more powerful maintenance tools and a huge list of updates and fixes.
Added
neofs-lancet meta resynccommand (#3849, #3890)policer.boost_multiplierSN config option (#3855)neofs-lancet storage flush-write-cachescommand (#3872)- Reload gRPC SN config with SIGHUP (#3874)
- Support for creation of containers with initial placement policy (#3830)
neofs-lancet meta removecommand (#3891)neofs-lancet fstree removecommand (#3892)- SN has new
root,ts,lock,link,gcobject counter metrics (#3740) - Optimal placement state metric (#3901)
Fixed
- Resending the header after chunks have already been sent in object service
Gethandler (#3833) - GC deadlock on local object storage shutdown (#3837)
owner mismatches signaturefor stored objects (#3836)- SN does not retry resending failed transaction because of insufficient GAS in some cases (#3839)
- Too early GET/HEAD/RANGE request failure on single SN dial failure (#3840)
- Payment deadlock on IR side (#3842)
- Wrong shard ID entry in FSTree descriptor (#3849, #3861)
- Shard evacuation replicate for EC parts (#3854)
- Suboptimal shard selection for EC parts during data evacuation (#3870)
- No redistribution of objects when adding a new
REP 3node (#3873) - Split of a split is allowed (#3867)
- SN no longer fails to read valid objects with non-payload fields larger than 16K (#3887)
- Session v2 origin signature verification (#3909)
Changed
- SN returns unsigned responses to requests with API >=
v2.22(#3785) - Move lancet
write-cacheget/listcommands intofstreesection in CLI (#3838, #3844) - Session key storage access session keys by account only (#3817)
- Optimized locking for reputation data collector (#3851)
- Optimized local HEAD/GET request execution (#3783, #3882, #3903)
- Unpaid container's data is deleted now (#3691)
- Policer iterates engine-level object list now instead of shard-level (#3862)
- SN now ignores
copies_numberfield ofobject.PutRequest.Body.Initmessage (#3830) - Policer starts from a random offset (#3879)
- SN now determines request API version from original request meta header (#3897)
- 2.18 is the minimum supported version for new objects (#3869)
- Rename
neofs-lensintoneofs-lancet(#3894) - SN no longer accepts objects with invocation or verification script bigger than 1KiB (#3887)
- Every object with non-zero payload is now paid, not only regular ones (#3856)
- Separate policer placement state from replica shortage (#3901)
Removed
node.persistent_sessions.pathconfig option from SN config (#3846)- Undocumented ability to fetch the latest contract release for adm update-contracts (#3850)
storage.shards.resync_metabaseconfig option from SN config (#3849)- One-time netmap contract placement migration routine for v0.49.0+ releases (#3821)
- Metabase v5 to v6 and v6 to v7 migrations (#3864)
- SN's
logicobject counter metric (#3740) replicator.pool_sizeoption (#3899)
Updated
github.com/nspcc-dev/neofs-sdk-gomodule tov1.0.0-rc.18(#3785, #3817, #3808, #3830, #3883, #3896, #3887, #3906)github.com/nspcc-dev/neo-gomodule tov0.118.0(#3896)- Go 1.25+ is required to build now (#3525)
github.com/klauspost/compressdependency from v1.18.0 to v1.18.4 (#3850)github.com/klauspost/reedsolomondependency from v1.12.5 to v1.13.2 (#3850)github.com/nspcc-dev/tzhashdependency from v1.8.3 to v1.8.4 (#3850)github.com/panjf2000/ants/v2dependency from v2.11.3 to v2.11.5 (#3850)github.com/spf13/cobradependency from v1.10.1 to v1.10.2 (#3850)go.uber.org/zapdependency from v1.27.0 to v1.27.1 (#3850)golang.org/x/netdependency from v0.47.0 to v0.51.0 (#3850)google.golang.org/grpcdependency from v1.75.1 to v1.79.1 (#3850)google.golang.org/protobufdependency from v1.36.10 to v1.36.11 (#3850)
Updating from v0.51.1
SN config option node.persistent_sessions.path was deprecated since release 0.50.0 and has now been removed. Drop this config and associated file, migrate with 0.51.1 if needed. Sessions are stored in node.persistent_state.path DB now.
Delete storage.shards.resync_metabase config option from SN config, it's no longer used. Use neofs-lancet meta resync command if you need to resync metabase.
Delete replicator.pool_size config option from SN config, it's no longer needed.
Storage nodes no longer automatically migrate metabases from version 5 (NeoFS 0.46.0) to 6 (NeoFS 0.48.0) and from version 6 to version 7 (NeoFS 0.48.1), migrate using SN 0.51.1 or resynchronize with 0.52.0 if needed.
Storage nodes clean up objects that belong to unpaid containers. This means data will permanently be deleted from shards, recovery isn't possible.
copies_number parameter of object PUT request no longer has any effect. Use max_replicas setting of container's initial placement policy instead.
CLI --await flag is now deprecated for container commands. For servers supporting NeoFS API version starting from v2.21, the flag may be safely dropped. For older servers, success checks should now be done by polling with symmetric read command instead. Please note that this flag will be removed in a future release.
neofs-lens command was renamed to neofs-lancet to reflect that it now supports modifying storage state in addition to inspection. Replace neofs-lens references with neofs-lancet.
v0.51.1
Added
neofs-cli container policy checkcommand (#3790)neofs-adm mainchain updatecommand (#3799, #3811)neofs-adm mainchain versioncommand (#3811)policer_consistency_stateSN metric that means all SN's objects correspond placement policies (#3795)
Fixed
- Unclosed compressed FSTree files (#3802)
- Potential payload overflow on getting full object from combined FSTree file (#3801)
- Too high nbf/iat token defaults in CLI for testnet/mainnet (#3819)
- Repeated attempts to delete nonexistent objects (#3820)
- Address change in configuration not triggering netmap update (#3828)
- Billing for networks with 0.25.0 -> 0.26.0 migrated contracts (#3832)
Changed
- SN retries notary requests if
insufficient amount of gaserror appears (#3739) - Speed up metabase resync by using batch operations (#3804)
Updated
v0.51.0
A number of important protocol updates are delivered with this release including mutable NEP-11 containers, synchronous container operations and session token version 2. Metabase optimizations make some operations like object deletion significantly faster. Object service optimizations also allow to squeeze some additional ops/s from hardware, most noticeably for RANGE requests and PUT into containers using erasure coding.
Added
- SN now supports new
getInfoandcreateV2methods of the Container contract (#3670) - IR now supports container creation requests submitted via new
createV2contract method (#3670) - IR structures containers in the contract iteratively (#3670, #3732)
- SN tries new NEP-11 methods
tokensandtokensOfof Container contract (#3701) - SN now listens to NEP-11
transferevents of Container contract (#3701) - CLI supports
CONTAINER_AWAIT_TIMEOUTstatus now (#3711) - Policer logs when it reaches the end of its cycle (#3720)
- Support for GET of LINK objects in EC containers (#3722)
- Containers can now be locked for deletion via
__NEOFS__LOCK_UNTILattribute (#3708) - SN can respond with
CONTAINER_LOCKEDstatus now (#3708) session create-v2cli command to create new session token v2 (#3750)- SN now support raw GET/HEAD/RANGE requests in EC containers (#3756)
- IR now serves
setAttributeandremoveAttributemethods of Container contract (#3733) - SN now serves
ContainerService'sSetAttributeandRemoveAttributeRPC (#3733, #3784) - CLI
set-attributeandremove-attribute commands tocontainer` section (#3733, #3784) - Size-split object is now available even when LINK is unavailable in EC container (#3754)
neofs-adm balance container-statuscommand (#3693)- Container IDs to JSON output of ADM
fschain dump-containerscommand (#3789) - Support for IDs from JSON to ADM
fschain restore-containerscommand (#3789) - IR supports new session token v2 (#3671)
- SN supports new session token v2 for container and object operations (#3671)
Fixed
- IR panics at graceful shutdown (#3706)
- IR using netmap contract to store IR node list instead of RoleManagement (#3707)
- Missing PUT local storage operation log when flushing objects from write cache to underlying blobstor (#3720)
- EC parts of expired object no longer remain on SN (#3718)
- Metabase reset not deleting old buckets in some cases (#3744)
- Object left in the storage after unsuccessful meta PUT (#3744)
- Object left in some shards on fatal broadcast failure (#3744)
- Deadlock on SN exit in rare GC cases (#3744)
- SN no longer counts removed parent objects as physical ones in metrics (#3717)
- SN updates internal cache (if any) after attribute changes immediately (#3780)
- Error handling in
removeNodenotary request (#3786) - SN RANGE continuation in EC multi-rule case (#3662)
Changed
- Optimized locking info in metabase (#3672)
- Lock objects with API <2.18 are no longer accepted (#3672)
- SN handles
ContainerService'sPut,DeleteandSetExtendedACLrequests in sync manner (#3711) - SNs report storage statistics with random time offset if netmap is empty (#3714)
- SN removes objects immediately when requested via control service now instead of just marking them to be deleted by GC (#3727)
- Tombstone objects with API <2.18 are no longer accepted (#3731)
- Garbage marking scheme in metabase (#3753)
- SN sorts shards identically when writing and reading EC parts (#3773)
- SN puts EC parts concurrently now (#3777)
- Optimized object-to-shard placement (#3794)
Removed
- Deprecated
fschain_autodeploy,without_mainnet,governance.disable,fee.main_chainandcontractsIR config options (#3716) - Metabase v3 to v4 migration (#3735)
- Metabase v4 to v5 migration (#3735)
- Broken logical object metric from shards (#3741)
- Graveyard from metabase (#3744)
- "ToMoveIt" bucket from the metabase (#3763)
Updated
github.com/nspcc-dev/neofs-contractmodule tov0.26.0(#3670, #3746, #3733, #3780, #3782)github.com/nspcc-dev/neofs-sdk-gomodule tov1.0.0-rc.17(#3711, #3750, #3733, #3775, #3772, #3787, #3784, #3671, #3796, #3800)github.com/nspcc-dev/locode-dbmodule tov0.8.2(#3729)github.com/nspcc-dev/neo-gomodule tov0.116.0(#3733, #3769, #3779)
Updating from v0.50.2
Please remove the following deprecated configuration options from IR config:
fschain_autodeploywithout_mainnetgovernance.disablefee.main_chaincontracts
They were removed in this version and using them will lead to failure to start the node.
Storage nodes no longer automatically migrate metabases from version 3 (NeoFS 0.44.0) to 4 (NeoFS 0.45.0) and from version 4 to version 5 (NeoFS 0.46.0), resynchronize or migrate using SN 0.50.2 if needed.
v0.50.2
v0.50.1
v0.50.0
Added
- Erasure coding in containers' storage policies (#3570)
- IR
experimental.allow_ecconfig option (#3570) - SN
pprof.enable_blockandpprof.enable_mutexoptions (#3655) neofs-adm fschain load-reportcommand (#3649)neofs-adm fschain load-summarycommand (#3687)
Fixed
- Write cache using too much CPU (#3642)
- Split object with link not found stuck in GC cycle (#3653)
- Quotas TTL (#3665)
- SN load reporting race (#3652)
- Incompatibility with wallets using non-standard scrypt parameters (#3675)
- Improper handling of Incomplete status in CLI commands (#3679)
- Incomplete status response missing data for SEARCH/PUT/DELETE operations (#3679, #3683, #3684, #3686)
- Basic income payments (#3357)
Changed
- Move
fschain_autodeployintofschain.disable_autodeployin IR config (#3619) - Move
without_mainnetintomainnet.enabledin IR config (#3619) - Move
governance.disableintomainnet.disable_governance_syncin IR config (#3619) - Move
fee.main_chainintomainnet.extra_feein IR config (#3619) - Move
contractsintomainnet.contractsin IR config (#3619) - Move
persistent_sessionsdata topersistent_statein SN (#3630) - More efficient write cache batching for small objects (#3414, #3682)
- SN now indexes metadata for root objects nested twice (parents of parents) (#3674)
- Storage nodes do not serve unpaid containers (#774)
- IR logs public keys in HEX encoding, not base64 (#3690)
Removed
- Pre-0.46.0 write cache format migration (#3647)
Updated
- NeoGo dependency to 0.114.0 (#3679)
- NeoFS SDK dependency to RC16+ (#3679)
- golang.org/x/crypto dependency from 0.42.0 to 0.45.0 (#3685)
- neofs-contract from 0.24.0 to 0.25.1 (#3650)
Updating from v0.49.1
Erasure coding is available in experimental mode. To enable it, set experimental.allow_ec flag in IR config.
Use IR configuration options:
fschain.disable_autodeployinstead of deprecatedfschain_autodeploywith reverted value, by default autodeploy is enabled now;mainnet.enabledinstead of deprecatedwithout_mainnetwith reverted value, by default mainnet is disabled now;mainnet.disable_governance_syncinstead of deprecatedgovernance.disable;mainnet.extra_feeinstead of deprecatedfee.main_chain;mainnet.contractsinstead of deprecatedcontracts;
Old options are still supported but will be removed in future releases.
SN config option node.persistent_sessions.path now is deprecated and used only for migration. Sessions are stored in node.persistent_state.path option now.
Write cache migration from pre-0.46.0 format is no longer supported, use some earlier version if you still have write cache database with objects.
Contracts autoupdate doesn't support pre-0.20.0 contract versions corresponding to NeoFS 0.43.0 release. Update from earlier versions using 0.49.1 first.
v0.49.1
v0.49.0 - Dochodo
Added
Fixed
- Send on closed channel panic in node's new epoch handler (#3529)
- Tomstoned objects revival not working (#3542)
- Negative logic object counters in metabase (#3555)
- Inability to list 2K+ containers via API (#3558)
- Not using the IR
fee.main_chainconfig parameter (#3584) - Metadata signatures submission (#3591)
- Expired lock still locked the object (#3601, #3616)
- Empty storage and error-free startup when changing layout parameters (#3594)
- Flaky storage evacuation unit test (#3605)
- Incorrect search request from SN when processing tombstones (#3610)
neofs-cli container listlists nothing if there are no flags (#3613)
Changed
- Stream payload without buffering to reduce memory usage in CLI
Get/Putoperations (#3535) neofs-cli object rangecommand now truncates file passed to--file(#3544)neofs-cli object rangecommand now creates file withrw-r--r--permissions (#3544)- Alphabet nodes send basic storage income based on the new Reports API from
containercontract (#3053) - Use stream API of FSTree for object service
Getoperation (#3466, #3568) - Use meta buckets to mark containers with GC (#3561)
- Switched to local BoltDB fork based on go.etcd.io/bbolt version 1.4.3 (#3576)
- Move processing of expired objects from the epoch event handler to the regular GC cycle (#3582)
- More compact EACL table representation in neofs-cli acl extended print command (#3597)
- Storage node returns new Busy/Incomplete/BadRequest status codes when appropriate (#3606)
Removed
neofs-cli object head --main-onlyno-op flag (#3509)- IR's estimations timer management (#3539)
neofs-adm fschain estimationscommand (#3572)--oidflag from CLI object search commands (#3606)
Updated
github.com/nspcc-dev/neofs-sdk-godependency tov1.0.0-rc.15(#3569, #3606)- Minimum required Go version to 1.24 (#3135)
github.com/cenkalti/backoff/v4dependency from v4.2.1 to v4.3.0 (#3589)github.com/klauspost/compressdependency from v1.17.11 to v1.18.0 (#3589)github.com/klauspost/reedsolomondepdendency from v1.12.4 to v1.12.5 (#3589)github.com/multiformats/go-multiaddrdependency from v0.12.2 to v0.16.1 (#3589)github.com/nspcc-dev/hrw/v2dependency from v2.0.3 to v2.0.4 (#3589)github.com/nspcc-dev/locode-dbdepdendency from v0.6.0 to v0.8.1 (#3589)github.com/nspcc-dev/neo-godependency from v0.111.0 to v0.112.0 (#3589)github.com/nspcc-dev/tzhashdependency from v1.8.2 to v1.8.3 (#3589)github.com/panjf2000/ants/v2dependency from v2.9.0 to v2.11.3 (#3589)github.com/prometheus/client_golangdependency from v1.21.1 to v1.23.2 (#3589)github.com/spf13/castdependency from v1.6.0 to v1.10.0 (#3589)github.com/spf13/cobradependency from v1.8.1 to v1.10.1 (#3589)github.com/spf13/pflagdependency from v1.0.6 to v1.0.10 (#3589)github.com/spf13/viperdependency from v1.18.2 to v1.21.0 (#3589)golang.org/x/expdependency from v0.0.0-20250819193227-8b4c13bb791b to v0.0.0-20250911091902-df9299821621 (#3589)golang.org/x/netdependency from v0.43.0 to v0.44.0 (#3589)google.golang.org/grpcdependency from v1.70.0 to v1.75.1 (#3589)google.golang.org/protobufdependency from v1.36.8 to v1.36.9 (#3589)github.com/nspcc-dev/neofs-contractdependency tov0.24.0(#3620)
Updating from v0.48.3
Drop --main-only flag from all neofs-cli object head commands.
Drop IR's timers.stop_estimation.* and timers.distribute_basic_income configuration values, they are not used anymore.
neofs-adm fschain estimations was removed.
v0.48.3
Fixed
- SN no longer caches request-dependent container session errors (#3526)
- SN no longer caches request-dependent bearer token errors (#3527)
- Unclear SN status message for bearer token issuer mismatch (#3527)
- Panic due to buffer size when extracting header from combined object in FSTree (#3518)
- Endless loop when extracting header from combined object in FSTree (#3518)
Changed
- SN no longer accepts PUT eACL requests without container ID (#3515)
Removed
- Metabase version 2 to 3 migration code, minimal corresponding NeoFS version is 0.44.0 (#3514)
Updating from v0.48.2
Metabase version 2 can't be migrated to current with this version of NeoFS, if
you're updating from version earlier than 0.44.0 consider metabase resync or
updating using 0.48.2 first and then using this version.