Releases: nspcc-dev/neofs-node
v0.39.2
v0.39.1
v0.39.0 - Baegado
Complete contract autodeploy/autoupdate functionality, much simplified SN/IR attribute interaction, numerous optimizations and obligatory bug fixes --- that's your new NeoFS release in short. Beware of deprecated commands and options removal, check your scripts and configurations and update to the latest and greatest of NeoFS.
Added
- Policer's setting to the SN's application configuration (#2600)
- Support of verified domains for the storage nodes (#2280)
neofs-lens storage status
CLI command (#2550)- Human-readable output of objects' creation timestamp to
neofs-cli container list-objects
(#2653) - Ability to preset P2PNotary and NeoFSAlphabet roles to validators at the FS chain's genesis (#2643)
Fixed
neofs-cli netmap netinfo
documentation (#2555)GETRANGEHASH
to a node without an object producedGETRANGE
orGET
requests (#2541, #2598)- Iteration over locally collected container estimation values (#2597)
- Synchronous objects
PUT
to the local storage (#2607) copies_number
field was not used inPUT
request handling (#2607)- Neo-go notary deposit data workaround (#2429)
- Error of missing network endpoint in
neofs-cli object
commands when it is set in the file config (#2608)
Changed
- FSTree storage now uses more efficient and safe temporary files under Linux (#2566, #2624, #2633)
- BoltDB open timeout increased from 100ms to 1s (#2499)
- Internal container cache size from 10 to 1000 (#2600)
- Transaction witness scope no longer uses CustomGroups relying on more strict Rules now (#2619)
- New optimized SDK version is integrated (#2622)
- IR uses internal LOCODE DB from Go package (#2610, #2658)
- Contract group for the committee is no longer registered/used in the Sidechain auto-deployment (#2642)
- IR does not change SNs' attributes, SNs expand UN/LOCODE attributes do it themselves (#2612)
- The priority of metrics service is increased (#2428)
- The priority of running control service is maximized (#2585)
Removed
- Deprecated
no-precheck
flag ofneofs-cli container set-eacl
(#2496) - Recently-handled objects Policer's cache (#2600)
- Deprecated blobovnicza substorage (#2614)
- Contract group wallet support from
neofs-adm
(#2619) neofs-cli util locode generate
andneofs-cli util locode info
commands (#2610)- Locode DB configuration options (#2610)
v
prefix in version (#2640)
Updated
- Update minimal supported Go version up to v1.19 (#2485)
- Update
neo-go
tov0.104.0
(#2221, #2309, #2596, #2626, #2639, #2659) neofs-lens
inspect
object commands toget
withinspect
deprecation (#2548)- Update
tzhash
tov1.7.1
github.com/panjf2000/ants/v2
tov2.8.2
github.com/nspcc-dev/neofs-contract
tov0.18.0
(#2580)golang.org/x/net
to 0.17.0 (#2621)github.com/nats-io/nats-server/v2
to 2.9.23 (#2623)- UUID, golang-lru, compress, go-multiaddr, nats.go, cobra, grpc and other dependencies (#2632)
hrw
library to v2.0.0 version (#2629, #2658)github.com/nats-io/nkeys
to 0.4.6 (#2636)- neofs-contract to v0.19.1 (#2659)
Updating from v0.38.1
Blobovniczas are gone from the node with this release, see 0.38.0 upgrade notes for migration instruction (the tool is still provided, but will be gone after a couple of minor releases).
neofs-adm no longer creates a contract group wallet and no longer needs it for the operation which may affect deployment scripts.
Pre-0.39.0 storage nodes may not be able to register on the network running 0.39.0 inner ring nodes unless they provide complete LOCODE data in the configuration (0.39.0 SNs add it automatically, so upgrade SNs).
native_activations
subsection of consensus
IR configuration should be removed. It never actually did anything useful anyway.
Automatic contract deployments and updates require fschain_autodeploy
configuration, currently it's optional an IR behaves as previously by default.
v0.38.1
v0.38.0 - Gogado
A number of important fixes are brought by this release, including protocol ones (subnet and system EACL changes), as well as an updated storage subsystem and useful CLI updates making it more powerful and user-friendly at the same time.
Some previously deprecated configuration options were removed, so be careful and this is the last minor release to support the Blobovnicza tree storage subsystem. Starting with the next minor release, the component will be purged,so be prepared (see Updating
section) and migrate to more efficient and simple Peapod.
Added
- Embedded Neo contracts in
contracts
dir (#2391) dump-names
command for admrenew-domain
command for adm- Stored payload metric per container (#2116)
- Stored payload metric per shard (#2023)
- Histogram metrics for RPC and engine operations (#2351)
- New storage component for small objects named Peapod (#2453)
- New
blobovnicza-to-peapod
tool providing blobovnicza-to-peapod data migration (#2453) - SN's version and capacity is announced via the attributes automatically but can be overwritten explicitly (#2455, #602)
peapod
command forneofs-lens
(#2507)- New CLI exit code for awaiting timeout (#2380)
- New CLI exit code for already removed objects (#2376)
- Validation of excessive positional arguments to
neofs-cli
commands (#1941) --lifetime
flag tobearer create
andobject put
CLI commands (#1574)--expired-at
flag tosession create
andstoragegroup put
CLI commands (#1574)- Sessions to RPC server running in IR's local consensus mode (#2532)
neofs-cli object nodes
command to get SNs for an object (#2512)- Fetching container estimations via iterators to prevent NeoVM stack overflow (#2173)
neofs-adm morph netmap-candidates
CLI command (#1889)- SN network validation (is available by its announced addresses) on bootstrap by the IR (#2475)
- Display of container alias fee info in
neofs-cli netmap netinfo
(#2553) neofs-lens storage inspect
CLI command (#1336)neofs-lens
payload-only flag (#2543)neofs-lens meta put
CLI command (#1816)
Fixed
neo-go
RPC connection loss handling (#1337)- Concurrent morph cache misses (#1248)
- Double voting for validators on IR startup (#2365)
- Skip unexpected notary events on notary request parsing step (#2315)
- Session inactivity on object PUT request relay (#2460)
- Missing connection retries on IR node startup when the first configured mainnet RPC node is not in sync (#2474)
- Storage node no longer ignores unhealthy shards on startup (#2464)
- Processing of status errors returned by API client from NeoFS SDK RC-9 (#2465)
neofs-lens write-cache list
command duplication (#2505)neofs-adm
works with contract wallet ininit
andupdate-contracts
commands only (#2134)- Missing removed but locked objects in
SEARCH
's results (#2526) - LOCK objects and regular objects expiration conflicts (#2392)
- SN responds with a different node information compared to a bootstrapping contract call's argument (#2568)
neofs-cli object put
command processes multiple--attributes
flags (#2427)
Removed
- Deprecated
morph.rpc_endpoint
SN andmorph.endpoint.client
IR config sections (#2400) neofs_node_object_epoch
metric for IR and SN (#2347)- Subnets support (#2411)
- Logging utility completely replaced with
zap.Logger
(#696) - System eACL modification ability in the
neofs-cli
andIR
(netmap candidate validation) (#2531)
Changed
- CLI
--timeout
flag configures whole execution timeout from now (#2124) - CLI default timeout for commands with
--await
flag increased to 1m (#2124) - BlobStor tries to store object in any sub-storage with free space (#2450)
- SN does not store container estimations in-mem forever (#2472)
- CLI
neofs-cli container set-eacl
checks container's ownership (#2436)
Updated
neofs-sdk-go
tov1.0.0-rc.11
Updating from v0.37.0
CLI command timeouts (flag --timeout
) now limit the total command execution time and not single network operation. If any commands suddenly start to fail on timeout, try increasing the value, for example, twice. Also note that the execution of commands with the --await
flag and without an explicitly specified time period is now limited to 1 minute. This value can be changed with--timeout
flag.
Histogram (not counter) RPC/engine operation handling time metrics were added. For an old engine *operation_name*_duration
a new *operation_name*_time
is available.For an old *operation_name*_req_duration
RPC a new rpc_*operation_name*_time
is available. The old ones (the counters) have been deprecated and will be removed with the following minor release.
Container estimation main node calculation has been changed. A new 32-byte long array is taken as a sorting pivot: it is an estimated container with the first 8 bytes replaced with a target epoch in a little-endian encoding now.
Deprecated morph.rpc_endpoint
SN and morph.endpoint.client
IR configurations have been removed. Use morph.endpoints
for both instead.
Deprecated neofs_node_object_epoch
metric for IR and SN (the same for both) has been removed. Use neofs_node_state_epoch
for SN and neofs_ir_state_epoch
for IR instead.
Deprecated --no-precheck
flag in neofs-cli container set-eacl
use --force
flag instead for skipping validation checks.
Subnets support has been removed:
- IR's
workers.subnet
andcontracts.subnet
configs are not used anymore. - SN's
node.subnet
config section is not used anymore. neoofs-amd morph
does not havesubnet
subcommand anymore.neofs-cli container create
does not have--subnet
flag anymore.
Docker images now contain a single executable file and SSL certificates only.
neofs-cli control healthcheck
exit code is 0
only for "READY" state.
To migrate data from Blobovnicza trees to Peapods:
$ blobovnicza-to-peapod -config </path/to/storage/node/config>
For any shard, the data from the configured Blobovnicza tree is copied into a created Peapod file named peapod.db
in the directory where the tree is located. For example, /neofs/data/blobovcniza/*
-> /neofs/data/peapod.db
. Notice that existing Blobovnicza trees are untouched. Configuration is also updated, for example, /etc/neofs/config.yaml
-> /etc/neofs/config_peapod.yaml
. WARN: carefully review the updated config before using it in the application!
To store small objects in more effective and simple sub-storage Peapod, replace blobovnicza
sub-storage with the peapod
one in blobstor
config section. If storage node already stores some data, don't forget to make data migration described above.
v0.37.0 - Sogado
Added
neofs_[node|ir]_version
withversion
label (#2326)- TLS RPC support for IR consensus mode (#2322)
- Multiple neo-go RPC reconnection attempts with a delay (#2307)
Changed
- NeoFS CLI generates random private key automatically if wallet is omitted (#2123)
morph.validators
config can be omitted for IR in local consensus mode but must be non-empty otherwise (#2311)
Fixed
- Inability to restore RPC connection after the second disconnect (#2325)
- Tree service panics when cleaning up failed connections (#2335)
- Dropping small objects on any error on write-cache side (#2336)
- Iterating over just removed files by FSTree (#98)
- IR metrics moved to
neofs_ir
namespace and epoch metrics toobject
subsystem (#2344) - IR metrics config reading (#2344)
Removed
- Non-notary mode support for sidechain (#2321)
- Priority switching b/w RPC endpoints in the morph client (#2306)
- Support for binary keys in the CLI (#2357)
Updated
- Update minimal supported Go version up to v1.18 (#2340)
- tzhash library to 1.7.0 (#2348)
github.com/hashicorp/golang-lru
tov2.0.2
neofs-sdk-go
tov1.0.0-rc.8
- BoltDB (
go.etcd.io/bbolt
) to 1.3.7
Updating from v0.36.1
neofs_node_object_epoch
metric for IR and SN (the same for both) has been deprecated and will be removed with thenext minor release. Useneofs_node_state_epoch
for SN andneofs_ir_state_epoch
for IR instead.- Storage and Inner-ring nodes exposes their version via the
neofs_[node|ir]_version
metric now. - In the local consensus mode (IR) it is allowed to provide additional TLS setup addresses now, see
morph.consensus.rpc.tls
section. morph.switch_interval
IR and SN config value is not used anymore.morph.rpc_endpoint
SN config value andmorph.endpoint.client
IR config value has been deprecated and will be removed with the next minor release. Usemorph.endpoints
for both instead (NOTE: it does not have priorities now).- If you're using binary keys with neofs-cli (
-w
), convert them to properNEP-6 wallets like this: $ xxd -p < path_to_binary.wallet # outputs hex-encoded key $ neofs-cli util keyer <hex_key> # outputs WIF $ neo-go wallet import -w <wallet_file> --wif <wif_key>or just generate/use new keys. - In local consensus mode
morph.validators
in IR's config can be omitted now,morph.consensus.committee
will be used instead.For detached consensus, it is a required config parameter now.
v0.36.1
v0.36.0 - Gado
A number of fixes and an internal CN for IR nodes. An update is recommended,data storage scheme is compatible with 0.35.0.
Added
- Doc for extended headers (#2128)
- Separate batching for replicated operations over the same container in pilorama (#1621)
object.delete.tombstone_lifetime
config parameter to set tombstone lifetime in the DELETE service (#2246)- neofs-adm morph dump-hashes command now also prints NNS domain expiration time (#2295)
- Launch mode of the Inner Ring with local consensus (#2194)
Changed
common.PrintVerbose
prints viacobra.Command.Printf
(#1962)- Storage node's
replicator.put_timeout
config default to1m
(#2227) - Full list of container is no longer cached (#2176)
- Pilorama now can merge multiple batches into one (#2231)
- Storage engine now can start even when some shard components are unavailable (#2238)
neofs-cli
buffer for object put increased from 4 KiB to 3 MiB (#2243)neofs-adm
now reuses network's setting during contract update if they're not overriden by configuration (#2191)
Fixed
- Pretty printer of basic ACL in the NeoFS CLI (#2259)
- Failing SN and IR transactions because of incorrect scopes (#2230, #2263)
- Global scope used for some transactions (#2230, #2263)
- Potential data loss from nodes outside the container or netmap (#2267)
- Invalid Inner Ring listing method through Netmap contract with notary Sidechain (#2283)
- Divide-by-zero panic in Inner Ring's basic income distribution procedure (#2262)
- Big object removal with non-local parts (#1978)
- Disable pilorama when moving to degraded mode (#2197)
- Fetching blobovnicza objects that not found in write-cache (#2206)
- Do not search for the small objects in FSTree (#2206)
- Correct status error for expired session token (#2207)
- Restore subscriptions correctly on morph client switch (#2212)
- Expired objects could be returned if not marked with GC yet (#2213)
neofs-adm morph dump-hashes
now properly iterates over custom domain (#2224)- Possible deadlock in write-cache (#2239)
- Fix
*_req_count
and*_req_count_success
metric values (#2241) - Storage ID update by write-cache (#2244)
neo-go
client deadlock on subscription (#2244, #2272)- Possible panic during write-cache initialization (#2234)
- incorrect NNS resolve handling in neofs-adm (#2296)
- Failed TestNet replication (#2288)
Updated
neo-go
tov0.101.1
(some code also reworked to not use deprecated APIs)github.com/klauspost/compress
tov1.15.13
github.com/multiformats/go-multiaddr
tov0.8.0
golang.org/x/term
tov0.3.0
google.golang.org/grpc
tov1.51.0
github.com/nats-io/nats.go
tov1.22.1
Updating from v0.35.0
New experimental config field object.delete.tombstone_lifetime
allows to settombstone lifetime more appropriate for a specific deployment.
v0.35.0 - Sindo (신도, 信島)
Added
morph list-containers
inneofs-adm
(#1689)--binary
flag inneofs-cli object put/get/delete
commands (#1338)session
flag support toneofs-cli object hash
(#2029)- Shard can now change mode when encountering background disk errors (#2035)
- Background workers and object service now use separate client caches (#2048)
replicator.pool_size
config field to tune replicator pool size (#2049)- Fix NNS hash parsing in morph client (#2063)
neofs-cli neofs-cli acl basic/extended print
commands (#2012)neofs_node_object_*_req_count_success
prometheus metrics for tracking successfully executed requests (#1984)- Metric 'readonly' to get shards mode (#2022)
- Tree service replication timeout (#2159)
apiclient.reconnect_timeout
setting allowing to ignore failed clients for some time (#2164)
Changed
object lock
command reads CID and OID the same way other commands do (#1971)LOCK
object are stored on every container node (#1502)neofs-cli container get-eacl
print ACL table in json format only with arg `--json' (#2012)- Side chain notary deposits use max uint32 as till parameter (#1486)
- Allow object removal without linking object (#2100)
neofs-cli container delete
command pre-checks container ownership (#2106)- Policer cache size is now 1024 (#2158)
- Tree service now synchronizes with container nodes in a random order (#2127)
- Pilorama no longer tries to apply already applied operations (#2161)
- Use
sync.Pool
in Object.PUT service (#2139) - Shard uses metabase for
HEAD
requests by default, not write-cache (#2167) - Clarify help for
--expire-at
parameter for commandsobject lock/put
andbearer create
(#2097) - Node spawns
GETRANGE
requests signed with the node's key if session key was not found forRANGEHASH
(#2144)
Fixed
- Open FSTree in sync mode by default (#1992)
neofs-cli container nodes
's output (#1991)- Increase error counter for write-cache flush errors (#1818)
- Correctly select the shard for applying tree service operations (#1996)
- Do not panic and return correct errors for bad inputs in
GET_RANGE
(#2007, #2024) - Physical child object removal by GC (#1699)
- Broadcasting helper objects (#1972)
neofs-cli lock object
'slifetime
flag handling (#1972)- Do not move write-cache in read-only mode for flushing (#1906)
- Child object collection on CLI side with a bearer token (#2000)
- Fix concurrent map writes in
Object.Put
service (#2037) - Malformed request errors' reasons in the responses (#2028)
- Session token's IAT and NBF checks in ACL service (#2028)
- Losing meta information on request forwarding (#2040)
- Assembly process triggered by a request with a bearer token (#2040)
- Losing locking context after metabase resync (#1502)
- Removing all trees by container ID if tree ID is empty in
pilorama.Forest.TreeDrop
(#1940) - Concurrent mode changes in the metabase and blobstor (#2057)
- Panic in IR when performing HEAD requests (#2069)
- Write-cache flush duplication (#2074)
- Ignore error if a transaction already exists in a morph client (#2075)
- ObjectID signature output in the CLI (#2104)
- Pack arguments of
setPrice
invocation during contract update (#2078) neofs-cli object hash
panic (#2079)- Closing
neo-go
WS clients on shutdown and switch processes (#2080) - Making notary deposits with a zero GAS balance (#2080)
- Notary requests on shutdown (#2075)
neofs-cli container create
check the sufficiency of the number of nodes in the selector for replicas (#2038)- Data duplication during request forwarding (#2047)
- Tree service panic on
TreeMove
operation (#2140) - Panic in
GETRANGE
with zero length (#2095) - Spawning useless
GETRANGE
with zero length for a big object (#2101) - Incomplete object put errors do contain the deepest error's message (#2092)
- Prioritize internal addresses for clients (#2156)
- Force object removal via control service (#2145)
- Synchronizing a tree now longer reports an error for a single-node container (#2154)
- Prevent leaking goroutines in the tree service (#2162)
- Do not search for LOCK objects when delete container when session provided (#2152)
- Race conditions on shard's mode switch (#1956)
- Returning expired/removed objects from write-cache (#2016)
Removed
-g
option fromneofs-cli control ...
andneofs-cli container create
commands (#2089)--header
fromneofs-cli object get
(#2090)
Updated
neo-go
tov0.100.0
spf13/cobra
tov1.6.1
spf13/viper
tov1.8.0
google.golang.org/grpc
tov1.50.1
Updating from v0.34.0
Pass CID and OID parameters via the --cid
and --oid
flags, not as the command arguments.
Replicator pool size can now be fine-tuned with replicator.pool_size
config field.The default value is taken from object.put.pool_size_remote
as in earlier versions.
Added neofs_node_object_*_req_count_success
metrics for tracking successfully executed requests.
neofs-cli container delete
command now requires given account or session issuerto match the container owner. Use --force
(-f
) flag to bypass this requirement.
Tree service network replication can now be fine-tuned with tree.replication_timeout
config field.
v0.34.0 - Marado (마라도, 馬羅島)
Added
--timeout
flag inneofs-cli control
commands (#1917)- Document shard modes of operation (#1909)
tree list
CLI command (#1332)TreeService.GetTrees
RPC (#1902)- All trees synchronization on bootstrap (#1902)
--force
flag toneofs-cli control set-status
command (#1916)- Logging
SessionService.Create
RPC on the server for debug (#1930) - Debian packages can now be built with
make debpackage
(#409)
Changed
- Path to a metabase can now be reloaded with a SIGHUP (#1869)
Fixed
writecache.max_object_size
is now correctly handled (#1925)- Correctly handle setting ONLINE netmap status after maintenance (#1922)
- Correctly reset shard errors in
ControlService.SetShardMode
RPC (#1931) - Setting node's network state to
MAINTENANCE
while network settings forbid it (#1916) - Do not panic during API client creation (#1936)
- Correctly sign new epoch transaction in neofs-adm for a committee of more than 4 nodes (#1949)
- Inability to provide session to NeoFS CLI in a NeoFS-binary format (#1933)
neofs-adm
now works correctly with a committee of more than 4 nodes (#1949, #1959)- Closing a shard now waits until GC background workers stop (#1964)
- Make it possible to use
shard.ContainerSize
in read-only mode (#1975) - Storage node now starts if at least one gRPC endpoint is available (#1893)
- Panic in API multy client (#1961)
- Blobstor object removal log messages (#1953)
- Missing object relatives in object removal session opened by NeoFS CLI (#1978)
- Bringing a node back online during maintenance (#1900)
Updated
neo-go
tov0.99.4
protoc
tov3.21.7
neofs-sdk
tov1.0.0-rc.7
Updating from v0.33.0
Now storage node serves Control API SetNemapStatus
request with MAINTENANCE
status only if the mode is allowed in the network settings. To force starting the localmaintenance on the node, provide --force
flag to the neofs-cli control set-status
command.