Streamline GetObject #494

Closed
opened 2025-12-28 17:37:35 +00:00 by sami · 0 comments
Owner

Originally created by @roman-khimov on GitHub (Feb 25, 2025).

Originally assigned to: @smallhive on GitHub.

I'm always frustrated when I'm looking at GetObject logic. It has huge potential for improvement. Currently is works this way:

  • SEARCHes for an appropriate object via searchAllVersionsInNeoFS()
  • HEADs it in headVersion()
  • processes headers for various purposes
  • SEARCHes for tagging object (most of the time it's not present)
  • SEARCHes for locking object (most of the time it's not present)
  • forms and writes response header
  • makes RANGE request and pipes the payload

Describe the solution you'd like

One search for everything. One get for everything. The only exception is range-based requests since there it'd be HEAD+RANGE, but these are minority obviously. It's all totally possible because:

  • the first search has to check for the same tagging and locking objects, it's just that we're losing this data for whatever reason and doing TWO more searches to get it again
  • HEAD can be avoided because it is possible to issue a GET request and get the same header for free effectively and then pipe the payload from the same request
Originally created by @roman-khimov on GitHub (Feb 25, 2025). Originally assigned to: @smallhive on GitHub. ## Is your feature request related to a problem? Please describe. I'm always frustrated when I'm looking at GetObject logic. It has huge potential for improvement. Currently is works this way: * SEARCHes for an appropriate object via `searchAllVersionsInNeoFS()` * HEADs it in `headVersion()` * processes headers for various purposes * SEARCHes for tagging object (most of the time it's not present) * SEARCHes for locking object (most of the time it's not present) * forms and writes response header * makes RANGE request and pipes the payload ## Describe the solution you'd like One search for everything. One get for everything. The only exception is range-based requests since there it'd be HEAD+RANGE, but these are minority obviously. It's all totally possible because: * the first search has to check for the same tagging and locking objects, it's just that we're losing this data for whatever reason and doing TWO more searches to get it again * HEAD can be avoided because it is possible to issue a GET request and get the same header for free effectively and then pipe the payload from the same request
sami 2025-12-28 17:37:35 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nspcc-dev/neofs-s3-gw#494
No description provided.