Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impossible to put big object via non-container node without HEAD allowed #2909

Closed
carpawell opened this issue Aug 6, 2024 · 3 comments · Fixed by #2913
Closed

Impossible to put big object via non-container node without HEAD allowed #2909

carpawell opened this issue Aug 6, 2024 · 3 comments · Fixed by #2913
Assignees
Labels
bug Something isn't working I4 No visible changes S4 Routine U2 Seriously planned
Milestone

Comments

@carpawell
Copy link
Member

After split V2 scheme adoption, every big object PUT requires to HEAD the first part. If it is denied by container policy, the whole PUT fails. However, this operation does not look like smth strange and the system should allow this behaviour.

Expected Behavior

PUT big object through a non-container node to a container with HEAD denied to others should work OK.

Current Behavior

Returns 2048 error (access denied).

Possible Solution

Do not check ACL objects if a node is not expected to store an object (does not belong to a container). Even for session cases it splits and signs an object and tries to PUT it to a container node. If it does not pass ACL checks, then it is what it is, return error it gets.
Also, re-checks, that if an object is signed (completed, PUT-without-session case), it is just forwarded to a container node; this code does not work usually (or maybe not used at all since it was written).

Steps to Reproduce (for bugs)

Run nspcc-dev/neofs-s3-gw#969 test case, see errors.

Context

nspcc-dev/neofs-s3-gw#969 PUTs objects via SDK's Pool. It uses every node it has, however only 3/4 nodes belong to the test container, so every time part it PUT to a non-container node, the test fails.

Regression

Yes, split V2.

@carpawell carpawell added the bug Something isn't working label Aug 6, 2024
@carpawell carpawell self-assigned this Aug 6, 2024
@carpawell
Copy link
Member Author

@roman-khimov, @cthulhu-rider, validate the whole description, and this essentially:

Do not check ACL objects if a node is not expected to store an object (does not belong to a container).

Not sure if this is true for big objects or for all objects in general.

@roman-khimov roman-khimov added this to the v0.43.0 milestone Aug 7, 2024
@roman-khimov roman-khimov added U2 Seriously planned S4 Routine I4 No visible changes labels Aug 7, 2024
@roman-khimov
Copy link
Member

Only when you can't check it (pieces of a big object). In all other cases it can easily be checked and things should fail fast.

@carpawell
Copy link
Member Author

Only when you can't check it (pieces of a big object)

OK, can be done, just did not want to treat some objects differently (it complicates code for not that often cases) compared to others (however, I do agree that it something can be done faster it should).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working I4 No visible changes S4 Routine U2 Seriously planned
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants