Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions object/service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -271,10 +271,22 @@ service ObjectService {
// The query for a parent object's EC part locally stored on the server is
// specified as follows:
// - `body.address` is an address of the parent;
// - `meta_header.x_headers` includes `__NEOFS__EC_RULE_IDX` and
// `__NEOFS__EC_PART_IDX` by object attribute format. Rule index MUST NOT
// exceed container's `PlacementPolicy.ec_rules` list. Part index MUST NOT
// exceed total part number in the indexed rule.
// - `meta_header.x_headers` includes `__NEOFS__EC_RULE_IDX` by object

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not do the same for GetRange?

@carpawell carpawell Jun 22, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as i stated in the thread above: i am afraid that we will have many problems with undefined requests (no part index x-headers) returning objects if no header is received in the same request (any GETRANGE/GET with range and payload_only) is not safe cause it is impossible to know what exact object was handled

// attribute format. Rule index MUST NOT exceed container's
// `PlacementPolicy.ec_rules` list.
// If `__NEOFS__EC_PART_IDX` is also included in X-headers, node returns
// corresponding part. Part index MUST NOT exceed total part number in the
// indexed rule. If index is unspecified:
// - if there is a single part in storage node: it is returned;
// - if there is more than a single part: the appropriate part for the
// current storage node (according to the actual Network map) is returned;
// if storage node does not have the appropriate part, the lowest index
// part it has is returned;
// - if `body.payload_only` is set to `true`, response's
// `meta_header.x_headers` MUST include `__NEOFS__EC_PART_IDX` in the same
// form to identify returned object part;
// - if `body.range` is specified, error is returned, meaning any ranged GET
// MUST have `__NEOFS__EC_PART_IDX` set.
// In this case, if `body.address` refers to TOMBSTONE or LOCK object (which
// cannot have EC parts), the query applies to it.
message GetRequest {
Expand Down
20 changes: 16 additions & 4 deletions proto-docs/object.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,10 +556,22 @@ GET object request.
The query for a parent object's EC part locally stored on the server is
specified as follows:
- `body.address` is an address of the parent;
- `meta_header.x_headers` includes `__NEOFS__EC_RULE_IDX` and
`__NEOFS__EC_PART_IDX` by object attribute format. Rule index MUST NOT
exceed container's `PlacementPolicy.ec_rules` list. Part index MUST NOT
exceed total part number in the indexed rule.
- `meta_header.x_headers` includes `__NEOFS__EC_RULE_IDX` by object
attribute format. Rule index MUST NOT exceed container's
`PlacementPolicy.ec_rules` list.
If `__NEOFS__EC_PART_IDX` is also included in X-headers, node returns
corresponding part. Part index MUST NOT exceed total part number in the
indexed rule. If index is unspecified:
- if there is a single part in storage node: it is returned;
- if there is more than a single part: the appropriate part for the
current storage node (according to the actual Network map) is returned;
if storage node does not have the appropriate part, the lowest index
part it has is returned;
- if `body.payload_only` is set to `true`, response's
`meta_header.x_headers` MUST include `__NEOFS__EC_PART_IDX` in the same
form to identify returned object part;
- if `body.range` is specified, error is returned, meaning any ranged GET
MUST have `__NEOFS__EC_PART_IDX` set.
In this case, if `body.address` refers to TOMBSTONE or LOCK object (which
cannot have EC parts), the query applies to it.

Expand Down
Loading