commit
c224470d98
36 changed files with 179 additions and 90 deletions
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
|
@ -1 +0,0 @@
|
||||||
* @alexvanin @realloc @fyrchik @anatoly-bogatyrev
|
|
36
.github/workflows/buf.yml
vendored
36
.github/workflows/buf.yml
vendored
|
@ -1,36 +0,0 @@
|
||||||
name: Buf lint
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: wizhi/setup-buf@v1
|
|
||||||
with:
|
|
||||||
version: 0.20.5
|
|
||||||
- run: buf check lint
|
|
||||||
|
|
||||||
breaking:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- name: Setup buf
|
|
||||||
uses: wizhi/setup-buf@v1
|
|
||||||
with:
|
|
||||||
version: 0.20.5
|
|
||||||
- name: Check out ref code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
ref: ${{ github.base_ref }}
|
|
||||||
path: baseref
|
|
||||||
- run: cd baseref && buf image build -o image.bin
|
|
||||||
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
path: prclone
|
|
||||||
- run: cd prclone && buf check breaking --against-input ../baseref/image.bin
|
|
21
.github/workflows/dco.yml
vendored
21
.github/workflows/dco.yml
vendored
|
@ -1,21 +0,0 @@
|
||||||
name: DCO check
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
commits_check_job:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: Commits Check
|
|
||||||
steps:
|
|
||||||
- name: Get PR Commits
|
|
||||||
id: 'get-pr-commits'
|
|
||||||
uses: tim-actions/get-pr-commits@master
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: DCO Check
|
|
||||||
uses: tim-actions/dco@master
|
|
||||||
with:
|
|
||||||
commits: ${{ steps.get-pr-commits.outputs.commits }}
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [3.0] - 2024-10-08 - Potanin Glacier
|
## [3.0] - 2025-04-21 - Potanin Glacier
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Version compatibility information
|
- Version compatibility information
|
||||||
|
|
3
CODEOWNERS
Normal file
3
CODEOWNERS
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.* @alexvanin @realloc @fyrchik @a.bogatyrev @TrueCloudLab/storage-sdk-developers
|
||||||
|
.forgejo/.* @potyarkin
|
||||||
|
Makefile @potyarkin
|
|
@ -94,7 +94,7 @@ $ git push origin feature/123-something_awesome
|
||||||
```
|
```
|
||||||
|
|
||||||
### Create a Pull Request
|
### Create a Pull Request
|
||||||
Pull requests can be created via GitHub. Refer to [this
|
Pull requests can be created via git.frostfs.info. Refer to [this
|
||||||
document](https://help.github.com/articles/creating-a-pull-request/) for
|
document](https://help.github.com/articles/creating-a-pull-request/) for
|
||||||
detailed steps on how to create a pull request. After a Pull Request gets peer
|
detailed steps on how to create a pull request. After a Pull Request gets peer
|
||||||
reviewed and approved, it will be merged.
|
reviewed and approved, it will be merged.
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -12,7 +12,7 @@ doc:
|
||||||
@for f in `find . -type f -name '*.proto' -exec dirname {} \; | sort -u `; do \
|
@for f in `find . -type f -name '*.proto' -exec dirname {} \; | sort -u `; do \
|
||||||
echo "⇒ Documentation for $$(basename $$f)"; \
|
echo "⇒ Documentation for $$(basename $$f)"; \
|
||||||
protoc \
|
protoc \
|
||||||
--doc_opt=.github/markdown.tmpl,$${f}.md \
|
--doc_opt=.forgejo/markdown.tmpl,$${f}.md \
|
||||||
--proto_path=.:/usr/local/include \
|
--proto_path=.:/usr/local/include \
|
||||||
--doc_out=proto-docs/ $${f}/*.proto; \
|
--doc_out=proto-docs/ $${f}/*.proto; \
|
||||||
done
|
done
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="./.github/logo.svg" width="500px" alt="FrostFS">
|
<img src="./.forgejo/logo.svg" width="500px" alt="FrostFS">
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://frostfs.info">FrostFS</a> API language-agnostic protocol definitions
|
<a href="https://frostfs.info">FrostFS</a> API language-agnostic protocol definitions
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.accounting;
|
package frost.fs.accounting;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.accounting;
|
package frost.fs.accounting;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.acl;
|
package frost.fs.acl;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.ape;
|
package frost.fs.ape;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.apemanager;
|
package frost.fs.apemanager;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,11 @@
|
||||||
"v3.0": {
|
"v3.0": {
|
||||||
"compatibility": "SUPPORTED"
|
"compatibility": "SUPPORTED"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"ListStream": {
|
||||||
|
"v3.0": {
|
||||||
|
"compatibility": "SUPPORTED"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.container;
|
package frost.fs.container;
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ service ContainerService {
|
||||||
// access to container is denied.
|
// access to container is denied.
|
||||||
rpc Get(GetRequest) returns (GetResponse);
|
rpc Get(GetRequest) returns (GetResponse);
|
||||||
|
|
||||||
// Returns all owner's containers from 'Container` smart contract' storage.
|
// Returns all owner's containers from `Container` smart contract storage.
|
||||||
//
|
//
|
||||||
// Statuses:
|
// Statuses:
|
||||||
// - **OK** (0, SECTION_SUCCESS): \
|
// - **OK** (0, SECTION_SUCCESS): \
|
||||||
|
@ -58,6 +58,17 @@ service ContainerService {
|
||||||
// - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
|
// - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
|
||||||
// container list access denied.
|
// container list access denied.
|
||||||
rpc List(ListRequest) returns (ListResponse);
|
rpc List(ListRequest) returns (ListResponse);
|
||||||
|
|
||||||
|
// Returns all owner's containers from `Container` smart contract storage
|
||||||
|
// via stream.
|
||||||
|
//
|
||||||
|
// Statuses:
|
||||||
|
// - **OK** (0, SECTION_SUCCESS): \
|
||||||
|
// container list has been successfully read;
|
||||||
|
// - Common failures (SECTION_FAILURE_COMMON);
|
||||||
|
// - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
|
||||||
|
// container list access denied.
|
||||||
|
rpc ListStream(ListStreamRequest) returns (stream ListStreamResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// New FrostFS Container creation request
|
// New FrostFS Container creation request
|
||||||
|
@ -242,3 +253,44 @@ message ListResponse {
|
||||||
// transmission.
|
// transmission.
|
||||||
frost.fs.session.ResponseVerificationHeader verify_header = 3;
|
frost.fs.session.ResponseVerificationHeader verify_header = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// List containers stream
|
||||||
|
message ListStreamRequest {
|
||||||
|
// List containers stream request body.
|
||||||
|
message Body {
|
||||||
|
// Identifier of the container owner.
|
||||||
|
frost.fs.refs.OwnerID owner_id = 1;
|
||||||
|
}
|
||||||
|
// Body of list containers stream request message.
|
||||||
|
Body body = 1;
|
||||||
|
|
||||||
|
// Carries request meta information. Header data is used only to regulate
|
||||||
|
// message transport and does not affect request execution.
|
||||||
|
frost.fs.session.RequestMetaHeader meta_header = 2;
|
||||||
|
|
||||||
|
// Carries request verification information. This header is used to
|
||||||
|
// authenticate the nodes of the message route and check the correctness of
|
||||||
|
// transmission.
|
||||||
|
frost.fs.session.RequestVerificationHeader verify_header = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// List containers stream
|
||||||
|
message ListStreamResponse {
|
||||||
|
// List containers stream response body.
|
||||||
|
message Body {
|
||||||
|
// List of `ContainerID`s belonging to the requested `OwnerID`
|
||||||
|
repeated refs.ContainerID container_ids = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Body of list containers stream response message.
|
||||||
|
Body body = 1;
|
||||||
|
|
||||||
|
// Carries response meta information. Header data is used only to regulate
|
||||||
|
// message transport and does not affect request execution.
|
||||||
|
frost.fs.session.ResponseMetaHeader meta_header = 2;
|
||||||
|
|
||||||
|
// Carries response verification information. This header is used to
|
||||||
|
// authenticate the nodes of the message route and check the correctness of
|
||||||
|
// transmission.
|
||||||
|
frost.fs.session.ResponseVerificationHeader verify_header = 3;
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.container;
|
package frost.fs.container;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ Add an entry to the CHANGELOG.md following the style established there.
|
||||||
Add a codename for releases with the new major version, version and release date in
|
Add a codename for releases with the new major version, version and release date in
|
||||||
the heading. Write a paragraph describing the most significant changes done in
|
the heading. Write a paragraph describing the most significant changes done in
|
||||||
this release. Then add sections with what has been added, changed and removed,
|
this release. Then add sections with what has been added, changed and removed,
|
||||||
describing each change briefly with a reference to GitHub issues, where
|
describing each change briefly with a reference to issues, where
|
||||||
available.
|
available.
|
||||||
|
|
||||||
## Release commit
|
## Release commit
|
||||||
|
@ -40,7 +40,7 @@ Release v3.0 - Anmyeondo (안면도, 安眠島)
|
||||||
Use `vX.Y` tag (milestone version with patch). For pre-release
|
Use `vX.Y` tag (milestone version with patch). For pre-release
|
||||||
versions use `vX.Y-rc.N` scheme.
|
versions use `vX.Y-rc.N` scheme.
|
||||||
|
|
||||||
## Push changes and release tag to Github
|
## Push changes and release tag to repository
|
||||||
|
|
||||||
This step should bypass the default PR mechanism to get a correct result (so
|
This step should bypass the default PR mechanism to get a correct result (so
|
||||||
that releasing requires admin privileges for the project), both the `master`
|
that releasing requires admin privileges for the project), both the `master`
|
||||||
|
@ -50,9 +50,9 @@ branch update and tag must be pushed simultaneously like this:
|
||||||
$ git push origin master v2.7
|
$ git push origin master v2.7
|
||||||
```
|
```
|
||||||
|
|
||||||
## Make a proper Github release
|
## Make a proper release
|
||||||
|
|
||||||
Edit an automatically-created release on Github.
|
Edit an automatically-created release on git.frostfs.info
|
||||||
|
|
||||||
Release title has to follow `<version> <Romanized codename> (<Hangeul, Hanja
|
Release title has to follow `<version> <Romanized codename> (<Hangeul, Hanja
|
||||||
codename> )` scheme for major releases and just `<version>` for regular point
|
codename> )` scheme for major releases and just `<version>` for regular point
|
||||||
|
@ -60,5 +60,5 @@ releases.
|
||||||
|
|
||||||
## Post-release actions
|
## Post-release actions
|
||||||
|
|
||||||
* Close corresponding X.Y Github milestone
|
* Close corresponding X.Y milestone
|
||||||
* Make announcements in Matrix and Discord channels
|
* Make announcements in Matrix and Discord channels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.lock;
|
package frost.fs.lock;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.netmap;
|
package frost.fs.netmap;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.netmap;
|
package frost.fs.netmap;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.object;
|
package frost.fs.object;
|
||||||
|
|
||||||
|
@ -116,6 +116,9 @@ service ObjectService {
|
||||||
// returned. If `main_only` request field is set, the short header with only
|
// returned. If `main_only` request field is set, the short header with only
|
||||||
// the very minimal information will be returned instead.
|
// the very minimal information will be returned instead.
|
||||||
//
|
//
|
||||||
|
// Max header size is currently not limited by this API, but may be restricted
|
||||||
|
// on the service level. By default, gRPC uses a message size of 4 MiB.
|
||||||
|
//
|
||||||
// Extended headers can change `Head` behaviour:
|
// Extended headers can change `Head` behaviour:
|
||||||
// * [ __SYSTEM__NETMAP_EPOCH ] \
|
// * [ __SYSTEM__NETMAP_EPOCH ] \
|
||||||
// Will use the requested version of Network Map for object placement
|
// Will use the requested version of Network Map for object placement
|
||||||
|
@ -554,6 +557,7 @@ message HeadResponse {
|
||||||
ShortHeader short_header = 2;
|
ShortHeader short_header = 2;
|
||||||
|
|
||||||
// Meta information of split hierarchy.
|
// Meta information of split hierarchy.
|
||||||
|
// Indicates that the object is virtual, manual assembly is required.
|
||||||
SplitInfo split_info = 3;
|
SplitInfo split_info = 3;
|
||||||
|
|
||||||
// Meta information for EC object assembly.
|
// Meta information for EC object assembly.
|
||||||
|
@ -871,6 +875,10 @@ message PatchRequest {
|
||||||
// key, then it just replaces it while merging the lists.
|
// key, then it just replaces it while merging the lists.
|
||||||
bool replace_attributes = 3;
|
bool replace_attributes = 3;
|
||||||
|
|
||||||
|
// New split header for the object. This defines how the object will relate
|
||||||
|
// to other objects in a split operation.
|
||||||
|
frost.fs.object.Header.Split new_split_header = 5;
|
||||||
|
|
||||||
// The patch for the object's payload.
|
// The patch for the object's payload.
|
||||||
message Patch {
|
message Patch {
|
||||||
// The range of the source object for which the payload is replaced by the
|
// The range of the source object for which the payload is replaced by the
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.object;
|
package frost.fs.object;
|
||||||
|
|
||||||
|
@ -132,7 +132,8 @@ message Header {
|
||||||
// * Name \
|
// * Name \
|
||||||
// Human-friendly name
|
// Human-friendly name
|
||||||
// * FileName \
|
// * FileName \
|
||||||
// File name to be associated with the object on saving
|
// File name to be associated with the object on saving. FileName must not
|
||||||
|
// contain the delimiting symbol '/'.
|
||||||
// * FilePath \
|
// * FilePath \
|
||||||
// Full path to be associated with the object on saving. Should start with a
|
// Full path to be associated with the object on saving. Should start with a
|
||||||
// '/' and use '/' as a delimiting symbol. Trailing '/' should be
|
// '/' and use '/' as a delimiting symbol. Trailing '/' should be
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
- [ListRequest.Body](#frost.fs.container.ListRequest.Body)
|
- [ListRequest.Body](#frost.fs.container.ListRequest.Body)
|
||||||
- [ListResponse](#frost.fs.container.ListResponse)
|
- [ListResponse](#frost.fs.container.ListResponse)
|
||||||
- [ListResponse.Body](#frost.fs.container.ListResponse.Body)
|
- [ListResponse.Body](#frost.fs.container.ListResponse.Body)
|
||||||
|
- [ListStreamRequest](#frost.fs.container.ListStreamRequest)
|
||||||
|
- [ListStreamRequest.Body](#frost.fs.container.ListStreamRequest.Body)
|
||||||
|
- [ListStreamResponse](#frost.fs.container.ListStreamResponse)
|
||||||
|
- [ListStreamResponse.Body](#frost.fs.container.ListStreamResponse.Body)
|
||||||
- [PutRequest](#frost.fs.container.PutRequest)
|
- [PutRequest](#frost.fs.container.PutRequest)
|
||||||
- [PutRequest.Body](#frost.fs.container.PutRequest.Body)
|
- [PutRequest.Body](#frost.fs.container.PutRequest.Body)
|
||||||
- [PutResponse](#frost.fs.container.PutResponse)
|
- [PutResponse](#frost.fs.container.PutResponse)
|
||||||
|
@ -58,6 +62,7 @@ rpc Put(PutRequest) returns (PutResponse);
|
||||||
rpc Delete(DeleteRequest) returns (DeleteResponse);
|
rpc Delete(DeleteRequest) returns (DeleteResponse);
|
||||||
rpc Get(GetRequest) returns (GetResponse);
|
rpc Get(GetRequest) returns (GetResponse);
|
||||||
rpc List(ListRequest) returns (ListResponse);
|
rpc List(ListRequest) returns (ListResponse);
|
||||||
|
rpc ListStream(ListStreamRequest) returns (stream ListStreamResponse);
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -113,7 +118,7 @@ Statuses:
|
||||||
| Get | [GetRequest](#frost.fs.container.GetRequest) | [GetResponse](#frost.fs.container.GetResponse) |
|
| Get | [GetRequest](#frost.fs.container.GetRequest) | [GetResponse](#frost.fs.container.GetResponse) |
|
||||||
#### Method List
|
#### Method List
|
||||||
|
|
||||||
Returns all owner's containers from 'Container` smart contract' storage.
|
Returns all owner's containers from `Container` smart contract storage.
|
||||||
|
|
||||||
Statuses:
|
Statuses:
|
||||||
- **OK** (0, SECTION_SUCCESS): \
|
- **OK** (0, SECTION_SUCCESS): \
|
||||||
|
@ -125,6 +130,21 @@ Statuses:
|
||||||
| Name | Input | Output |
|
| Name | Input | Output |
|
||||||
| ---- | ----- | ------ |
|
| ---- | ----- | ------ |
|
||||||
| List | [ListRequest](#frost.fs.container.ListRequest) | [ListResponse](#frost.fs.container.ListResponse) |
|
| List | [ListRequest](#frost.fs.container.ListRequest) | [ListResponse](#frost.fs.container.ListResponse) |
|
||||||
|
#### Method ListStream
|
||||||
|
|
||||||
|
Returns all owner's containers from `Container` smart contract storage
|
||||||
|
via stream.
|
||||||
|
|
||||||
|
Statuses:
|
||||||
|
- **OK** (0, SECTION_SUCCESS): \
|
||||||
|
container list has been successfully read;
|
||||||
|
- Common failures (SECTION_FAILURE_COMMON);
|
||||||
|
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
|
||||||
|
container list access denied.
|
||||||
|
|
||||||
|
| Name | Input | Output |
|
||||||
|
| ---- | ----- | ------ |
|
||||||
|
| ListStream | [ListStreamRequest](#frost.fs.container.ListStreamRequest) | [ListStreamResponse](#frost.fs.container.ListStreamResponse) |
|
||||||
<!-- end services -->
|
<!-- end services -->
|
||||||
|
|
||||||
|
|
||||||
|
@ -276,6 +296,54 @@ List containers response body.
|
||||||
| container_ids | [frost.fs.refs.ContainerID](#frost.fs.refs.ContainerID) | repeated | List of `ContainerID`s belonging to the requested `OwnerID` |
|
| container_ids | [frost.fs.refs.ContainerID](#frost.fs.refs.ContainerID) | repeated | List of `ContainerID`s belonging to the requested `OwnerID` |
|
||||||
|
|
||||||
|
|
||||||
|
<a name="frost.fs.container.ListStreamRequest"></a>
|
||||||
|
|
||||||
|
### Message ListStreamRequest
|
||||||
|
List containers stream
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| body | [ListStreamRequest.Body](#frost.fs.container.ListStreamRequest.Body) | | Body of list containers stream request message. |
|
||||||
|
| meta_header | [frost.fs.session.RequestMetaHeader](#frost.fs.session.RequestMetaHeader) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
|
||||||
|
| verify_header | [frost.fs.session.RequestVerificationHeader](#frost.fs.session.RequestVerificationHeader) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
|
||||||
|
|
||||||
|
|
||||||
|
<a name="frost.fs.container.ListStreamRequest.Body"></a>
|
||||||
|
|
||||||
|
### Message ListStreamRequest.Body
|
||||||
|
List containers stream request body.
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| owner_id | [frost.fs.refs.OwnerID](#frost.fs.refs.OwnerID) | | Identifier of the container owner. |
|
||||||
|
|
||||||
|
|
||||||
|
<a name="frost.fs.container.ListStreamResponse"></a>
|
||||||
|
|
||||||
|
### Message ListStreamResponse
|
||||||
|
List containers stream
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| body | [ListStreamResponse.Body](#frost.fs.container.ListStreamResponse.Body) | | Body of list containers stream response message. |
|
||||||
|
| meta_header | [frost.fs.session.ResponseMetaHeader](#frost.fs.session.ResponseMetaHeader) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
|
||||||
|
| verify_header | [frost.fs.session.ResponseVerificationHeader](#frost.fs.session.ResponseVerificationHeader) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
|
||||||
|
|
||||||
|
|
||||||
|
<a name="frost.fs.container.ListStreamResponse.Body"></a>
|
||||||
|
|
||||||
|
### Message ListStreamResponse.Body
|
||||||
|
List containers stream response body.
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| container_ids | [frost.fs.refs.ContainerID](#frost.fs.refs.ContainerID) | repeated | List of `ContainerID`s belonging to the requested `OwnerID` |
|
||||||
|
|
||||||
|
|
||||||
<a name="frost.fs.container.PutRequest"></a>
|
<a name="frost.fs.container.PutRequest"></a>
|
||||||
|
|
||||||
### Message PutRequest
|
### Message PutRequest
|
||||||
|
|
|
@ -218,6 +218,9 @@ Returns the object Headers without data payload. By default full header is
|
||||||
returned. If `main_only` request field is set, the short header with only
|
returned. If `main_only` request field is set, the short header with only
|
||||||
the very minimal information will be returned instead.
|
the very minimal information will be returned instead.
|
||||||
|
|
||||||
|
Max header size is currently not limited by this API, but may be restricted
|
||||||
|
on the service level. By default, gRPC uses a message size of 4 MiB.
|
||||||
|
|
||||||
Extended headers can change `Head` behaviour:
|
Extended headers can change `Head` behaviour:
|
||||||
* [ __SYSTEM__NETMAP_EPOCH ] \
|
* [ __SYSTEM__NETMAP_EPOCH ] \
|
||||||
Will use the requested version of Network Map for object placement
|
Will use the requested version of Network Map for object placement
|
||||||
|
@ -715,7 +718,7 @@ Object HEAD response body
|
||||||
| ----- | ---- | ----- | ----------- |
|
| ----- | ---- | ----- | ----------- |
|
||||||
| header | [HeaderWithSignature](#frost.fs.object.HeaderWithSignature) | | Full object's `Header` with `ObjectID` signature |
|
| header | [HeaderWithSignature](#frost.fs.object.HeaderWithSignature) | | Full object's `Header` with `ObjectID` signature |
|
||||||
| short_header | [ShortHeader](#frost.fs.object.ShortHeader) | | Short object header |
|
| short_header | [ShortHeader](#frost.fs.object.ShortHeader) | | Short object header |
|
||||||
| split_info | [SplitInfo](#frost.fs.object.SplitInfo) | | Meta information of split hierarchy. |
|
| split_info | [SplitInfo](#frost.fs.object.SplitInfo) | | Meta information of split hierarchy. Indicates that the object is virtual, manual assembly is required. |
|
||||||
| ec_info | [ECInfo](#frost.fs.object.ECInfo) | | Meta information for EC object assembly. |
|
| ec_info | [ECInfo](#frost.fs.object.ECInfo) | | Meta information for EC object assembly. |
|
||||||
|
|
||||||
|
|
||||||
|
@ -763,6 +766,7 @@ PATCH request body
|
||||||
| replace_attributes | [bool](#bool) | | If this flag is set, then the object's attributes will be entirely replaced by `new_attributes` list. The empty `new_attributes` list with `replace_attributes = true` just resets attributes list for the object.
|
| replace_attributes | [bool](#bool) | | If this flag is set, then the object's attributes will be entirely replaced by `new_attributes` list. The empty `new_attributes` list with `replace_attributes = true` just resets attributes list for the object.
|
||||||
|
|
||||||
Default `false` value for this flag means the attributes will be just merged. If the incoming `new_attributes` list contains already existing key, then it just replaces it while merging the lists. |
|
Default `false` value for this flag means the attributes will be just merged. If the incoming `new_attributes` list contains already existing key, then it just replaces it while merging the lists. |
|
||||||
|
| new_split_header | [Header.Split](#frost.fs.object.Header.Split) | | New split header for the object. This defines how the object will relate to other objects in a split operation. |
|
||||||
| patch | [PatchRequest.Body.Patch](#frost.fs.object.PatchRequest.Body.Patch) | | The patch that is applied for the object. |
|
| patch | [PatchRequest.Body.Patch](#frost.fs.object.PatchRequest.Body.Patch) | | The patch that is applied for the object. |
|
||||||
|
|
||||||
|
|
||||||
|
@ -1133,7 +1137,8 @@ And some well-known attributes used by applications only:
|
||||||
* Name \
|
* Name \
|
||||||
Human-friendly name
|
Human-friendly name
|
||||||
* FileName \
|
* FileName \
|
||||||
File name to be associated with the object on saving
|
File name to be associated with the object on saving. FileName must not
|
||||||
|
contain the delimiting symbol '/'.
|
||||||
* FilePath \
|
* FilePath \
|
||||||
Full path to be associated with the object on saving. Should start with a
|
Full path to be associated with the object on saving. Should start with a
|
||||||
'/' and use '/' as a delimiting symbol. Trailing '/' should be
|
'/' and use '/' as a delimiting symbol. Trailing '/' should be
|
||||||
|
|
|
@ -102,6 +102,7 @@ Section of failed statuses independent of the operation.
|
||||||
| SIGNATURE_VERIFICATION_FAIL | 2 | [**1026**] Signature verification failure. |
|
| SIGNATURE_VERIFICATION_FAIL | 2 | [**1026**] Signature verification failure. |
|
||||||
| NODE_UNDER_MAINTENANCE | 3 | [**1027**] Node is under maintenance. |
|
| NODE_UNDER_MAINTENANCE | 3 | [**1027**] Node is under maintenance. |
|
||||||
| INVALID_ARGUMENT | 4 | [**1028**] Invalid argument error. If the server fails on validation of a request parameter as the client sent it incorrectly, then this code should be used. |
|
| INVALID_ARGUMENT | 4 | [**1028**] Invalid argument error. If the server fails on validation of a request parameter as the client sent it incorrectly, then this code should be used. |
|
||||||
|
| RESOURCE_EXHAUSTED | 5 | [**1029**] Resource exhausted failure. This code should be used if the operation cannot be performed due to a lack of resources. |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.refs;
|
package frost.fs.refs;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.session;
|
package frost.fs.session;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.session;
|
package frost.fs.session;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.status;
|
package frost.fs.status;
|
||||||
|
|
||||||
|
@ -106,6 +106,10 @@ enum CommonFail {
|
||||||
// request parameter as the client sent it incorrectly, then this code should
|
// request parameter as the client sent it incorrectly, then this code should
|
||||||
// be used.
|
// be used.
|
||||||
INVALID_ARGUMENT = 4;
|
INVALID_ARGUMENT = 4;
|
||||||
|
|
||||||
|
// [**1029**] Resource exhausted failure. This code should be used
|
||||||
|
// if the operation cannot be performed due to a lack of resources.
|
||||||
|
RESOURCE_EXHAUSTED = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Section of statuses for object-related operations.
|
// Section of statuses for object-related operations.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
syntax = "proto3";
|
edition = "2023";
|
||||||
|
|
||||||
package frost.fs.tombstone;
|
package frost.fs.tombstone;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"milestone": 3,
|
"milestone": 3,
|
||||||
"patch": 0,
|
"patch": 0,
|
||||||
"date": "2024-10-08"
|
"date": "2025-04-21"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue