mirror of
https://github.com/nspcc-dev/neofs-node.git
synced 2026-03-01 04:29:10 +00:00
Cannot PUT object to node which have no space left even policy allow it #738
Labels
No labels
I1
I2
I3
I4
S0
S1
S2
S3
S4
U0
U1
U2
U3
U4
blocked
bug
config
dependencies
discussion
documentation
enhancement
enhancement
epic
feature
go
good first issue
help wanted
neofs-adm
neofs-cli
neofs-cli
neofs-cli
neofs-ir
neofs-lens
neofs-storage
neofs-storage
performance
question
security
task
test
windows
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nspcc-dev/neofs-node#738
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @anikeev-yadro on GitHub (Sep 9, 2022).
Expected Behavior
When we PUT object to node which have no space left, the object uploaded to other node trough internal interface
Current Behavior
When we PUT object to node which have no space left, we got the error "no space left"
Steps to Reproduce (for bugs)
Network map
Your Environment
Versions:
Server setup and configuration:
cloud, 4 VMs, 4 SN, 4 http qw, 4 s3 gw
Operating System and version (uname -a):
linux vedi 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64 GNU/Linux
@anikeev-yadro commented on GitHub (Sep 9, 2022):
bug_1773.zip
@anikeev-yadro commented on GitHub (Sep 9, 2022):
Because we found the mistake in policy string I have re-run test with following policy:
REP 2 IN NODES SELECT 2 FROM C AS NODES FILTER 'Country' EQ 'Russia' OR 'Country' EQ 'Finland' AS CSteps to reproduce:
1.Create container with policy to allow to store objects on nodes 1,2,4
2.Try to put object to node3 which have no space left on data device lead the error:
Logs:
no_space_left_bug.zip
@cthulhu-rider commented on GitHub (Sep 12, 2022):
The problem is described by
In order to exec PUT operation NeoFS CLI should be able to open NeoFS session with the storage node. Main session artifact - generated private key - requires some storage space. Currently there is no way to create in-memory session, so described behavior is expected.
I guess we should be able to provide support of in-memory sessions for such cases.
@cthulhu-rider commented on GitHub (Sep 13, 2022):
Currently (
neofs-node@v0.31.0) storage nodes can be configured to use in-memory sessions only.I suggest to consider supporting in-memory sessions at the request level.
@fyrchik @carpawell @realloc
@realloc commented on GitHub (Sep 13, 2022):
I'd suggest falling back to in-memory when the node is unable to persist token to the on-disk session store.
@carpawell commented on GitHub (Sep 13, 2022):
@cthulhu-rider, do you mean adding some flag to the request that forces a node to use in-mem sessions? and CLI should try a regular request and then try a request with that new flag in case of "no space left on device"?
Won't it lead to unexpected impossible-to-track results? Such as losing some sessions on restart. Seems like some migration process is required then. Moreover, do we need to be able to create sessions with a node that is not possible to put any objects?
@fyrchik commented on GitHub (Sep 13, 2022):
Falling back to in-memory sessions is bad from the user POV, I'd like the software to behave exactly as the configuration prescribes. May be we could add an option like:
on-overflow: refuse,on-overflow: use memory,on-overflow: drop oldestwithrefusebeing the default.@realloc commented on GitHub (Sep 13, 2022):
Having an option to allow fallback seems good. It should not become a surprise if it's seen from logs.
@cthulhu-rider commented on GitHub (Sep 13, 2022):
Not exactly. IMO, from the user side, server must not respond with status
OKon temporary stored session unless the user has explicitly specified it.According to this, node behavior can be implemented and configured in any of the proposed ways - API client should not depend on it.
@anikeev-yadro commented on GitHub (Sep 20, 2022):
In the original config all nodes had one disk with data, cache and metadata.
I had to reproduce with other config close to real life.
Node3 has 2 disks:
-first physical system disk with cache and metadata
-second physical disk with data
Data disk /dev/vdb has no space left.
Now I can PUT object to node if replication policy allow to create replicas on the other nodes.
But I cannot PUT object if replication policy disallow create other replicas. This is strange, because node has enough space in write cache.
@fyrchik commented on GitHub (Sep 20, 2022):
As we discussed with @anikeev-yadro , the problem here was possibly due to the default
writecache.capacityvalue.@anikeev-yadro commented on GitHub (Sep 21, 2022):
you are right, the put operation works fine while write cache has free space (not disk with write cache has free space).
@roman-khimov commented on GitHub (Oct 22, 2025):
Obsolete.