Compare commits
No commits in common. "master" and "master" have entirely different histories.
239 changed files with 9524 additions and 8355 deletions
|
@ -1,21 +0,0 @@
|
||||||
name: DCO action
|
|
||||||
on: [pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
dco:
|
|
||||||
name: DCO
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup Go
|
|
||||||
uses: actions/setup-go@v3
|
|
||||||
with:
|
|
||||||
go-version: '1.23'
|
|
||||||
|
|
||||||
- name: Run commit format checker
|
|
||||||
uses: https://git.frostfs.info/TrueCloudLab/dco-go@v3
|
|
||||||
with:
|
|
||||||
from: 'origin/${{ github.event.pull_request.base.ref }}'
|
|
|
@ -1,54 +0,0 @@
|
||||||
name: Tests and linters
|
|
||||||
on: [pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
name: Lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v3
|
|
||||||
with:
|
|
||||||
go-version: '1.23'
|
|
||||||
cache: true
|
|
||||||
|
|
||||||
- name: golangci-lint
|
|
||||||
uses: https://github.com/golangci/golangci-lint-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
|
|
||||||
tests:
|
|
||||||
name: Tests
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
go_versions: [ '1.22', '1.23' ]
|
|
||||||
fail-fast: false
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v3
|
|
||||||
with:
|
|
||||||
go-version: '${{ matrix.go_versions }}'
|
|
||||||
cache: true
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: make test
|
|
||||||
|
|
||||||
tests-race:
|
|
||||||
name: Tests with -race
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v3
|
|
||||||
with:
|
|
||||||
go-version: '1.23'
|
|
||||||
cache: true
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: go test ./... -count=1 -race
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
.idea
|
.idea
|
||||||
bin
|
bin
|
||||||
temp
|
temp
|
||||||
|
/vendor/
|
||||||
|
|
10
.gitlint
Normal file
10
.gitlint
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[general]
|
||||||
|
fail-without-commits=true
|
||||||
|
contrib=CC1
|
||||||
|
|
||||||
|
[title-match-regex]
|
||||||
|
regex=^\[\#[0-9]+\]\s
|
||||||
|
|
||||||
|
[ignore-by-title]
|
||||||
|
regex=^Release(.*)
|
||||||
|
ignore=title-match-regex
|
|
@ -4,16 +4,18 @@
|
||||||
# options for analysis running
|
# options for analysis running
|
||||||
run:
|
run:
|
||||||
# timeout for analysis, e.g. 30s, 5m, default is 1m
|
# timeout for analysis, e.g. 30s, 5m, default is 1m
|
||||||
timeout: 10m
|
timeout: 2m
|
||||||
|
|
||||||
# include test files or not, default is true
|
# include test files or not, default is true
|
||||||
tests: false
|
tests: false
|
||||||
|
|
||||||
|
skip-files:
|
||||||
|
- (^|.*/)grpc/(.*)
|
||||||
|
|
||||||
# output configuration options
|
# output configuration options
|
||||||
output:
|
output:
|
||||||
# colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
|
# colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
|
||||||
formats:
|
format: tab
|
||||||
- format: tab
|
|
||||||
|
|
||||||
# all available settings of specific linters
|
# all available settings of specific linters
|
||||||
linters-settings:
|
linters-settings:
|
||||||
|
@ -25,11 +27,6 @@ linters-settings:
|
||||||
govet:
|
govet:
|
||||||
# report about shadowed variables
|
# report about shadowed variables
|
||||||
check-shadowing: false
|
check-shadowing: false
|
||||||
funlen:
|
|
||||||
lines: 80 # default 60
|
|
||||||
statements: 60 # default 40
|
|
||||||
gocognit:
|
|
||||||
min-complexity: 40 # default 30
|
|
||||||
|
|
||||||
linters:
|
linters:
|
||||||
enable:
|
enable:
|
||||||
|
@ -40,34 +37,19 @@ linters:
|
||||||
# some default golangci-lint linters
|
# some default golangci-lint linters
|
||||||
- errcheck
|
- errcheck
|
||||||
- gosimple
|
- gosimple
|
||||||
- godot
|
|
||||||
- ineffassign
|
- ineffassign
|
||||||
- staticcheck
|
- staticcheck
|
||||||
- typecheck
|
- typecheck
|
||||||
- unused
|
|
||||||
|
|
||||||
# extra linters
|
# extra linters
|
||||||
- bidichk
|
|
||||||
- durationcheck
|
|
||||||
- exhaustive
|
- exhaustive
|
||||||
- copyloopvar
|
|
||||||
- gofmt
|
- gofmt
|
||||||
- goimports
|
|
||||||
- misspell
|
|
||||||
- predeclared
|
|
||||||
- reassign
|
|
||||||
- whitespace
|
- whitespace
|
||||||
- containedctx
|
- goimports
|
||||||
- funlen
|
|
||||||
- gocognit
|
|
||||||
- contextcheck
|
|
||||||
disable-all: true
|
disable-all: true
|
||||||
fast: false
|
fast: false
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
exclude-files:
|
|
||||||
- (^|.*/)grpc/(.*)
|
|
||||||
|
|
||||||
# Excluding configuration per-path, per-linter, per-text and per-source
|
# Excluding configuration per-path, per-linter, per-text and per-source
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
- path: v2 # ignore stutters in universal structures due to protobuf compatibility
|
- path: v2 # ignore stutters in universal structures due to protobuf compatibility
|
||||||
|
|
|
@ -18,25 +18,13 @@ repos:
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
exclude: ".key$"
|
exclude: ".key$"
|
||||||
|
|
||||||
- repo: local
|
|
||||||
hooks:
|
|
||||||
- id: gofumpt
|
|
||||||
name: gofumpt
|
|
||||||
entry: make fumpt
|
|
||||||
pass_filenames: false
|
|
||||||
types: [go]
|
|
||||||
language: system
|
|
||||||
|
|
||||||
- repo: local
|
|
||||||
hooks:
|
|
||||||
- id: go-unit-tests
|
|
||||||
name: go unit tests
|
|
||||||
entry: make test GOFLAGS=''
|
|
||||||
pass_filenames: false
|
|
||||||
types: [go]
|
|
||||||
language: system
|
|
||||||
|
|
||||||
- repo: https://github.com/golangci/golangci-lint
|
- repo: https://github.com/golangci/golangci-lint
|
||||||
rev: v1.60.3
|
rev: v1.51.2
|
||||||
hooks:
|
hooks:
|
||||||
- id: golangci-lint
|
- id: golangci-lint
|
||||||
|
|
||||||
|
- repo: https://github.com/jorisroovers/gitlint
|
||||||
|
rev: v0.18.0
|
||||||
|
hooks:
|
||||||
|
- id: gitlint
|
||||||
|
stages: [commit-msg]
|
||||||
|
|
860
CHANGELOG.md
860
CHANGELOG.md
|
@ -5,46 +5,852 @@
|
||||||
### Added
|
### Added
|
||||||
### Fixed
|
### Fixed
|
||||||
### Changed
|
### Changed
|
||||||
### Removed
|
|
||||||
### Updated
|
### Updated
|
||||||
|
|
||||||
## [2.16.0] - 2023-09-14 - Academy of Sciences Glacier
|
## [2.14.0] - 2022-10-17 - Anmado (안마도, 鞍馬島)
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Add impersonate flag to bearer token (#17)
|
- Maintenance status and node state (#415)
|
||||||
- `NOT` and `UNIQUE` keywords to the placement policy (#26)
|
- `NetmapSnapshot` RPC (#418)
|
||||||
- `PutSingle` RPC (#45)
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- Marshal repeated `[]byte` fields correctly (#413)
|
||||||
|
- Block until client connection is up (#419)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- `StableSize()` is optimized and no does no allocations (#49)
|
- Support new object session context format (#416)
|
||||||
- Marshaling code now uses `protowire` package (#50)
|
- Mark all expiration methods as deprecated (#417)
|
||||||
### Removed
|
|
||||||
- Reputation system (#21)
|
|
||||||
|
|
||||||
### Updated
|
### Updated
|
||||||
- `github.com/stretchr/testify` to `v1.8.3`
|
- Minimal go version to 1.17 (#412)
|
||||||
- `go.opentelemetry.io/otel` to `v1.15.1`
|
- `neofs-crypto` to `v0.4.0` (#412)
|
||||||
- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` to `v1.15.1`
|
- `google.golang.org/grpc` to `v1.48.0` (#415)
|
||||||
- `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` to `v1.15.1`
|
- `google.golang.org/protobuf` to `v1.28.0` (#415)
|
||||||
- `go.opentelemetry.io/otel/sdk` to `v1.15.1`
|
|
||||||
- `go.opentelemetry.io/otel/trace` to `v1.15.1`
|
|
||||||
- `golang.org/x/sync` to `v0.2.0`
|
|
||||||
- `google.golang.org/grpc` to `v1.55.0`
|
|
||||||
- `google.golang.org/protobuf` to `v1.30.0`
|
|
||||||
|
|
||||||
|
## [2.13.1] - 2022-08-01
|
||||||
## 2.15.0 - 2023-04-11
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Basic tracing support (#12)
|
- `EACL_NOT_FOUND` status code support (#409)
|
||||||
- Optimize signature checking (#3)
|
|
||||||
|
|
||||||
Initial public release.
|
## [2.13.0] - 2022-07-04 - Yeonpyeongdo (연평도, 延坪島)
|
||||||
|
|
||||||
## Older versions
|
NeoFS API v2.13 support
|
||||||
|
|
||||||
This project is a fork of [NeoFS](https://github.com/nspcc-dev/neofs-api-go) from version v2.14.0.
|
### Added
|
||||||
To see CHANGELOG for older versions, refer to https://github.com/nspcc-dev/neofs-api-go/blob/master/CHANGELOG.md.
|
- WalletConnect signature scheme (#386)
|
||||||
|
- `object.StatusOutOfRange` enum value (#407)
|
||||||
|
- Functionality to disable homomorphic hashing in container (#399)
|
||||||
|
- `status.SignatureVerificationFail` enum value (#405)
|
||||||
|
|
||||||
[Unreleased]: https://git.frostfs.info/TrueCloudLab/frostfs-api-go/compare/v2.16.0...master
|
## [2.12.2] - 2022-06-03
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `util/protogen` tool to compile Protocol Buffers with stable marshaling
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- `refs.ObjectIDNestedListMarshal` incorrect encoding (#401)
|
||||||
|
- incorrect conversion of `oneof` field in `GetRangeResponseBody.FromGRPCMessage` (#401)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Setters don't check call on `nil` (#388)
|
||||||
|
- `StableMarshal` methods don't return `error`
|
||||||
|
- `oneof` fields are now randomly initialized in test generators (#401)
|
||||||
|
|
||||||
|
## [2.12.1] - 2022-03-15
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Incompatible changes in signature scheme (#380)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Public URI-parsing function `client.ParseURI()` (#383)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Slices with pointers `[]*T` replaced with regular structure slices `[]T` in
|
||||||
|
v2 structures (#376)
|
||||||
|
|
||||||
|
## [2.12.0] - 2022-02-25 - Heuksando (흑산도, 黑山島)
|
||||||
|
|
||||||
|
NeoFS API v2.12 support
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Network magic field (`uint64`) to `session.RequestMetaHeader` (#367)
|
||||||
|
- Constants for attributes related to object notifications (#372)
|
||||||
|
- `refs.SignatureScheme` enum and corresponding field to `session.Signature` message (#55)
|
||||||
|
- New status codes in `container`, `object` and `session` packages (#371)
|
||||||
|
- `object.TypeLock` type enum value and `object.Lock` type of its content (#371)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- API of `signature` package (#55)
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
- `SessionToken`, `SessionTokenBody` and `SessionTokenContext` types from `session` package
|
||||||
|
|
||||||
|
## [2.11.1] - 2021-12-28
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Timeout for single message transmission in `rpc/client` (#366)
|
||||||
|
|
||||||
|
## [2.11.0] - 2021-12-02 - Sinjido (신지도, 薪智島)
|
||||||
|
|
||||||
|
NeoFS API v2.11 support. High level packages are moved to
|
||||||
|
[neofs-sdk-go](https://github.com/nspcc-dev/neofs-sdk-go) repository.
|
||||||
|
Repository restructured as Go module version 2 and synced with
|
||||||
|
[neofs-api](https://github.com/nspcc-dev/neofs-api) release version.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Protobuf recompile script handles path with special symbols correctly (#354)
|
||||||
|
- `make dep` command (#364)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Status codes in response messages (#350)
|
||||||
|
- Storage subnetwork types (#355, #356, #360, #362)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- neofs-api-go is now Go module version 2 (#201)
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- All packages from `pkg` moved to
|
||||||
|
[neofs-sdk-go](https://github.com/nspcc-dev/neofs-sdk-go) (#201)
|
||||||
|
|
||||||
|
## [1.30.0] - 2021-10-19 - Udo (우도, 牛島)
|
||||||
|
|
||||||
|
NeoFS API v2.10 support.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Potential NPE in NEO3Wallet related functions (#340)
|
||||||
|
- Incorrect return of reputation intermediate announcement (#342)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- pkg/client callback to parse internal response information (#337)
|
||||||
|
- Service filter type in extended ACL from API v2.10 (#338)
|
||||||
|
- Enhanced network info structures from API v2.10 (#339)
|
||||||
|
- Well-known public-append basic ACL constant (#341)
|
||||||
|
- Native contract names support (#351)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated grpc to v1.41.0 (#176)
|
||||||
|
|
||||||
|
## [1.29.0] - 2021-08-27 - Anmyeondo (안면도, 安眠島)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Well-known BasicACL constants to fit the specification (#330, #334).
|
||||||
|
- Linter warnings (#335).
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Support for `COMMON_PREFIX` filter operation for object attributes (#331).
|
||||||
|
- Missing well-known eACL filter setters (#333).
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- `FilterObjectParent` well-known object related filter key (#333).
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Go version to `1.16` (#335).
|
||||||
|
- Tests in CI to run on `1.16` and `1.17` Go versions (#335).
|
||||||
|
|
||||||
|
## [1.28.3] - 2021-07-07
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Regression of the session token corruption fix from v1.28.2 ([#326](https://github.com/nspcc-dev/neofs-api-go/issues/326)).
|
||||||
|
|
||||||
|
## [1.28.2] - 2021-07-06
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Data corruption of parameterized session token in `pkg/client.Client` ([#323](https://github.com/nspcc-dev/neofs-api-go/issues/323)).
|
||||||
|
|
||||||
|
## [1.28.1] - 2021-07-01
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Incorrect unsupported version error in `Client.GetContainer` of containers of newer versions.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- No longer used `pkg.IsSupportedVersion` func.
|
||||||
|
- No longer used `container.NewVerifiedFromV2` func.
|
||||||
|
|
||||||
|
## [1.28.0] - 2021-06-28 - Muuido (무의도, 舞衣島)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `String` / `FromString` methods to work with text format of enums from `pkg`.
|
||||||
|
- `Marshal(JSON)` / `Unmarshal(JSON)` methods to `container.ContainerContext` type.
|
||||||
|
- Ability to handle the `io.Reader` of the object payload in `Client.GetObject`.
|
||||||
|
- `NumberOfAddresses` / `IterateAddresses` methods to node info types for support of multiple addresses.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Added leading slash to format of gRPC method names.
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Neo Go library to v0.95.3.
|
||||||
|
|
||||||
|
## [1.27.1] - 2021-06-10
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- SDK version was updated (actualized) to `2.7`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- `pkg` wrappers' `ToV2` methods return `nil` if called on `nil`.
|
||||||
|
- `pkg` wrappers' `NewFromV2` functions constructs `nil` if called with `nil` argument.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Getters and setters for lifetime fields of `pkg/session.Token`.
|
||||||
|
- `MarshalHeaderJSON` method to `pkg/object.Object`.
|
||||||
|
- Generators for types from `pkg` (for testing).
|
||||||
|
- Descriptions of default fields for `pkg` wrappers and unit tests for its constructors.
|
||||||
|
- Unit tests for `ToV2` methods and `NewFromV2` functions.
|
||||||
|
|
||||||
|
## [1.27.0] - 2021-06-03 - Seongmodo (석모도, 席毛島)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Message structures related to Container service sessions in `v2` and `pkg`.
|
||||||
|
- `session.Token` and `Signature` to `pkg/container.Container` and `pkg/acl/eacl.Table`.
|
||||||
|
- `Conn` method of clients to get the underlying connection.
|
||||||
|
- `WithTLSConfig` client option to specify TLS configuration.
|
||||||
|
- `WithNetworkURIAddress` client option to specify URI of the remote server.
|
||||||
|
- Generators of random container IDs, owner IDs and session tokens (for testing).
|
||||||
|
|
||||||
|
### Replaced
|
||||||
|
|
||||||
|
- `pkg/token.SessionToken` type to `pkg/session` package as `Token`. Old type is deprecated.
|
||||||
|
- `pkg/container.ID` type to `pkg/container/id` package. Old type is deprecated.
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NEO Go library to v0.95.1.
|
||||||
|
|
||||||
|
## [1.26.1] - 2021-05-19
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated neo-go to v0.95.0 release.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- `pkg/errors` dependency (stdlib errors used instead).
|
||||||
|
|
||||||
|
## [1.26.0] - 2021-05-07 - Daecheongdo (대청도, 大靑島)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Implementation of `v2/reputation` package.
|
||||||
|
- Implementation of reputation methods in `pkg/client`.
|
||||||
|
- Float64 stable marshaling wrappers in `util/proto`.
|
||||||
|
|
||||||
|
## [1.25.0] - 2021-03-22 - Jebudo (제부도, 濟扶島)
|
||||||
|
|
||||||
|
Raw client and support of NeoFS API v2.5.0 "Jebudo" release.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Raw client for peer to peer communication.
|
||||||
|
- `client.WithKey` option to sign messages with different keys within single
|
||||||
|
client.
|
||||||
|
- `Content-Type` well-known object attribute constant.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Refactored `v2` sub-packages to support single raw client in all RPC methods.
|
||||||
|
- Client constructor returns `Client` interface instead of structure.
|
||||||
|
|
||||||
|
## [1.24.0] - 2021-02-26 - Ganghwado (강화도, 江華島)
|
||||||
|
|
||||||
|
Support changes from NeoFS API v2.4.0 "Ganghwado" release.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `netmap.NetworkInfo` definitions in `v2` and `pkg/netmap`.
|
||||||
|
- `netmap.NetworkInfo` RPC support in `pkg/client`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated in-line docs from NeoFS API "Ganghwado" release.
|
||||||
|
|
||||||
|
## [1.23.0] - 2021-02-11 - Seonyudo (선유도, 仙遊島)
|
||||||
|
|
||||||
|
Support changes from NeoFS API v2.3.0 "Seonyudo" release.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Fulfill backup factor for default attribute in placement.
|
||||||
|
- Support of `Container.AnnounceUsedSpace` RPC from NeoFS API.
|
||||||
|
- New `pkg/client.Client.AnnounceContainerUsedSpace` method.
|
||||||
|
- Support of `STRING_NOT_EQUAL` and `NOT_PRESENT` object search filters.
|
||||||
|
- Implementation of `json.Marshaler`/`json.Unmarshaler` on `v2/object/SearchFilter`.
|
||||||
|
- Implementation of `json.Marshaler`/`json.Unmarshaler` on `pkg/object/SearchFilters`.
|
||||||
|
- Named constants of well-known node attributes in `pkg/netmap`.
|
||||||
|
|
||||||
|
### Renamed
|
||||||
|
|
||||||
|
- `pkg/netmap/PriceAttr` to `pkg/netmap/AttrPrice`.
|
||||||
|
- `pkg/netmap/CapacityAttr` to `pkg/netmap/AttrCapacity`.
|
||||||
|
|
||||||
|
## [1.22.2] - 2021-01-27
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix size limit for grpc messages in object.Put operation.
|
||||||
|
- Fix `GetContainerNode()` function, so that it does not modify placement policy.
|
||||||
|
|
||||||
|
## [1.22.1] - 2021-01-15
|
||||||
|
|
||||||
|
Support changes from NeoFS API v2.2.1 release.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Constant prefix of the reserved keys to X-headers (`__NEOFS__`).
|
||||||
|
- Constant string key to netmap epoch X-header (`__NEOFS__NETMAP_EPOCH`).
|
||||||
|
- Constant string key to netmap lookup depth X-header (`__NEOFS__NETMAP_LOOKUP_DEPTH`).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Linter's configuration in `.golangci.yml`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Remarks of the updated linter.
|
||||||
|
|
||||||
|
## [1.22.0] - 2020-12-30 - Yeouido (여의도, 汝矣島)
|
||||||
|
|
||||||
|
Support changes from NeoFS API v2.2.0 "Yeouido" release.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Payload hash field to `ShortHeader` message.
|
||||||
|
- Payload homomorphic hash field to `ShortHeader` message.
|
||||||
|
- Support of `StorageGroup` message.
|
||||||
|
- Support of `DataAuditResult` message.
|
||||||
|
- Stringer and string parser for `Checksum` type of client library.
|
||||||
|
- Stringer and string parser for `Type` message.
|
||||||
|
- Stringer and string parser for `Type` type of client library.
|
||||||
|
- `AddTypeFilter` method on `SearchFilters` type of client library
|
||||||
|
that adds filter by object type.
|
||||||
|
- Utility functions for working with `fixed64` protobuf type to `proto` library.
|
||||||
|
- Converters for `repeated` object ID messages in `v2` library.
|
||||||
|
|
||||||
|
## [1.21.2] - 2020-12-24
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `Container.NonceUUID` getter of container nonce in UUID format.
|
||||||
|
- `Container.SetNonceUUID` setter of container nonce in UUID format.
|
||||||
|
- `NewVerifiedContainerFromV2` container constructor that preliminary
|
||||||
|
checks if container message argument meets NeoFS API V2 specification.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- `Container.Nonce`/`Container.SetNonce` marked as deprecated.
|
||||||
|
- `Client.GetContainer` method returns an error if received
|
||||||
|
container does not meet NeoFS API specification.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `pkg.SDKVersion` to return version with minor `1`.
|
||||||
|
- `pkg.IsSupportedVersion` to consider `2.1` as supported.
|
||||||
|
|
||||||
|
## [1.21.1] - 2020-12-18
|
||||||
|
|
||||||
|
Support neofs-api v2.1.1.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `client.GetVerifiedContainerStructure` function to check
|
||||||
|
that the container structure matches the requested identifier.
|
||||||
|
|
||||||
|
## [1.21.0] - 2020-12-11 - Modo (모도, 茅島)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `SplitID` message support
|
||||||
|
- Search filter by `SplitID` field
|
||||||
|
- `SplitInfo` message support and related error
|
||||||
|
- `Raw` flag support in `Client.GetObject(Header)`
|
||||||
|
- Getters for parameter structures in `pkg/client` package
|
||||||
|
- `Tombstone` message support
|
||||||
|
- Tombstone address target parameter of `Client.DeleteObject` method
|
||||||
|
- `client.DeleteObject` helpful function
|
||||||
|
- Usage of default value for backup factor in placement builder
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Object search filter by `CHILDFREE` property
|
||||||
|
|
||||||
|
### Renamed
|
||||||
|
|
||||||
|
- `AddLeafFilter` to `AddPhyFilter`
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- NPE in `eacl.NewTargetFromV2` function
|
||||||
|
- Processing `REP X` policies in placement builder
|
||||||
|
|
||||||
|
|
||||||
|
## [1.20.3] - 2020-11-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `AddObjectIDFilter` method of `SearchFilters` type
|
||||||
|
- `WithDialTimeout` option of v2 and SDK `Client`'s
|
||||||
|
- `GetEACLWithSignature` method of SDK `Client` type
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- incorrect signature verification algorithm in `GetEACL` method of SDK `Client`
|
||||||
|
|
||||||
|
## [1.20.2] - 2020-11-17
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Readme badges
|
||||||
|
|
||||||
|
## [1.20.1] - 2020-11-17
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Signature check of head response in `pkg/client` (#202)
|
||||||
|
|
||||||
|
## [1.20.0] - 2020-11-16 - Jindo (진도, 珍島)
|
||||||
|
|
||||||
|
Major API refactoring and simplification. From now on this library will have
|
||||||
|
backward compatibility and support of major versions of NeoFS-API by having
|
||||||
|
**version specific** files in `vN` dirs and **version independent** SDK
|
||||||
|
structures and client in `pkg`. This version supports NeoFS-API v2.0.X
|
||||||
|
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- cross-protocol ```v2``` message types
|
||||||
|
- utility functions for message signing/verification
|
||||||
|
- ```v2```/ ```gRPC``` back and forth conversions
|
||||||
|
- primary SDK
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- v0 and v1 NeoFS API is not supported anymore
|
||||||
|
|
||||||
|
## [1.3.0] - 2020-07-23
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Format of ```refs.OwnerID``` based on NEO3.
|
||||||
|
- Binary format of extended ACL table.
|
||||||
|
- ```acl``` package structure.
|
||||||
|
|
||||||
|
## [1.2.0] - 2020-07-08
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Extended ACL types.
|
||||||
|
- Getters and setters of ```EACLTable``` and its internal messages.
|
||||||
|
- Wrappers over ```EACLTable``` and its internal messages.
|
||||||
|
- Getters, setters and marshaling methods of wrappers.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Mechanism for signing requests on the principle of Matryoshka.
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NeoFS API v1.1.0 => 1.2.0
|
||||||
|
|
||||||
|
## [1.1.0] - 2020-06-18
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `container.SetExtendedACL` rpc.
|
||||||
|
- `container.GetExtendedACL` rpc.
|
||||||
|
- Bearer token to all request messages.
|
||||||
|
- X-headers to all request messages.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Implementation and signatures of Sign/Verify request functions.
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NeoFS API v1.0.0 => 1.1.0
|
||||||
|
|
||||||
|
## [1.0.0] - 2020-05-26
|
||||||
|
|
||||||
|
- Bump major release
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NeoFS API v0.7.5 => v1.0.0
|
||||||
|
- github.com/golang/protobuf v1.4.0 => v1.4.2
|
||||||
|
- github.com/prometheus/client_golang v1.5.1 => v1.6.0
|
||||||
|
- github.com/spf13/viper v1.6.2 => v1.7.0
|
||||||
|
- google.golang.org/grpc v1.28.1 => v1.29.1
|
||||||
|
|
||||||
|
## [0.7.6] - 2020-05-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `session.PublicSessionToken` function for session public key bytes receiving.
|
||||||
|
- The implementation of `service.DataWithSignKeyAccumulator` methods on `object.IntegrityHeader`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- The implementation of `AddSignKey` method on `service.signedSessionToken` structure.
|
||||||
|
- `session.PrivateTOken` interface methods group.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- `OwnerKey` from `service.SessionToken` signed payload.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Incorrect `object.HeadRequest.ReadSignedData` method implementation.
|
||||||
|
|
||||||
|
## [0.7.5] - 2020-05-16
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Owner key to the `SessionToken` signed payload.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- `OwnerKeyContainer` interface embedded to `SessionTokenInfo` interface.
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NeoFS API v0.7.5
|
||||||
|
|
||||||
|
## [0.7.4] - 2020-05-12
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Stringify for `object.Object`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Mechanism for creating and verifying request message signatures.
|
||||||
|
- Implementation and interface of private token storage.
|
||||||
|
- File structure of packages.
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NeoFS API v0.7.4
|
||||||
|
|
||||||
|
## [0.7.1] - 2020-04-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Method to change current node state. (`state.ChangeState`)
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- NeoFS API v0.7.1
|
||||||
|
|
||||||
|
## [0.7.0] - 2020-04-16
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
- NeoFS API v0.7.0
|
||||||
|
|
||||||
|
## [0.6.2] - 2020-04-16
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
- NeoFS API v0.6.1
|
||||||
|
- Protobuf v1.4.0
|
||||||
|
- Netmap v1.7.0
|
||||||
|
- Prometheus Client v1.5.1
|
||||||
|
- Testify v1.5.1
|
||||||
|
- gRPC v1.28.1
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- formatting
|
||||||
|
- test coverage for Object.PutRequest.CID method
|
||||||
|
|
||||||
|
## [0.6.1] - 2020-04-10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- License changed to Apache 2.0
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- NPE in PutRequest.CID()
|
||||||
|
|
||||||
|
|
||||||
|
## [0.6.0] - 2020-04-03
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `RequestType` for object service requests
|
||||||
|
- `Type()` function in `Request` interface
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Synced proto files with `neofs-api v0.6.0`
|
||||||
|
|
||||||
|
## [0.5.0] - 2020-03-31
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Rename repo to `neofs-api-go`
|
||||||
|
- Used public proto files
|
||||||
|
|
||||||
|
## [0.4.2] - 2020-03-16
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- NPE bug with CID method of object.PutRequest
|
||||||
|
|
||||||
|
## [0.4.1] - 2020-03-02
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated neofs-crypto library to v0.3.0
|
||||||
|
|
||||||
|
## [0.4.0] - 2020-02-18
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Meta header for all gRPC responses. It contains epoch stamp and version number.
|
||||||
|
### Changed
|
||||||
|
- Endianness in accounting cheque. Now it uses little endian for cheaper
|
||||||
|
decoding in neofs smart-contract.
|
||||||
|
|
||||||
|
## [0.3.2] - 2020-02-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- gRPC method DumpVars to State service
|
||||||
|
- add method `EncodeVariables` to encode debug variables to JSON (slice of bytes)
|
||||||
|
- increase test coverage for state package
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
- state proto file
|
||||||
|
- documentation for state service and messages
|
||||||
|
|
||||||
|
## [0.3.1] - 2020-02-07
|
||||||
|
### Fixed
|
||||||
|
- bug with `tz.Concat`
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
- dependencies:
|
||||||
|
- github.com/nspcc-dev/tzhash `v1.3.0 => v1.4.0`
|
||||||
|
- github.com/prometheus/client_golang `v1.4.0 => v1.4.1`
|
||||||
|
- google.golang.org/grpc `v1.27.0 => v1.27.1`
|
||||||
|
|
||||||
|
## [0.3.0] - 2020-02-05
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
- proto files
|
||||||
|
- dependencies
|
||||||
|
- github.com/golang/protobuf `v1.3.2 => v1.3.3`
|
||||||
|
- github.com/pkg/errors `v0.8.1 => v0.9.1`
|
||||||
|
- github.com/prometheus/client_golang `v1.2.1 => v1.4.0`
|
||||||
|
- github.com/prometheus/client_model `v0.0.0-20190812154241-14fe0d1b01d4 => v0.2.0`
|
||||||
|
- github.com/spf13/viper `v1.6.1 => v1.6.2`
|
||||||
|
- google.golang.org/grpc `v1.24.0 => v1.27.0`
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- make object.GetRange to be server-side streaming RPC
|
||||||
|
- GetRange response struct
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- badges to readme
|
||||||
|
|
||||||
|
## [0.2.14] - 2020-02-04
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Readme
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Filename header
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
- Object.Search now uses streams
|
||||||
|
|
||||||
|
## [0.2.13] - 2020-02-03
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Code format
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use separated proto repository
|
||||||
|
- Rename neofs-proto to neofs-api
|
||||||
|
|
||||||
|
## [0.2.12] - 2020-01-27
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Bug with ByteSize (0 bytes returns NaN)
|
||||||
|
|
||||||
|
## [0.2.11] - 2020-01-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Raw flag in object head and get queries with docs
|
||||||
|
|
||||||
|
## [0.2.10] - 2020-01-17
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Private token contructor now takes public keys as an argument
|
||||||
|
|
||||||
|
## [0.2.9] - 2020-01-17
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Docs for container ACL field
|
||||||
|
- Public key header in the object with docs
|
||||||
|
- Public key field in the session token with docs
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Routine to verify correct object checks if integrity header is last and
|
||||||
|
may use public key header if verification header is not present
|
||||||
|
- Routine to verify correct session token checks if keys in the token
|
||||||
|
associated with owner id
|
||||||
|
- Updated neofs-crypto to v0.2.3
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Timestamp in object tombstone header
|
||||||
|
|
||||||
|
## [0.2.8] - 2019-12-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Container access control type definitions
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Used sync.Pool for Sign/VerifyRequestHeader
|
||||||
|
- VerifiableRequest.Marshal method replace with MarshalTo and Size
|
||||||
|
|
||||||
|
## [0.2.7] - 2019-12-17
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Bug with DecodeMetrics (empty metrics returns)
|
||||||
|
|
||||||
|
## [0.2.6] - 2019-12-17
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Request to dump node config
|
||||||
|
|
||||||
|
## [0.2.5] - 2019-12-05
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- proto.Message in Maintainable/Verifiable requests
|
||||||
|
|
||||||
|
## [0.2.4] - 2019-12-03
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- StorageGroup library
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Storage group part of object library moved into separate package
|
||||||
|
- Updated proto documentation
|
||||||
|
|
||||||
|
## [0.2.3] - 2019-11-28
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- service: SignRequest / VerifyRequest and accompanying code
|
||||||
|
- proto: Signature field from requests
|
||||||
|
- object: bytefmt package not used anymore
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- service: rename EpochRequest to EpochHeader and merge with MetaHeader
|
||||||
|
- service: get status error even if it is wrapped
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- service: RequestVerificationHeader's method to validate owner
|
||||||
|
- service: test coverage for CheckOwner
|
||||||
|
- service: test coverage for wrapped status errors
|
||||||
|
|
||||||
|
## [0.2.2] - 2019-11-22
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- ProcessRequestTTL don't changes status errors from TTLCondition
|
||||||
|
|
||||||
|
## [0.2.1] - 2019-11-22
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Removed SendPutRequest
|
||||||
|
- MakePutRequestHeader sets only object and token
|
||||||
|
|
||||||
|
## [0.2.0] - 2019-11-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Container not found error
|
||||||
|
- GitHub Actions as CI and Codecov
|
||||||
|
- Auto-generated proto documentation
|
||||||
|
- RequestMetaHeader to all RPC requests
|
||||||
|
- RequestVerificationHeader to all RPC requests
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Moved TTL and Epoch fields to RequestMetaHeader
|
||||||
|
- Renamed Version in object.SearchRequest to QueryVersion
|
||||||
|
- Removed SetTTL, GetTTL, SetEpoch, GetEpoch from all RPC requests
|
||||||
|
|
||||||
|
## 0.1.0 - 2019-11-18
|
||||||
|
|
||||||
|
Initial public release
|
||||||
|
|
||||||
|
[0.2.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.1.0...v0.2.0
|
||||||
|
[0.2.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.0...v0.2.1
|
||||||
|
[0.2.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.1...v0.2.2
|
||||||
|
[0.2.3]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.2...v0.2.3
|
||||||
|
[0.2.4]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.3...v0.2.4
|
||||||
|
[0.2.5]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.4...v0.2.5
|
||||||
|
[0.2.6]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.5...v0.2.6
|
||||||
|
[0.2.7]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.6...v0.2.7
|
||||||
|
[0.2.8]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.7...v0.2.8
|
||||||
|
[0.2.9]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.8...v0.2.9
|
||||||
|
[0.2.10]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.9...v0.2.10
|
||||||
|
[0.2.11]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.10...v0.2.11
|
||||||
|
[0.2.12]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.11...v0.2.12
|
||||||
|
[0.2.13]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.12...v0.2.13
|
||||||
|
[0.2.14]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.13...v0.2.14
|
||||||
|
[0.3.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.2.14...v0.3.0
|
||||||
|
[0.3.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.3.0...v0.3.1
|
||||||
|
[0.3.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.3.1...v0.3.2
|
||||||
|
[0.4.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.3.2...v0.4.0
|
||||||
|
[0.4.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.4.0...v0.4.1
|
||||||
|
[0.4.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.4.1...v0.4.2
|
||||||
|
[0.5.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.4.2...v0.5.0
|
||||||
|
[0.6.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.5.0...v0.6.0
|
||||||
|
[0.6.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.6.0...v0.6.1
|
||||||
|
[0.6.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.6.1...v0.6.2
|
||||||
|
[0.7.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.6.2...v0.7.0
|
||||||
|
[0.7.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.7.0...v0.7.1
|
||||||
|
[0.7.4]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.7.1...v0.7.4
|
||||||
|
[0.7.5]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.7.4...v0.7.5
|
||||||
|
[0.7.6]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.7.5...v0.7.6
|
||||||
|
[1.0.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v0.7.6...v1.0.0
|
||||||
|
[1.1.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.0.0...v1.1.0
|
||||||
|
[1.2.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.1.0...v1.2.0
|
||||||
|
[1.3.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.2.0...v1.3.0
|
||||||
|
[1.20.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.3.0...v1.20.0
|
||||||
|
[1.20.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.20.0...v1.20.1
|
||||||
|
[1.20.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.20.1...v1.20.2
|
||||||
|
[1.20.3]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.20.2...v1.20.3
|
||||||
|
[1.21.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.20.3...v1.21.0
|
||||||
|
[1.21.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.21.0...v1.21.1
|
||||||
|
[1.21.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.21.1...v1.21.2
|
||||||
|
[1.22.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.21.2...v1.22.0
|
||||||
|
[1.22.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.22.0...v1.22.1
|
||||||
|
[1.22.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.22.1...v1.22.2
|
||||||
|
[1.23.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.22.2...v1.23.0
|
||||||
|
[1.24.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.23.0...v1.24.0
|
||||||
|
[1.25.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.24.0...v1.25.0
|
||||||
|
[1.26.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.25.0...v1.26.0
|
||||||
|
[1.26.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.26.0...v1.26.1
|
||||||
|
[1.27.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.26.1...v1.27.0
|
||||||
|
[1.27.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.27.0...v1.27.1
|
||||||
|
[1.28.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.27.1...v1.28.0
|
||||||
|
[1.28.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.28.0...v1.28.1
|
||||||
|
[1.28.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.28.1...v1.28.2
|
||||||
|
[1.28.3]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.28.2...v1.28.3
|
||||||
|
[1.29.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.28.3...v1.29.0
|
||||||
|
[1.30.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.29.0...v1.30.0
|
||||||
|
[2.11.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v1.30.0...v2.11.0
|
||||||
|
[2.11.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.11.0...v2.11.1
|
||||||
|
[2.12.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.11.1...v2.12.0
|
||||||
|
[2.12.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.12.0...v2.12.1
|
||||||
|
[2.12.2]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.12.1...v2.12.2
|
||||||
|
[2.13.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.12.2...v2.13.0
|
||||||
|
[2.13.1]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.13.0...v2.13.1
|
||||||
|
[2.14.0]: https://github.com/nspcc-dev/neofs-api-go/compare/v2.13.1...v2.14.0
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
First, thank you for contributing! We love and encourage pull requests from
|
First, thank you for contributing! We love and encourage pull requests from
|
||||||
everyone. Please follow the guidelines:
|
everyone. Please follow the guidelines:
|
||||||
|
|
||||||
- Check the open [issues](https://git.frostfs.info/TrueCloudLab/frostfs-api-go/issues) and
|
- Check the open [issues](https://github.com/TrueCloudLab/frostfs-api-go/issues) and
|
||||||
[pull requests](https://git.frostfs.info/TrueCloudLab/frostfs-api-go/pulls) for existing
|
[pull requests](https://github.com/TrueCloudLab/frostfs-api-go/pulls) for existing
|
||||||
discussions.
|
discussions.
|
||||||
|
|
||||||
- Open an issue first, to discuss a new feature or enhancement.
|
- Open an issue first, to discuss a new feature or enhancement.
|
||||||
|
@ -26,18 +26,18 @@ send a pull request. We encourage pull requests to discuss code changes. Here
|
||||||
are the steps in details:
|
are the steps in details:
|
||||||
|
|
||||||
### Set up your GitHub Repository
|
### Set up your GitHub Repository
|
||||||
Fork [FrostFS node upstream](https://git.frostfs.info/TrueCloudLab/frostfs-api-go/fork) source
|
Fork [FrostFS node upstream](https://github.com/TrueCloudLab/frostfs-api-go/fork) source
|
||||||
repository to your own personal repository. Copy the URL of your fork (you will
|
repository to your own personal repository. Copy the URL of your fork (you will
|
||||||
need it for the `git clone` command below).
|
need it for the `git clone` command below).
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ git clone https://git.frostfs.info/TrueCloudLab/frostfs-api-go
|
$ git clone https://github.com/TrueCloudLab/frostfs-api-go
|
||||||
```
|
```
|
||||||
|
|
||||||
### Set up git remote as ``upstream``
|
### Set up git remote as ``upstream``
|
||||||
```sh
|
```sh
|
||||||
$ cd frostfs-api-go
|
$ cd frostfs-api-go
|
||||||
$ git remote add upstream https://git.frostfs.info/TrueCloudLab/frostfs-api-go
|
$ git remote add upstream https://github.com/TrueCloudLab/frostfs-api-go
|
||||||
$ git fetch upstream
|
$ git fetch upstream
|
||||||
$ git merge upstream/master
|
$ git merge upstream/master
|
||||||
...
|
...
|
||||||
|
|
80
Makefile
80
Makefile
|
@ -2,95 +2,61 @@
|
||||||
SHELL = bash
|
SHELL = bash
|
||||||
|
|
||||||
VERSION ?= $(shell git describe --tags --match "v*" --abbrev=8 --dirty --always)
|
VERSION ?= $(shell git describe --tags --match "v*" --abbrev=8 --dirty --always)
|
||||||
PROTOC_VERSION ?= 27.2
|
|
||||||
PROTOC_GEN_GO_VERSION ?= $(shell go list -f '{{.Version}}' -m google.golang.org/protobuf)
|
|
||||||
PROTOC_OS_VERSION=osx-x86_64
|
|
||||||
ifeq ($(shell uname), Linux)
|
|
||||||
PROTOC_OS_VERSION=linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
BIN = bin
|
.PHONY: dep fmts fmt imports protoc test lint version help
|
||||||
PROTOBUF_DIR ?= $(abspath $(BIN))/protobuf
|
|
||||||
PROTOC_DIR ?= $(PROTOBUF_DIR)/protoc-v$(PROTOC_VERSION)
|
|
||||||
PROTOC_GEN_GO_DIR ?= $(PROTOBUF_DIR)/protoc-gen-go-$(PROTOC_GEN_GO_VERSION)
|
|
||||||
|
|
||||||
.PHONY: dep fmts fumpt imports protoc test lint version help $(BIN)/protogen protoc-test
|
|
||||||
|
|
||||||
# Pull go dependencies
|
# Pull go dependencies
|
||||||
dep:
|
dep:
|
||||||
@printf "⇒ Tidy requirements : "
|
@printf "⇒ Tidy requirements : "
|
||||||
CGO_ENABLED=0 \
|
CGO_ENABLED=0 \
|
||||||
|
GO111MODULE=on \
|
||||||
go mod tidy -v && echo OK
|
go mod tidy -v && echo OK
|
||||||
@printf "⇒ Download requirements: "
|
@printf "⇒ Download requirements: "
|
||||||
CGO_ENABLED=0 \
|
CGO_ENABLED=0 \
|
||||||
|
GO111MODULE=on \
|
||||||
go mod download && echo OK
|
go mod download && echo OK
|
||||||
@printf "⇒ Install test requirements: "
|
@printf "⇒ Install test requirements: "
|
||||||
CGO_ENABLED=0 \
|
CGO_ENABLED=0 \
|
||||||
|
GO111MODULE=on \
|
||||||
go test ./... && echo OK
|
go test ./... && echo OK
|
||||||
|
|
||||||
# Run all code formatters
|
# Run all code formatters
|
||||||
fmts: fumpt imports
|
fmts: fmt imports
|
||||||
|
|
||||||
|
# Reformat code
|
||||||
|
fmt:
|
||||||
|
@echo "⇒ Processing gofmt check"
|
||||||
|
@for f in `find . -type f -name '*.go' -not -path './vendor/*' -not -name '*.pb.go' -prune`; do \
|
||||||
|
GO111MODULE=on gofmt -s -w $$f; \
|
||||||
|
done
|
||||||
|
|
||||||
# Reformat imports
|
# Reformat imports
|
||||||
imports:
|
imports:
|
||||||
@echo "⇒ Processing goimports check"
|
@echo "⇒ Processing goimports check"
|
||||||
@for f in `find . -type f -name '*.go' -not -name '*.pb.go' -prune`; do \
|
@for f in `find . -type f -name '*.go' -not -path './vendor/*' -not -name '*.pb.go' -prune`; do \
|
||||||
goimports -w $$f; \
|
GO111MODULE=on goimports -w $$f; \
|
||||||
done
|
done
|
||||||
|
|
||||||
# Run gofumpt
|
|
||||||
fumpt:
|
|
||||||
@echo "⇒ Processing gofumpt check"
|
|
||||||
@gofumpt -l -w .
|
|
||||||
|
|
||||||
# Install protoc
|
|
||||||
protoc-install:
|
|
||||||
@rm -rf $(PROTOBUF_DIR)
|
|
||||||
@mkdir -p $(PROTOBUF_DIR)
|
|
||||||
@echo "⇒ Installing protoc... "
|
|
||||||
@wget -q -O $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip 'https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/protoc-$(PROTOC_VERSION)-$(PROTOC_OS_VERSION).zip'
|
|
||||||
@unzip -q -o $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip -d $(PROTOC_DIR)
|
|
||||||
@rm $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip
|
|
||||||
@echo "⇒ Installing protoc-gen-go..."
|
|
||||||
@GOBIN=$(PROTOC_GEN_GO_DIR) go install -v google.golang.org/protobuf/...@$(PROTOC_GEN_GO_VERSION)
|
|
||||||
|
|
||||||
|
|
||||||
# Regenerate code for proto files
|
# Regenerate code for proto files
|
||||||
protoc:
|
protoc:
|
||||||
@if [ ! -d "$(PROTOC_DIR)" ] || [ ! -d "$(PROTOC_GEN_GO_DIR)" ]; then \
|
@GOPRIVATE=github.com/TrueCloudLab go mod vendor
|
||||||
make protoc-install; \
|
# Install specific version for protobuf lib
|
||||||
fi
|
@go list -f '{{.Path}}/...@{{.Version}}' -m google.golang.org/protobuf | xargs go install -v
|
||||||
# Protoc generate
|
# Protoc generate
|
||||||
@for f in `find . -type f -name '*.proto' -not -path './bin/*' -not -path './util/proto/test/*'`; do \
|
@for f in `find . -type f -name '*.proto' -not -path './vendor/*'`; do \
|
||||||
echo "⇒ Processing $$f "; \
|
echo "⇒ Processing $$f "; \
|
||||||
$(PROTOC_DIR)/bin/protoc \
|
protoc \
|
||||||
--proto_path=.:$(PROTOC_DIR)/include:/usr/local/include \
|
--proto_path=.:./vendor:/usr/local/include \
|
||||||
--plugin=protoc-gen-go-frostfs=$(abspath ./bin/protogen) \
|
--go_out=. --go_opt=paths=source_relative \
|
||||||
--go-frostfs_out=fuzz=true:. \
|
|
||||||
--go-frostfs_opt=paths=source_relative \
|
|
||||||
--go-grpc_opt=require_unimplemented_servers=false \
|
--go-grpc_opt=require_unimplemented_servers=false \
|
||||||
--go-grpc_out=. --go-grpc_opt=paths=source_relative $$f; \
|
--go-grpc_out=. --go-grpc_opt=paths=source_relative $$f; \
|
||||||
done
|
done
|
||||||
|
rm -rf vendor
|
||||||
$(BIN)/protogen:
|
|
||||||
@go build -v -trimpath \
|
|
||||||
-o $(BIN)/protogen \
|
|
||||||
./util/protogen
|
|
||||||
|
|
||||||
protoc-test: protoc $(BIN)/protogen
|
|
||||||
@$(PROTOC_DIR)/bin/protoc \
|
|
||||||
--go_out=. --go_opt=paths=source_relative \
|
|
||||||
--plugin=protoc-gen-go-frostfs=$(abspath $(BIN)/protogen) \
|
|
||||||
--go-frostfs_opt=Mutil/proto/test/test.proto=git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto/test/custom \
|
|
||||||
--go-frostfs_opt=module=git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 \
|
|
||||||
--go-frostfs_out=. --go-frostfs_opt=paths=import \
|
|
||||||
./util/proto/test/test.proto
|
|
||||||
|
|
||||||
# Run Unit Test with go test
|
# Run Unit Test with go test
|
||||||
test: GOFLAGS ?= "-count=1"
|
|
||||||
test:
|
test:
|
||||||
@echo "⇒ Running go test"
|
@echo "⇒ Running go test"
|
||||||
@GOFLAGS="$(GOFLAGS)" go test ./...
|
@GO111MODULE=on go test ./...
|
||||||
|
|
||||||
# Run linters
|
# Run linters
|
||||||
lint:
|
lint:
|
||||||
|
|
14
README.md
14
README.md
|
@ -6,20 +6,22 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
![Tests](https://git.frostfs.info/TrueCloudLab/frostfs-api-go/badges/workflows/tests.yml/badge.svg)
|
![Tests](https://github.com/TrueCloudLab/frostfs-api-go/workflows/frostfs-api-go%20tests/badge.svg)
|
||||||
[![Report](https://goreportcard.com/badge/git.frostfs.info/TrueCloudLab/frostfs-api-go)](https://goreportcard.com/report/git.frostfs.info/TrueCloudLab/frostfs-api-go)
|
[![codecov](https://codecov.io/gh/TrueCloudLab/frostfs-api-go/branch/master/graph/badge.svg)](https://codecov.io/gh/TrueCloudLab/frostfs-api-go)
|
||||||
[![Release](https://git.frostfs.info/TrueCloudLab/frostfs-api-go/badges/release.svg)](https://git.frostfs.info/TrueCloudLab/frostfs-api-go)
|
[![Report](https://goreportcard.com/badge/github.com/TrueCloudLab/frostfs-api-go)](https://goreportcard.com/report/github.com/TrueCloudLab/frostfs-api-go)
|
||||||
|
[![GitHub release](https://img.shields.io/github/release/TrueCloudLab/frostfs-api-go.svg)](https://github.com/TrueCloudLab/frostfs-api-go)
|
||||||
|
![GitHub license](https://img.shields.io/github/license/TrueCloudLab/frostfs-api-go.svg?style=popout)
|
||||||
|
|
||||||
# Overview
|
# Overview
|
||||||
|
|
||||||
Go implementation of recent [FrostFS API](https://git.frostfs.info/TrueCloudLab/frostfs-api)
|
Go implementation of recent [FrostFS API](https://github.com/TrueCloudLab/frostfs-api)
|
||||||
versions. For a more high-level SDK see [FrostFS SDK](https://git.frostfs.info/TrueCloudLab/frostfs-sdk-go).
|
versions. For a more high-level SDK see [FrostFS SDK](https://github.com/TrueCloudLab/frostfs-sdk-go).
|
||||||
|
|
||||||
## Frostfs-Api compatibility
|
## Frostfs-Api compatibility
|
||||||
|
|
||||||
|frostfs-api-go version|supported frostfs-api versions|
|
|frostfs-api-go version|supported frostfs-api versions|
|
||||||
|:------------------:|:--------------------------:|
|
|:------------------:|:--------------------------:|
|
||||||
|v2.14.x|[v2.14.0](https://git.frostfs.info/TrueCloudLab/frostfs-api/releases/tag/v2.14.0)|
|
|v2.14.x|[v2.14.0](https://github.com/TrueCloudLab/frostfs-api/releases/tag/v2.14.0)|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|
46
accounting/grpc/service.go
Normal file
46
accounting/grpc/service.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package accounting
|
||||||
|
|
||||||
|
import (
|
||||||
|
refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetOwnerId sets identifier of the account owner.
|
||||||
|
func (m *BalanceRequest_Body) SetOwnerId(v *refs.OwnerID) {
|
||||||
|
m.OwnerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *BalanceRequest) SetBody(v *BalanceRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *BalanceRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *BalanceRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBalance sets balance value of the response.
|
||||||
|
func (m *BalanceResponse_Body) SetBalance(v *Decimal) {
|
||||||
|
m.Balance = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *BalanceResponse) SetBody(v *BalanceResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *BalanceResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *BalanceResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
BIN
accounting/grpc/service.pb.go
generated
Normal file
BIN
accounting/grpc/service.pb.go
generated
Normal file
Binary file not shown.
BIN
accounting/grpc/service_frostfs.pb.go
generated
BIN
accounting/grpc/service_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,45 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package accounting
|
|
||||||
|
|
||||||
func DoFuzzProtoBalanceRequest(data []byte) int {
|
|
||||||
msg := new(BalanceRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONBalanceRequest(data []byte) int {
|
|
||||||
msg := new(BalanceRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoBalanceResponse(data []byte) int {
|
|
||||||
msg := new(BalanceResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONBalanceResponse(data []byte) int {
|
|
||||||
msg := new(BalanceResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package accounting
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoBalanceRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoBalanceRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONBalanceRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONBalanceRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoBalanceResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoBalanceResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONBalanceResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONBalanceResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
BIN
accounting/grpc/service_grpc.pb.go
generated
BIN
accounting/grpc/service_grpc.pb.go
generated
Binary file not shown.
11
accounting/grpc/types.go
Normal file
11
accounting/grpc/types.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package accounting
|
||||||
|
|
||||||
|
// SetValue sets value of the decimal number.
|
||||||
|
func (m *Decimal) SetValue(v int64) {
|
||||||
|
m.Value = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPrecision sets precision of the decimal number.
|
||||||
|
func (m *Decimal) SetPrecision(v uint32) {
|
||||||
|
m.Precision = v
|
||||||
|
}
|
BIN
accounting/grpc/types.pb.go
generated
Normal file
BIN
accounting/grpc/types.pb.go
generated
Normal file
Binary file not shown.
BIN
accounting/grpc/types_frostfs.pb.go
generated
BIN
accounting/grpc/types_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,26 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package accounting
|
|
||||||
|
|
||||||
func DoFuzzProtoDecimal(data []byte) int {
|
|
||||||
msg := new(Decimal)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONDecimal(data []byte) int {
|
|
||||||
msg := new(Decimal)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package accounting
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoDecimal(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoDecimal(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONDecimal(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONDecimal(data)
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -32,7 +32,7 @@ func BenchmarkTable_ToGRPCMessage(b *testing.B) {
|
||||||
|
|
||||||
b.Run("to grpc message", func(b *testing.B) {
|
b.Run("to grpc message", func(b *testing.B) {
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
for range b.N {
|
for i := 0; i < b.N; i++ {
|
||||||
raw := tb.ToGRPCMessage()
|
raw := tb.ToGRPCMessage()
|
||||||
if len(tb.GetRecords()) != len(raw.(*aclGrpc.EACLTable).Records) {
|
if len(tb.GetRecords()) != len(raw.(*aclGrpc.EACLTable).Records) {
|
||||||
b.FailNow()
|
b.FailNow()
|
||||||
|
@ -41,7 +41,7 @@ func BenchmarkTable_ToGRPCMessage(b *testing.B) {
|
||||||
})
|
})
|
||||||
b.Run("from grpc message", func(b *testing.B) {
|
b.Run("from grpc message", func(b *testing.B) {
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
for range b.N {
|
for i := 0; i < b.N; i++ {
|
||||||
tb := new(acl.Table)
|
tb := new(acl.Table)
|
||||||
if tb.FromGRPCMessage(raw) != nil {
|
if tb.FromGRPCMessage(raw) != nil {
|
||||||
b.FailNow()
|
b.FailNow()
|
||||||
|
|
106
acl/convert.go
106
acl/convert.go
|
@ -2,8 +2,6 @@ package acl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/grpc"
|
acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/grpc"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
|
|
||||||
apeGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
|
||||||
|
@ -166,7 +164,7 @@ func (f *HeaderFilter) ToGRPCMessage() grpc.Message {
|
||||||
|
|
||||||
m.SetKey(f.key)
|
m.SetKey(f.key)
|
||||||
m.SetValue(f.value)
|
m.SetValue(f.value)
|
||||||
m.SetHeaderType(HeaderTypeToGRPCField(f.hdrType))
|
m.SetHeader(HeaderTypeToGRPCField(f.hdrType))
|
||||||
m.SetMatchType(MatchTypeToGRPCField(f.matchType))
|
m.SetMatchType(MatchTypeToGRPCField(f.matchType))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,29 +185,31 @@ func (f *HeaderFilter) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func HeaderFiltersToGRPC(fs []HeaderFilter) (res []acl.EACLRecord_Filter) {
|
func HeaderFiltersToGRPC(fs []HeaderFilter) (res []*acl.EACLRecord_Filter) {
|
||||||
if fs != nil {
|
if fs != nil {
|
||||||
res = make([]acl.EACLRecord_Filter, 0, len(fs))
|
res = make([]*acl.EACLRecord_Filter, 0, len(fs))
|
||||||
|
|
||||||
for i := range fs {
|
for i := range fs {
|
||||||
res = append(res, *fs[i].ToGRPCMessage().(*acl.EACLRecord_Filter))
|
res = append(res, fs[i].ToGRPCMessage().(*acl.EACLRecord_Filter))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func HeaderFiltersFromGRPC(fs []acl.EACLRecord_Filter) (res []HeaderFilter, err error) {
|
func HeaderFiltersFromGRPC(fs []*acl.EACLRecord_Filter) (res []HeaderFilter, err error) {
|
||||||
if fs != nil {
|
if fs != nil {
|
||||||
res = make([]HeaderFilter, len(fs))
|
res = make([]HeaderFilter, len(fs))
|
||||||
|
|
||||||
for i := range fs {
|
for i := range fs {
|
||||||
err = res[i].FromGRPCMessage(&fs[i])
|
if fs[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(fs[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -239,29 +239,31 @@ func (t *Target) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func TargetsToGRPC(ts []Target) (res []acl.EACLRecord_Target) {
|
func TargetsToGRPC(ts []Target) (res []*acl.EACLRecord_Target) {
|
||||||
if ts != nil {
|
if ts != nil {
|
||||||
res = make([]acl.EACLRecord_Target, 0, len(ts))
|
res = make([]*acl.EACLRecord_Target, 0, len(ts))
|
||||||
|
|
||||||
for i := range ts {
|
for i := range ts {
|
||||||
res = append(res, *ts[i].ToGRPCMessage().(*acl.EACLRecord_Target))
|
res = append(res, ts[i].ToGRPCMessage().(*acl.EACLRecord_Target))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func TargetsFromGRPC(fs []acl.EACLRecord_Target) (res []Target, err error) {
|
func TargetsFromGRPC(fs []*acl.EACLRecord_Target) (res []Target, err error) {
|
||||||
if fs != nil {
|
if fs != nil {
|
||||||
res = make([]Target, len(fs))
|
res = make([]Target, len(fs))
|
||||||
|
|
||||||
for i := range fs {
|
for i := range fs {
|
||||||
err = res[i].FromGRPCMessage(&fs[i])
|
if fs[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(fs[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -305,29 +307,31 @@ func (r *Record) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func RecordsToGRPC(ts []Record) (res []acl.EACLRecord) {
|
func RecordsToGRPC(ts []Record) (res []*acl.EACLRecord) {
|
||||||
if ts != nil {
|
if ts != nil {
|
||||||
res = make([]acl.EACLRecord, 0, len(ts))
|
res = make([]*acl.EACLRecord, 0, len(ts))
|
||||||
|
|
||||||
for i := range ts {
|
for i := range ts {
|
||||||
res = append(res, *ts[i].ToGRPCMessage().(*acl.EACLRecord))
|
res = append(res, ts[i].ToGRPCMessage().(*acl.EACLRecord))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func RecordsFromGRPC(fs []acl.EACLRecord) (res []Record, err error) {
|
func RecordsFromGRPC(fs []*acl.EACLRecord) (res []Record, err error) {
|
||||||
if fs != nil {
|
if fs != nil {
|
||||||
res = make([]Record, len(fs))
|
res = make([]Record, len(fs))
|
||||||
|
|
||||||
for i := range fs {
|
for i := range fs {
|
||||||
err = res[i].FromGRPCMessage(&fs[i])
|
if fs[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(fs[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -414,54 +418,6 @@ func (l *TokenLifetime) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *APEOverride) ToGRPCMessage() grpc.Message {
|
|
||||||
var m *acl.BearerToken_Body_APEOverride
|
|
||||||
|
|
||||||
if c != nil {
|
|
||||||
m = new(acl.BearerToken_Body_APEOverride)
|
|
||||||
|
|
||||||
m.SetTarget(c.target.ToGRPCMessage().(*apeGRPC.ChainTarget))
|
|
||||||
|
|
||||||
if len(c.chains) > 0 {
|
|
||||||
apeChains := make([]apeGRPC.Chain, len(c.chains))
|
|
||||||
for i := range c.chains {
|
|
||||||
apeChains[i] = *c.chains[i].ToGRPCMessage().(*apeGRPC.Chain)
|
|
||||||
}
|
|
||||||
m.SetChains(apeChains)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *APEOverride) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
v, ok := m.(*acl.BearerToken_Body_APEOverride)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
if targetGRPC := v.GetTarget(); targetGRPC != nil {
|
|
||||||
if c.target == nil {
|
|
||||||
c.target = new(ape.ChainTarget)
|
|
||||||
}
|
|
||||||
if err := c.target.FromGRPCMessage(v.GetTarget()); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if apeChains := v.GetChains(); len(apeChains) > 0 {
|
|
||||||
c.chains = make([]*ape.Chain, len(apeChains))
|
|
||||||
for i := range apeChains {
|
|
||||||
c.chains[i] = new(ape.Chain)
|
|
||||||
if err := c.chains[i].FromGRPCMessage(&apeChains[i]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerTokenBody) ToGRPCMessage() grpc.Message {
|
func (bt *BearerTokenBody) ToGRPCMessage() grpc.Message {
|
||||||
var m *acl.BearerToken_Body
|
var m *acl.BearerToken_Body
|
||||||
|
|
||||||
|
@ -471,8 +427,6 @@ func (bt *BearerTokenBody) ToGRPCMessage() grpc.Message {
|
||||||
m.SetOwnerId(bt.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
|
m.SetOwnerId(bt.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
|
||||||
m.SetLifetime(bt.lifetime.ToGRPCMessage().(*acl.BearerToken_Body_TokenLifetime))
|
m.SetLifetime(bt.lifetime.ToGRPCMessage().(*acl.BearerToken_Body_TokenLifetime))
|
||||||
m.SetEaclTable(bt.eacl.ToGRPCMessage().(*acl.EACLTable))
|
m.SetEaclTable(bt.eacl.ToGRPCMessage().(*acl.EACLTable))
|
||||||
m.SetAllowImpersonate(bt.impersonate)
|
|
||||||
m.SetApeOverride(bt.apeOverride.ToGRPCMessage().(*acl.BearerToken_Body_APEOverride))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -522,22 +476,8 @@ func (bt *BearerTokenBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
bt.eacl = new(Table)
|
bt.eacl = new(Table)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = bt.eacl.FromGRPCMessage(eacl); err != nil {
|
err = bt.eacl.FromGRPCMessage(eacl)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if apeOverrideGRPC := v.GetApeOverride(); apeOverrideGRPC != nil {
|
|
||||||
if bt.apeOverride == nil {
|
|
||||||
bt.apeOverride = new(APEOverride)
|
|
||||||
}
|
|
||||||
err = bt.apeOverride.FromGRPCMessage(apeOverrideGRPC)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bt.impersonate = v.GetAllowImpersonate()
|
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
175
acl/grpc/types.go
Normal file
175
acl/grpc/types.go
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
package acl
|
||||||
|
|
||||||
|
import (
|
||||||
|
refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetVersion sets version of EACL rules in table.
|
||||||
|
func (m *EACLTable) SetVersion(v *refs.Version) {
|
||||||
|
m.Version = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId sets container identifier of the eACL table.
|
||||||
|
func (m *EACLTable) SetContainerId(v *refs.ContainerID) {
|
||||||
|
m.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRecords sets record list of the eACL table.
|
||||||
|
func (m *EACLTable) SetRecords(v []*EACLRecord) {
|
||||||
|
m.Records = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOperation sets operation of the eACL record.
|
||||||
|
func (m *EACLRecord) SetOperation(v Operation) {
|
||||||
|
m.Operation = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAction sets action of the eACL record.
|
||||||
|
func (m *EACLRecord) SetAction(v Action) {
|
||||||
|
m.Action = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFilters sets filter list of the eACL record.
|
||||||
|
func (m *EACLRecord) SetFilters(v []*EACLRecord_Filter) {
|
||||||
|
m.Filters = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetTargets sets target list of the eACL record.
|
||||||
|
func (m *EACLRecord) SetTargets(v []*EACLRecord_Target) {
|
||||||
|
m.Targets = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetHeader sets header type of the eACL filter.
|
||||||
|
func (m *EACLRecord_Filter) SetHeader(v HeaderType) {
|
||||||
|
m.HeaderType = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMatchType sets match type of the eACL filter.
|
||||||
|
func (m *EACLRecord_Filter) SetMatchType(v MatchType) {
|
||||||
|
m.MatchType = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKey sets key of the eACL filter.
|
||||||
|
func (m *EACLRecord_Filter) SetKey(v string) {
|
||||||
|
m.Key = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets value of the eACL filter.
|
||||||
|
func (m *EACLRecord_Filter) SetValue(v string) {
|
||||||
|
m.Value = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRole sets target group of the eACL target.
|
||||||
|
func (m *EACLRecord_Target) SetRole(v Role) {
|
||||||
|
m.Role = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKeys of the eACL target.
|
||||||
|
func (m *EACLRecord_Target) SetKeys(v [][]byte) {
|
||||||
|
m.Keys = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEaclTable sets eACL table of the bearer token.
|
||||||
|
func (m *BearerToken_Body) SetEaclTable(v *EACLTable) {
|
||||||
|
m.EaclTable = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOwnerId sets identifier of the bearer token owner.
|
||||||
|
func (m *BearerToken_Body) SetOwnerId(v *refs.OwnerID) {
|
||||||
|
m.OwnerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLifetime sets lifetime of the bearer token.
|
||||||
|
func (m *BearerToken_Body) SetLifetime(v *BearerToken_Body_TokenLifetime) {
|
||||||
|
m.Lifetime = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets bearer token body.
|
||||||
|
func (m *BearerToken) SetBody(v *BearerToken_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets bearer token signature.
|
||||||
|
func (m *BearerToken) SetSignature(v *refs.Signature) {
|
||||||
|
m.Signature = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExp sets epoch number of the token expiration.
|
||||||
|
func (m *BearerToken_Body_TokenLifetime) SetExp(v uint64) {
|
||||||
|
m.Exp = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNbf sets starting epoch number of the token.
|
||||||
|
func (m *BearerToken_Body_TokenLifetime) SetNbf(v uint64) {
|
||||||
|
m.Nbf = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetIat sets the number of the epoch in which the token was issued.
|
||||||
|
func (m *BearerToken_Body_TokenLifetime) SetIat(v uint64) {
|
||||||
|
m.Iat = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses Action from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *Action) FromString(s string) bool {
|
||||||
|
i, ok := Action_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = Action(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses Role from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *Role) FromString(s string) bool {
|
||||||
|
i, ok := Role_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = Role(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses Operation from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *Operation) FromString(s string) bool {
|
||||||
|
i, ok := Operation_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = Operation(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses MatchType from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *MatchType) FromString(s string) bool {
|
||||||
|
i, ok := MatchType_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = MatchType(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses HeaderType from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *HeaderType) FromString(s string) bool {
|
||||||
|
i, ok := HeaderType_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = HeaderType(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
BIN
acl/grpc/types.pb.go
generated
Normal file
BIN
acl/grpc/types.pb.go
generated
Normal file
Binary file not shown.
BIN
acl/grpc/types_frostfs.pb.go
generated
BIN
acl/grpc/types_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,64 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package acl
|
|
||||||
|
|
||||||
func DoFuzzProtoEACLRecord(data []byte) int {
|
|
||||||
msg := new(EACLRecord)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONEACLRecord(data []byte) int {
|
|
||||||
msg := new(EACLRecord)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoEACLTable(data []byte) int {
|
|
||||||
msg := new(EACLTable)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONEACLTable(data []byte) int {
|
|
||||||
msg := new(EACLTable)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoBearerToken(data []byte) int {
|
|
||||||
msg := new(BearerToken)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONBearerToken(data []byte) int {
|
|
||||||
msg := new(BearerToken)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package acl
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoEACLRecord(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoEACLRecord(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONEACLRecord(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONEACLRecord(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoEACLTable(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoEACLTable(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONEACLTable(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONEACLTable(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoBearerToken(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoBearerToken(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONBearerToken(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONBearerToken(data)
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -21,14 +21,6 @@ func (t *Target) UnmarshalJSON(data []byte) error {
|
||||||
return message.UnmarshalJSON(t, data, new(acl.EACLRecord_Target))
|
return message.UnmarshalJSON(t, data, new(acl.EACLRecord_Target))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *APEOverride) MarshalJSON() ([]byte, error) {
|
|
||||||
return message.MarshalJSON(a)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *APEOverride) UnmarshalJSON(data []byte) error {
|
|
||||||
return message.UnmarshalJSON(a, data, new(acl.BearerToken_Body_APEOverride))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Record) MarshalJSON() ([]byte, error) {
|
func (r *Record) MarshalJSON() ([]byte, error) {
|
||||||
return message.MarshalJSON(r)
|
return message.MarshalJSON(r)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,14 +28,9 @@ const (
|
||||||
lifetimeNotValidBeforeField = 2
|
lifetimeNotValidBeforeField = 2
|
||||||
lifetimeIssuedAtField = 3
|
lifetimeIssuedAtField = 3
|
||||||
|
|
||||||
tokenAPEChainsTargetField = 1
|
|
||||||
tokenAPEChainsChainsField = 2
|
|
||||||
|
|
||||||
bearerTokenBodyACLField = 1
|
bearerTokenBodyACLField = 1
|
||||||
bearerTokenBodyOwnerField = 2
|
bearerTokenBodyOwnerField = 2
|
||||||
bearerTokenBodyLifetimeField = 3
|
bearerTokenBodyLifetimeField = 3
|
||||||
bearerTokenBodyImpersonate = 4
|
|
||||||
bearerTokenTokenAPEChainsField = 5
|
|
||||||
|
|
||||||
bearerTokenBodyField = 1
|
bearerTokenBodyField = 1
|
||||||
bearerTokenSignatureField = 2
|
bearerTokenSignatureField = 2
|
||||||
|
@ -243,42 +238,6 @@ func (l *TokenLifetime) Unmarshal(data []byte) error {
|
||||||
return message.Unmarshal(l, data, new(acl.BearerToken_Body_TokenLifetime))
|
return message.Unmarshal(l, data, new(acl.BearerToken_Body_TokenLifetime))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *APEOverride) StableMarshal(buf []byte) []byte {
|
|
||||||
if c == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, c.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
|
|
||||||
offset += protoutil.NestedStructureMarshal(tokenAPEChainsTargetField, buf[offset:], c.target)
|
|
||||||
for i := range c.chains {
|
|
||||||
offset += protoutil.NestedStructureMarshal(tokenAPEChainsChainsField, buf[offset:], c.chains[i])
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *APEOverride) StableSize() (size int) {
|
|
||||||
if c == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += protoutil.NestedStructureSize(tokenAPEChainsTargetField, c.target)
|
|
||||||
for i := range c.chains {
|
|
||||||
size += protoutil.NestedStructureSize(tokenAPEChainsChainsField, c.chains[i])
|
|
||||||
}
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *APEOverride) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(c, data, new(acl.BearerToken_Body_APEOverride))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerTokenBody) StableMarshal(buf []byte) []byte {
|
func (bt *BearerTokenBody) StableMarshal(buf []byte) []byte {
|
||||||
if bt == nil {
|
if bt == nil {
|
||||||
return []byte{}
|
return []byte{}
|
||||||
|
@ -292,9 +251,7 @@ func (bt *BearerTokenBody) StableMarshal(buf []byte) []byte {
|
||||||
|
|
||||||
offset += protoutil.NestedStructureMarshal(bearerTokenBodyACLField, buf[offset:], bt.eacl)
|
offset += protoutil.NestedStructureMarshal(bearerTokenBodyACLField, buf[offset:], bt.eacl)
|
||||||
offset += protoutil.NestedStructureMarshal(bearerTokenBodyOwnerField, buf[offset:], bt.ownerID)
|
offset += protoutil.NestedStructureMarshal(bearerTokenBodyOwnerField, buf[offset:], bt.ownerID)
|
||||||
offset += protoutil.NestedStructureMarshal(bearerTokenBodyLifetimeField, buf[offset:], bt.lifetime)
|
protoutil.NestedStructureMarshal(bearerTokenBodyLifetimeField, buf[offset:], bt.lifetime)
|
||||||
offset += protoutil.BoolMarshal(bearerTokenBodyImpersonate, buf[offset:], bt.impersonate)
|
|
||||||
protoutil.NestedStructureMarshal(bearerTokenTokenAPEChainsField, buf[offset:], bt.apeOverride)
|
|
||||||
|
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
@ -307,8 +264,6 @@ func (bt *BearerTokenBody) StableSize() (size int) {
|
||||||
size += protoutil.NestedStructureSize(bearerTokenBodyACLField, bt.eacl)
|
size += protoutil.NestedStructureSize(bearerTokenBodyACLField, bt.eacl)
|
||||||
size += protoutil.NestedStructureSize(bearerTokenBodyOwnerField, bt.ownerID)
|
size += protoutil.NestedStructureSize(bearerTokenBodyOwnerField, bt.ownerID)
|
||||||
size += protoutil.NestedStructureSize(bearerTokenBodyLifetimeField, bt.lifetime)
|
size += protoutil.NestedStructureSize(bearerTokenBodyLifetimeField, bt.lifetime)
|
||||||
size += protoutil.BoolSize(bearerTokenBodyImpersonate, bt.impersonate)
|
|
||||||
size += protoutil.NestedStructureSize(bearerTokenTokenAPEChainsField, bt.apeOverride)
|
|
||||||
|
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package acltest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
|
||||||
apetest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/test"
|
|
||||||
accountingtest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/test"
|
accountingtest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,20 +22,8 @@ func GenerateBearerTokenBody(empty bool) *acl.BearerTokenBody {
|
||||||
|
|
||||||
if !empty {
|
if !empty {
|
||||||
m.SetOwnerID(accountingtest.GenerateOwnerID(false))
|
m.SetOwnerID(accountingtest.GenerateOwnerID(false))
|
||||||
|
m.SetEACL(GenerateTable(false))
|
||||||
m.SetLifetime(GenerateTokenLifetime(false))
|
m.SetLifetime(GenerateTokenLifetime(false))
|
||||||
m.SetAPEOverride(GenerateAPEOverride(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateAPEOverride(empty bool) *acl.APEOverride {
|
|
||||||
var m *acl.APEOverride
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m = new(acl.APEOverride)
|
|
||||||
m.SetTarget(apetest.GenerateChainTarget(empty))
|
|
||||||
m.SetChains(apetest.GenerateRawChains(false, 3))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
63
acl/types.go
63
acl/types.go
|
@ -1,9 +1,6 @@
|
||||||
package acl
|
package acl
|
||||||
|
|
||||||
import (
|
import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
|
||||||
)
|
|
||||||
|
|
||||||
// HeaderFilter is a unified structure of FilterInfo
|
// HeaderFilter is a unified structure of FilterInfo
|
||||||
// message from proto definition.
|
// message from proto definition.
|
||||||
|
@ -49,22 +46,12 @@ type TokenLifetime struct {
|
||||||
exp, nbf, iat uint64
|
exp, nbf, iat uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
type APEOverride struct {
|
|
||||||
target *ape.ChainTarget
|
|
||||||
|
|
||||||
chains []*ape.Chain
|
|
||||||
}
|
|
||||||
|
|
||||||
type BearerTokenBody struct {
|
type BearerTokenBody struct {
|
||||||
eacl *Table
|
eacl *Table
|
||||||
|
|
||||||
ownerID *refs.OwnerID
|
ownerID *refs.OwnerID
|
||||||
|
|
||||||
lifetime *TokenLifetime
|
lifetime *TokenLifetime
|
||||||
|
|
||||||
apeOverride *APEOverride
|
|
||||||
|
|
||||||
impersonate bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type BearerToken struct {
|
type BearerToken struct {
|
||||||
|
@ -329,42 +316,6 @@ func (bt *BearerTokenBody) SetEACL(v *Table) {
|
||||||
bt.eacl = v
|
bt.eacl = v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *APEOverride) GetTarget() *ape.ChainTarget {
|
|
||||||
if t == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return t.target
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *APEOverride) GetChains() []*ape.Chain {
|
|
||||||
if t == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return t.chains
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *APEOverride) SetTarget(v *ape.ChainTarget) {
|
|
||||||
t.target = v
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *APEOverride) SetChains(v []*ape.Chain) {
|
|
||||||
t.chains = v
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerTokenBody) GetAPEOverride() *APEOverride {
|
|
||||||
if bt != nil {
|
|
||||||
return bt.apeOverride
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerTokenBody) SetAPEOverride(v *APEOverride) {
|
|
||||||
bt.apeOverride = v
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerTokenBody) GetOwnerID() *refs.OwnerID {
|
func (bt *BearerTokenBody) GetOwnerID() *refs.OwnerID {
|
||||||
if bt != nil {
|
if bt != nil {
|
||||||
return bt.ownerID
|
return bt.ownerID
|
||||||
|
@ -389,18 +340,6 @@ func (bt *BearerTokenBody) SetLifetime(v *TokenLifetime) {
|
||||||
bt.lifetime = v
|
bt.lifetime = v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bt *BearerTokenBody) GetImpersonate() bool {
|
|
||||||
if bt != nil {
|
|
||||||
return bt.impersonate
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerTokenBody) SetImpersonate(v bool) {
|
|
||||||
bt.impersonate = v
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bt *BearerToken) GetBody() *BearerTokenBody {
|
func (bt *BearerToken) GetBody() *BearerTokenBody {
|
||||||
if bt != nil {
|
if bt != nil {
|
||||||
return bt.body
|
return bt.body
|
||||||
|
|
132
ape/convert.go
132
ape/convert.go
|
@ -1,132 +0,0 @@
|
||||||
package ape
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
ape "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TargetTypeToGRPCField(typ TargetType) ape.TargetType {
|
|
||||||
switch typ {
|
|
||||||
case TargetTypeNamespace:
|
|
||||||
return ape.TargetType_NAMESPACE
|
|
||||||
case TargetTypeContainer:
|
|
||||||
return ape.TargetType_CONTAINER
|
|
||||||
case TargetTypeUser:
|
|
||||||
return ape.TargetType_USER
|
|
||||||
case TargetTypeGroup:
|
|
||||||
return ape.TargetType_GROUP
|
|
||||||
default:
|
|
||||||
return ape.TargetType_UNDEFINED
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TargetTypeFromGRPCField(typ ape.TargetType) TargetType {
|
|
||||||
switch typ {
|
|
||||||
case ape.TargetType_NAMESPACE:
|
|
||||||
return TargetTypeNamespace
|
|
||||||
case ape.TargetType_CONTAINER:
|
|
||||||
return TargetTypeContainer
|
|
||||||
case ape.TargetType_USER:
|
|
||||||
return TargetTypeUser
|
|
||||||
case ape.TargetType_GROUP:
|
|
||||||
return TargetTypeGroup
|
|
||||||
default:
|
|
||||||
return TargetTypeUndefined
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TargetTypeToGRPC(typ TargetType) ape.TargetType {
|
|
||||||
return ape.TargetType(typ)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TargetTypeFromGRPC(typ ape.TargetType) TargetType {
|
|
||||||
return TargetType(typ)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v2 *ChainTarget) ToGRPCMessage() grpc.Message {
|
|
||||||
var mgrpc *ape.ChainTarget
|
|
||||||
|
|
||||||
if v2 != nil {
|
|
||||||
mgrpc = new(ape.ChainTarget)
|
|
||||||
|
|
||||||
mgrpc.SetType(TargetTypeToGRPC(v2.GetTargetType()))
|
|
||||||
mgrpc.SetName(v2.GetName())
|
|
||||||
}
|
|
||||||
|
|
||||||
return mgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v2 *ChainTarget) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
mgrpc, ok := m.(*ape.ChainTarget)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, mgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
v2.SetTargetType(TargetTypeFromGRPC(mgrpc.GetType()))
|
|
||||||
v2.SetName(mgrpc.GetName())
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v2 *ChainRaw) ToGRPCMessage() grpc.Message {
|
|
||||||
var mgrpc *ape.Chain_Raw
|
|
||||||
|
|
||||||
if v2 != nil {
|
|
||||||
mgrpc = new(ape.Chain_Raw)
|
|
||||||
|
|
||||||
mgrpc.SetRaw(v2.GetRaw())
|
|
||||||
}
|
|
||||||
|
|
||||||
return mgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v2 *ChainRaw) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
mgrpc, ok := m.(*ape.Chain_Raw)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, mgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
v2.SetRaw(mgrpc.GetRaw())
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v2 *Chain) ToGRPCMessage() grpc.Message {
|
|
||||||
var mgrpc *ape.Chain
|
|
||||||
|
|
||||||
if v2 != nil {
|
|
||||||
mgrpc = new(ape.Chain)
|
|
||||||
|
|
||||||
switch chainKind := v2.GetKind().(type) {
|
|
||||||
default:
|
|
||||||
panic(fmt.Sprintf("unsupported chain kind: %T", chainKind))
|
|
||||||
case *ChainRaw:
|
|
||||||
mgrpc.SetKind(chainKind.ToGRPCMessage().(*ape.Chain_Raw))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return mgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v2 *Chain) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
mgrpc, ok := m.(*ape.Chain)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, mgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
switch chainKind := mgrpc.GetKind().(type) {
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("unsupported chain kind: %T", chainKind)
|
|
||||||
case *ape.Chain_Raw:
|
|
||||||
chainRaw := new(ChainRaw)
|
|
||||||
if err := chainRaw.FromGRPCMessage(chainKind); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
v2.SetKind(chainRaw)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
BIN
ape/grpc/types_frostfs.pb.go
generated
BIN
ape/grpc/types_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,45 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package ape
|
|
||||||
|
|
||||||
func DoFuzzProtoChainTarget(data []byte) int {
|
|
||||||
msg := new(ChainTarget)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONChainTarget(data []byte) int {
|
|
||||||
msg := new(ChainTarget)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoChain(data []byte) int {
|
|
||||||
msg := new(Chain)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONChain(data []byte) int {
|
|
||||||
msg := new(Chain)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package ape
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoChainTarget(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoChainTarget(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONChainTarget(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONChainTarget(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoChain(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoChain(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONChain(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONChain(data)
|
|
||||||
})
|
|
||||||
}
|
|
14
ape/json.go
14
ape/json.go
|
@ -1,14 +0,0 @@
|
||||||
package ape
|
|
||||||
|
|
||||||
import (
|
|
||||||
ape "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (t *ChainTarget) MarshalJSON() ([]byte, error) {
|
|
||||||
return message.MarshalJSON(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *ChainTarget) UnmarshalJSON(data []byte) error {
|
|
||||||
return message.UnmarshalJSON(t, data, new(ape.ChainTarget))
|
|
||||||
}
|
|
|
@ -1,92 +0,0 @@
|
||||||
package ape
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
ape "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
chainTargetTargetTypeField = 1
|
|
||||||
chainTargetNameField = 2
|
|
||||||
|
|
||||||
chainRawField = 1
|
|
||||||
)
|
|
||||||
|
|
||||||
func (t *ChainTarget) StableSize() (size int) {
|
|
||||||
if t == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += proto.EnumSize(chainTargetTargetTypeField, int32(t.targeType))
|
|
||||||
size += proto.StringSize(chainTargetNameField, t.name)
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *ChainTarget) StableMarshal(buf []byte) []byte {
|
|
||||||
if t == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, t.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
|
|
||||||
offset += proto.EnumMarshal(chainTargetTargetTypeField, buf[offset:], int32(t.targeType))
|
|
||||||
proto.StringMarshal(chainTargetNameField, buf[offset:], t.name)
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *ChainTarget) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(t, data, new(ape.ChainTarget))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Chain) StableSize() (size int) {
|
|
||||||
if c == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
switch v := c.GetKind().(type) {
|
|
||||||
case *ChainRaw:
|
|
||||||
if v != nil {
|
|
||||||
size += proto.BytesSize(chainRawField, v.GetRaw())
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
panic(fmt.Sprintf("unsupported chain kind: %T", v))
|
|
||||||
}
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Chain) StableMarshal(buf []byte) []byte {
|
|
||||||
if c == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, c.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
|
|
||||||
switch v := c.GetKind().(type) {
|
|
||||||
case *ChainRaw:
|
|
||||||
if v != nil {
|
|
||||||
proto.BytesMarshal(chainRawField, buf[offset:], v.GetRaw())
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
panic(fmt.Sprintf("unsupported chain kind: %T", v))
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Chain) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(c, data, new(ape.Chain))
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
package ape
|
|
||||||
|
|
||||||
import (
|
|
||||||
apegrpc "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (tt TargetType) String() string {
|
|
||||||
return TargetTypeToGRPCField(tt).String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tt *TargetType) FromString(s string) bool {
|
|
||||||
i, ok := apegrpc.TargetType_value[s]
|
|
||||||
if ok {
|
|
||||||
*tt = TargetType(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
package test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GenerateRawChains(empty bool, n int) []*ape.Chain {
|
|
||||||
if empty {
|
|
||||||
return []*ape.Chain{}
|
|
||||||
}
|
|
||||||
|
|
||||||
res := make([]*ape.Chain, n)
|
|
||||||
for i := range res {
|
|
||||||
res[i] = GenerateRawChain(empty)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateRawChain(empty bool) *ape.Chain {
|
|
||||||
chRaw := new(ape.ChainRaw)
|
|
||||||
|
|
||||||
if empty {
|
|
||||||
chRaw.SetRaw([]byte("{}"))
|
|
||||||
} else {
|
|
||||||
chRaw.SetRaw([]byte(`{
|
|
||||||
"ID": "",
|
|
||||||
"Rules": [
|
|
||||||
{
|
|
||||||
"Status": "Allow",
|
|
||||||
"Actions": {
|
|
||||||
"Inverted": false,
|
|
||||||
"Names": [
|
|
||||||
"GetObject"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Resources": {
|
|
||||||
"Inverted": false,
|
|
||||||
"Names": [
|
|
||||||
"native:object/*"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Any": false,
|
|
||||||
"Condition": [
|
|
||||||
{
|
|
||||||
"Op": "StringEquals",
|
|
||||||
"Object": "Resource",
|
|
||||||
"Key": "Department",
|
|
||||||
"Value": "HR"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MatchType": "DenyPriority"
|
|
||||||
}`))
|
|
||||||
}
|
|
||||||
|
|
||||||
ch := new(ape.Chain)
|
|
||||||
ch.SetKind(chRaw)
|
|
||||||
return ch
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateChainTarget(empty bool) *ape.ChainTarget {
|
|
||||||
m := new(ape.ChainTarget)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetTargetType(ape.TargetTypeContainer)
|
|
||||||
m.SetName("BzQw5HH3feoxFDD5tCT87Y1726qzgLfxEE7wgtoRzB3R")
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
79
ape/types.go
79
ape/types.go
|
@ -1,79 +0,0 @@
|
||||||
package ape
|
|
||||||
|
|
||||||
type TargetType uint32
|
|
||||||
|
|
||||||
const (
|
|
||||||
TargetTypeUndefined TargetType = iota
|
|
||||||
TargetTypeNamespace
|
|
||||||
TargetTypeContainer
|
|
||||||
TargetTypeUser
|
|
||||||
TargetTypeGroup
|
|
||||||
)
|
|
||||||
|
|
||||||
type ChainTarget struct {
|
|
||||||
targeType TargetType
|
|
||||||
|
|
||||||
name string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ct *ChainTarget) SetTargetType(targeType TargetType) {
|
|
||||||
ct.targeType = targeType
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ct *ChainTarget) SetName(name string) {
|
|
||||||
ct.name = name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ct *ChainTarget) GetTargetType() TargetType {
|
|
||||||
if ct != nil {
|
|
||||||
return ct.targeType
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ct *ChainTarget) GetName() string {
|
|
||||||
if ct != nil {
|
|
||||||
return ct.name
|
|
||||||
}
|
|
||||||
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type chainKind interface {
|
|
||||||
isChainKind()
|
|
||||||
}
|
|
||||||
|
|
||||||
type Chain struct {
|
|
||||||
kind chainKind
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Chain) SetKind(kind chainKind) {
|
|
||||||
c.kind = kind
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Chain) GetKind() chainKind {
|
|
||||||
if c == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.kind
|
|
||||||
}
|
|
||||||
|
|
||||||
type ChainRaw struct {
|
|
||||||
Raw []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ChainRaw) isChainKind() {}
|
|
||||||
|
|
||||||
func (c *ChainRaw) SetRaw(raw []byte) {
|
|
||||||
c.Raw = raw
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *ChainRaw) GetRaw() []byte {
|
|
||||||
if c == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.Raw
|
|
||||||
}
|
|
|
@ -1,358 +0,0 @@
|
||||||
package apemanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
ape "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
|
|
||||||
apeGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc"
|
|
||||||
apemanager "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (reqBody *AddChainRequestBody) ToGRPCMessage() grpc.Message {
|
|
||||||
var reqBodygrpc *apemanager.AddChainRequest_Body
|
|
||||||
|
|
||||||
if reqBody != nil {
|
|
||||||
reqBodygrpc = new(apemanager.AddChainRequest_Body)
|
|
||||||
|
|
||||||
reqBodygrpc.SetTarget(reqBody.GetTarget().ToGRPCMessage().(*apeGRPC.ChainTarget))
|
|
||||||
reqBodygrpc.SetChain(reqBody.GetChain().ToGRPCMessage().(*apeGRPC.Chain))
|
|
||||||
}
|
|
||||||
|
|
||||||
return reqBodygrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (reqBody *AddChainRequestBody) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
reqBodygrpc, ok := m.(*apemanager.AddChainRequest_Body)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, reqBodygrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if targetgrpc := reqBodygrpc.GetTarget(); targetgrpc != nil {
|
|
||||||
reqBody.target = new(ape.ChainTarget)
|
|
||||||
if err := reqBody.target.FromGRPCMessage(targetgrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if chaingrpc := reqBodygrpc.GetChain(); chaingrpc != nil {
|
|
||||||
reqBody.chain = new(ape.Chain)
|
|
||||||
if err := reqBody.GetChain().FromGRPCMessage(chaingrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (req *AddChainRequest) ToGRPCMessage() grpc.Message {
|
|
||||||
var reqgrpc *apemanager.AddChainRequest
|
|
||||||
|
|
||||||
if req != nil {
|
|
||||||
reqgrpc = new(apemanager.AddChainRequest)
|
|
||||||
|
|
||||||
reqgrpc.SetBody(req.GetBody().ToGRPCMessage().(*apemanager.AddChainRequest_Body))
|
|
||||||
req.RequestHeaders.ToMessage(reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return reqgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (req *AddChainRequest) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
reqgrpc, ok := m.(*apemanager.AddChainRequest)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if reqBodygrpc := reqgrpc.GetBody(); reqBodygrpc != nil {
|
|
||||||
req.body = new(AddChainRequestBody)
|
|
||||||
if err := req.body.FromGRPCMessage(reqBodygrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return req.RequestHeaders.FromMessage(reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (respBody *AddChainResponseBody) ToGRPCMessage() grpc.Message {
|
|
||||||
var respBodygrpc *apemanager.AddChainResponse_Body
|
|
||||||
|
|
||||||
if respBody != nil {
|
|
||||||
respBodygrpc = new(apemanager.AddChainResponse_Body)
|
|
||||||
|
|
||||||
respBodygrpc.SetChainId(respBody.GetChainID())
|
|
||||||
}
|
|
||||||
|
|
||||||
return respBodygrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (respBody *AddChainResponseBody) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
respBodygrpc, ok := m.(*apemanager.AddChainResponse_Body)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, respBodygrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
respBody.SetChainID(respBodygrpc.GetChainId())
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (resp *AddChainResponse) ToGRPCMessage() grpc.Message {
|
|
||||||
var respgrpc *apemanager.AddChainResponse
|
|
||||||
|
|
||||||
if resp != nil {
|
|
||||||
respgrpc = new(apemanager.AddChainResponse)
|
|
||||||
|
|
||||||
respgrpc.SetBody(resp.body.ToGRPCMessage().(*apemanager.AddChainResponse_Body))
|
|
||||||
resp.ResponseHeaders.ToMessage(respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return respgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (resp *AddChainResponse) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
respgrpc, ok := m.(*apemanager.AddChainResponse)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if respBodygrpc := respgrpc.GetBody(); respBodygrpc != nil {
|
|
||||||
resp.body = new(AddChainResponseBody)
|
|
||||||
if err := resp.body.FromGRPCMessage(respBodygrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return resp.ResponseHeaders.FromMessage(respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (reqBody *RemoveChainRequestBody) ToGRPCMessage() grpc.Message {
|
|
||||||
var reqBodygrpc *apemanager.RemoveChainRequest_Body
|
|
||||||
|
|
||||||
if reqBody != nil {
|
|
||||||
reqBodygrpc = new(apemanager.RemoveChainRequest_Body)
|
|
||||||
|
|
||||||
reqBodygrpc.SetTarget(reqBody.target.ToGRPCMessage().(*apeGRPC.ChainTarget))
|
|
||||||
reqBodygrpc.SetChainId(reqBody.GetChainID())
|
|
||||||
}
|
|
||||||
|
|
||||||
return reqBodygrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (reqBody *RemoveChainRequestBody) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
reqBodygrpc, ok := m.(*apemanager.RemoveChainRequest_Body)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, reqBodygrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if targetgrpc := reqBodygrpc.GetTarget(); targetgrpc != nil {
|
|
||||||
reqBody.target = new(ape.ChainTarget)
|
|
||||||
if err := reqBody.target.FromGRPCMessage(targetgrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
reqBody.SetChainID(reqBodygrpc.GetChainId())
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (req *RemoveChainRequest) ToGRPCMessage() grpc.Message {
|
|
||||||
var reqgrpc *apemanager.RemoveChainRequest
|
|
||||||
|
|
||||||
if req != nil {
|
|
||||||
reqgrpc = new(apemanager.RemoveChainRequest)
|
|
||||||
|
|
||||||
reqgrpc.SetBody(req.body.ToGRPCMessage().(*apemanager.RemoveChainRequest_Body))
|
|
||||||
req.RequestHeaders.ToMessage(reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return reqgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (req *RemoveChainRequest) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
reqgrpc, ok := m.(*apemanager.RemoveChainRequest)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if reqBodygrpc := reqgrpc.GetBody(); reqBodygrpc != nil {
|
|
||||||
req.body = new(RemoveChainRequestBody)
|
|
||||||
if err := req.body.FromGRPCMessage(reqBodygrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return req.RequestHeaders.FromMessage(reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (respBody *RemoveChainResponseBody) ToGRPCMessage() grpc.Message {
|
|
||||||
var respBodygrpc *apemanager.RemoveChainResponse_Body
|
|
||||||
|
|
||||||
if respBody != nil {
|
|
||||||
respBodygrpc = new(apemanager.RemoveChainResponse_Body)
|
|
||||||
}
|
|
||||||
|
|
||||||
return respBodygrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (respBody *RemoveChainResponseBody) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
respBodygrpc, ok := m.(*apemanager.RemoveChainResponse_Body)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, respBodygrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (resp *RemoveChainResponse) ToGRPCMessage() grpc.Message {
|
|
||||||
var respgrpc *apemanager.RemoveChainResponse
|
|
||||||
|
|
||||||
if resp != nil {
|
|
||||||
respgrpc = new(apemanager.RemoveChainResponse)
|
|
||||||
|
|
||||||
respgrpc.SetBody(resp.body.ToGRPCMessage().(*apemanager.RemoveChainResponse_Body))
|
|
||||||
resp.ResponseHeaders.ToMessage(respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return respgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (resp *RemoveChainResponse) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
respgrpc, ok := m.(*apemanager.RemoveChainResponse)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if respBodygrpc := respgrpc.GetBody(); respBodygrpc != nil {
|
|
||||||
resp.body = new(RemoveChainResponseBody)
|
|
||||||
if err := resp.body.FromGRPCMessage(respBodygrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return resp.ResponseHeaders.FromMessage(respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (reqBody *ListChainsRequestBody) ToGRPCMessage() grpc.Message {
|
|
||||||
var reqBodygrpc *apemanager.ListChainsRequest_Body
|
|
||||||
|
|
||||||
if reqBody != nil {
|
|
||||||
reqBodygrpc = new(apemanager.ListChainsRequest_Body)
|
|
||||||
|
|
||||||
reqBodygrpc.SetTarget(reqBody.target.ToGRPCMessage().(*apeGRPC.ChainTarget))
|
|
||||||
}
|
|
||||||
|
|
||||||
return reqBodygrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (reqBody *ListChainsRequestBody) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
reqBodygrpc, ok := m.(*apemanager.ListChainsRequest_Body)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, reqBodygrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if targetgrpc := reqBodygrpc.GetTarget(); targetgrpc != nil {
|
|
||||||
reqBody.target = new(ape.ChainTarget)
|
|
||||||
if err := reqBody.target.FromGRPCMessage(targetgrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (req *ListChainsRequest) ToGRPCMessage() grpc.Message {
|
|
||||||
var reqgrpc *apemanager.ListChainsRequest
|
|
||||||
|
|
||||||
if req != nil {
|
|
||||||
reqgrpc = new(apemanager.ListChainsRequest)
|
|
||||||
|
|
||||||
reqgrpc.SetBody(req.body.ToGRPCMessage().(*apemanager.ListChainsRequest_Body))
|
|
||||||
req.RequestHeaders.ToMessage(reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return reqgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (req *ListChainsRequest) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
reqgrpc, ok := m.(*apemanager.ListChainsRequest)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if reqBodygrpc := reqgrpc.GetBody(); reqBodygrpc != nil {
|
|
||||||
req.body = new(ListChainsRequestBody)
|
|
||||||
if err := req.body.FromGRPCMessage(reqBodygrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return req.RequestHeaders.FromMessage(reqgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (respBody *ListChainsResponseBody) ToGRPCMessage() grpc.Message {
|
|
||||||
var respBodygrpc *apemanager.ListChainsResponse_Body
|
|
||||||
|
|
||||||
if respBody != nil {
|
|
||||||
respBodygrpc = new(apemanager.ListChainsResponse_Body)
|
|
||||||
|
|
||||||
chainsgrpc := make([]apeGRPC.Chain, 0, len(respBody.GetChains()))
|
|
||||||
for _, chain := range respBody.GetChains() {
|
|
||||||
chainsgrpc = append(chainsgrpc, *chain.ToGRPCMessage().(*apeGRPC.Chain))
|
|
||||||
}
|
|
||||||
|
|
||||||
respBodygrpc.SetChains(chainsgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return respBodygrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (respBody *ListChainsResponseBody) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
respBodygrpc, ok := m.(*apemanager.ListChainsResponse_Body)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, respBodygrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
chains := make([]*ape.Chain, 0, len(respBodygrpc.GetChains()))
|
|
||||||
|
|
||||||
for _, chaingrpc := range respBodygrpc.GetChains() {
|
|
||||||
chain := new(ape.Chain)
|
|
||||||
if err := chain.FromGRPCMessage(&chaingrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
chains = append(chains, chain)
|
|
||||||
}
|
|
||||||
|
|
||||||
respBody.SetChains(chains)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (resp *ListChainsResponse) ToGRPCMessage() grpc.Message {
|
|
||||||
var respgrpc *apemanager.ListChainsResponse
|
|
||||||
|
|
||||||
if resp != nil {
|
|
||||||
respgrpc = new(apemanager.ListChainsResponse)
|
|
||||||
|
|
||||||
respgrpc.SetBody(resp.body.ToGRPCMessage().(*apemanager.ListChainsResponse_Body))
|
|
||||||
resp.ResponseHeaders.ToMessage(respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
return respgrpc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (resp *ListChainsResponse) FromGRPCMessage(m grpc.Message) error {
|
|
||||||
respgrpc, ok := m.(*apemanager.ListChainsResponse)
|
|
||||||
if !ok {
|
|
||||||
return message.NewUnexpectedMessageType(m, respgrpc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if respBodygrpc := respgrpc.GetBody(); respBodygrpc != nil {
|
|
||||||
resp.body = new(ListChainsResponseBody)
|
|
||||||
if err := resp.body.FromGRPCMessage(respBodygrpc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return resp.ResponseHeaders.FromMessage(respgrpc)
|
|
||||||
}
|
|
BIN
apemanager/grpc/service_frostfs.pb.go
generated
BIN
apemanager/grpc/service_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,121 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package apemanager
|
|
||||||
|
|
||||||
func DoFuzzProtoAddChainRequest(data []byte) int {
|
|
||||||
msg := new(AddChainRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONAddChainRequest(data []byte) int {
|
|
||||||
msg := new(AddChainRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoAddChainResponse(data []byte) int {
|
|
||||||
msg := new(AddChainResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONAddChainResponse(data []byte) int {
|
|
||||||
msg := new(AddChainResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoRemoveChainRequest(data []byte) int {
|
|
||||||
msg := new(RemoveChainRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONRemoveChainRequest(data []byte) int {
|
|
||||||
msg := new(RemoveChainRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoRemoveChainResponse(data []byte) int {
|
|
||||||
msg := new(RemoveChainResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONRemoveChainResponse(data []byte) int {
|
|
||||||
msg := new(RemoveChainResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoListChainsRequest(data []byte) int {
|
|
||||||
msg := new(ListChainsRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONListChainsRequest(data []byte) int {
|
|
||||||
msg := new(ListChainsRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoListChainsResponse(data []byte) int {
|
|
||||||
msg := new(ListChainsResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONListChainsResponse(data []byte) int {
|
|
||||||
msg := new(ListChainsResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package apemanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoAddChainRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoAddChainRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONAddChainRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONAddChainRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoAddChainResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoAddChainResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONAddChainResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONAddChainResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoRemoveChainRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoRemoveChainRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONRemoveChainRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONRemoveChainRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoRemoveChainResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoRemoveChainResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONRemoveChainResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONRemoveChainResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoListChainsRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoListChainsRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONListChainsRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONListChainsRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoListChainsResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoListChainsResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONListChainsResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONListChainsResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
BIN
apemanager/grpc/service_grpc.pb.go
generated
BIN
apemanager/grpc/service_grpc.pb.go
generated
Binary file not shown.
|
@ -1,205 +0,0 @@
|
||||||
package apemanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
apemanager "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager/grpc"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
addChainReqBodyTargetField = 1
|
|
||||||
addChainReqBodyChainField = 2
|
|
||||||
|
|
||||||
addChainRespBodyChainIDField = 1
|
|
||||||
|
|
||||||
removeChainReqBodyTargetField = 1
|
|
||||||
removeChainReqBodyChainField = 2
|
|
||||||
|
|
||||||
/*
|
|
||||||
Fields for RemoveResponseBody are missed since RemoveResponseBody is empty.
|
|
||||||
*/
|
|
||||||
|
|
||||||
listChainsReqBodyTargetField = 1
|
|
||||||
|
|
||||||
listChainsRespBodyChainsField = 1
|
|
||||||
)
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) StableSize() (size int) {
|
|
||||||
if rb == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += proto.NestedStructureSize(addChainReqBodyTargetField, rb.target)
|
|
||||||
size += proto.NestedStructureSize(addChainReqBodyChainField, rb.chain)
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) StableMarshal(buf []byte) []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, rb.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
|
|
||||||
offset += proto.NestedStructureMarshal(addChainReqBodyTargetField, buf[offset:], rb.target)
|
|
||||||
proto.NestedStructureMarshal(addChainReqBodyChainField, buf[offset:], rb.chain)
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(rb, data, new(apemanager.AddChainRequest_Body))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainResponseBody) StableSize() (size int) {
|
|
||||||
if rb == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += proto.BytesSize(addChainRespBodyChainIDField, rb.chainID)
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainResponseBody) StableMarshal(buf []byte) []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, rb.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
|
|
||||||
proto.BytesMarshal(addChainRespBodyChainIDField, buf[offset:], rb.chainID)
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainResponseBody) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(rb, data, new(apemanager.AddChainResponse_Body))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) StableSize() (size int) {
|
|
||||||
if rb == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += proto.NestedStructureSize(addChainReqBodyTargetField, rb.target)
|
|
||||||
size += proto.BytesSize(addChainReqBodyChainField, rb.chainID)
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) StableMarshal(buf []byte) []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, rb.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
|
|
||||||
offset += proto.NestedStructureMarshal(removeChainReqBodyTargetField, buf[offset:], rb.target)
|
|
||||||
proto.BytesMarshal(removeChainReqBodyChainField, buf[offset:], rb.chainID)
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(rb, data, new(apemanager.RemoveChainRequest_Body))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainResponseBody) StableSize() (size int) {
|
|
||||||
if rb == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainResponseBody) StableMarshal(buf []byte) []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, rb.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainResponseBody) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(rb, data, new(apemanager.RemoveChainResponse_Body))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsRequestBody) StableSize() (size int) {
|
|
||||||
if rb == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += proto.NestedStructureSize(listChainsReqBodyTargetField, rb.target)
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsRequestBody) StableMarshal(buf []byte) []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, rb.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
proto.NestedStructureMarshal(addChainReqBodyTargetField, buf[offset:], rb.target)
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsRequestBody) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(rb, data, new(apemanager.ListChainsRequest_Body))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsResponseBody) StableSize() (size int) {
|
|
||||||
if rb == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, chain := range rb.GetChains() {
|
|
||||||
size += proto.NestedStructureSize(listChainsRespBodyChainsField, chain)
|
|
||||||
}
|
|
||||||
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsResponseBody) StableMarshal(buf []byte) []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if buf == nil {
|
|
||||||
buf = make([]byte, rb.StableSize())
|
|
||||||
}
|
|
||||||
|
|
||||||
var offset int
|
|
||||||
for _, chain := range rb.GetChains() {
|
|
||||||
offset += proto.NestedStructureMarshal(listChainsRespBodyChainsField, buf[offset:], chain)
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsResponseBody) Unmarshal(data []byte) error {
|
|
||||||
return message.Unmarshal(rb, data, new(apemanager.ListChainsResponse_Body))
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
package apemanager_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
apemanagertest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager/test"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
|
||||||
messagetest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message/test"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestMessageConvert(t *testing.T) {
|
|
||||||
messagetest.TestRPCMessage(t,
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateAddChainRequestBody(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateAddChainRequest(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateAddChainResponseBody(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateAddChainResponse(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainRequestBody(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainRequest(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainResponseBody(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainResponse(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateListChainsRequestBody(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateListChainsRequest(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateListChainsResponseBody(empty) },
|
|
||||||
func(empty bool) message.Message { return apemanagertest.GenerateListChainsResponse(empty) },
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
package apemanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
|
|
||||||
statusgrpc "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status/grpc"
|
|
||||||
)
|
|
||||||
|
|
||||||
// LocalizeFailStatus checks if passed global status.Code is related to ape manager failure and:
|
|
||||||
//
|
|
||||||
// then localizes the code and returns true,
|
|
||||||
// else leaves the code unchanged and returns false.
|
|
||||||
//
|
|
||||||
// Arg must be non-nil.
|
|
||||||
func LocalizeFailStatus(c *status.Code) bool {
|
|
||||||
return status.LocalizeIfInSection(c, uint32(statusgrpc.Section_SECTION_APE_MANAGER))
|
|
||||||
}
|
|
||||||
|
|
||||||
// GlobalizeFail globalizes local code of ape manager failure.
|
|
||||||
//
|
|
||||||
// Arg must be non-nil.
|
|
||||||
func GlobalizeFail(c *status.Code) {
|
|
||||||
c.GlobalizeSection(uint32(statusgrpc.Section_SECTION_APE_MANAGER))
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
// StatusAPEManagerAccessDenied is a local status.Code value for
|
|
||||||
// ACCESS_DENIED ape manager failure.
|
|
||||||
StatusAPEManagerAccessDenied status.Code = iota
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
// detailAccessDeniedDesc is a StatusAccessDenied detail ID for
|
|
||||||
// human-readable description.
|
|
||||||
detailAccessDeniedDesc = iota
|
|
||||||
)
|
|
||||||
|
|
||||||
// WriteAccessDeniedDesc writes human-readable description of StatusAccessDenied
|
|
||||||
// into status.Status as a detail. The status must not be nil.
|
|
||||||
//
|
|
||||||
// Existing details are expected to be ID-unique, otherwise undefined behavior.
|
|
||||||
func WriteAccessDeniedDesc(st *status.Status, desc string) {
|
|
||||||
var found bool
|
|
||||||
|
|
||||||
st.IterateDetails(func(d *status.Detail) bool {
|
|
||||||
if d.ID() == detailAccessDeniedDesc {
|
|
||||||
found = true
|
|
||||||
d.SetValue([]byte(desc))
|
|
||||||
}
|
|
||||||
|
|
||||||
return found
|
|
||||||
})
|
|
||||||
|
|
||||||
if !found {
|
|
||||||
var d status.Detail
|
|
||||||
|
|
||||||
d.SetID(detailAccessDeniedDesc)
|
|
||||||
d.SetValue([]byte(desc))
|
|
||||||
|
|
||||||
st.AppendDetails(d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReadAccessDeniedDesc looks up for status detail with human-readable description
|
|
||||||
// of StatusAccessDenied. Returns empty string if detail is missing.
|
|
||||||
func ReadAccessDeniedDesc(st status.Status) (desc string) {
|
|
||||||
st.IterateDetails(func(d *status.Detail) bool {
|
|
||||||
if d.ID() == detailAccessDeniedDesc {
|
|
||||||
desc = string(d.Value())
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package apemanager_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
|
|
||||||
statustest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status/test"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestStatusCodes(t *testing.T) {
|
|
||||||
statustest.TestCodes(t, apemanager.LocalizeFailStatus, apemanager.GlobalizeFail,
|
|
||||||
apemanager.StatusAPEManagerAccessDenied, 5120,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAccessDeniedDesc(t *testing.T) {
|
|
||||||
var st status.Status
|
|
||||||
|
|
||||||
require.Empty(t, apemanager.ReadAccessDeniedDesc(st))
|
|
||||||
|
|
||||||
const desc = "some description"
|
|
||||||
|
|
||||||
apemanager.WriteAccessDeniedDesc(&st, desc)
|
|
||||||
require.Equal(t, desc, apemanager.ReadAccessDeniedDesc(st))
|
|
||||||
|
|
||||||
apemanager.WriteAccessDeniedDesc(&st, desc+"1")
|
|
||||||
require.Equal(t, desc+"1", apemanager.ReadAccessDeniedDesc(st))
|
|
||||||
}
|
|
|
@ -1,143 +0,0 @@
|
||||||
package apemanagertest
|
|
||||||
|
|
||||||
import (
|
|
||||||
apetest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/test"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
|
|
||||||
sessiontest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/test"
|
|
||||||
)
|
|
||||||
|
|
||||||
func generateChainID(empty bool) []byte {
|
|
||||||
if empty {
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return []byte("616c6c6f774f626a476574436e72")
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateAddChainRequestBody(empty bool) *apemanager.AddChainRequestBody {
|
|
||||||
m := new(apemanager.AddChainRequestBody)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetTarget(apetest.GenerateChainTarget(empty))
|
|
||||||
m.SetChain(apetest.GenerateRawChain(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateAddChainRequest(empty bool) *apemanager.AddChainRequest {
|
|
||||||
m := new(apemanager.AddChainRequest)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetBody(GenerateAddChainRequestBody(empty))
|
|
||||||
m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
|
|
||||||
m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateAddChainResponseBody(empty bool) *apemanager.AddChainResponseBody {
|
|
||||||
m := new(apemanager.AddChainResponseBody)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetChainID(generateChainID(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateAddChainResponse(empty bool) *apemanager.AddChainResponse {
|
|
||||||
m := new(apemanager.AddChainResponse)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetBody(GenerateAddChainResponseBody(empty))
|
|
||||||
m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
|
|
||||||
m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateRemoveChainRequestBody(empty bool) *apemanager.RemoveChainRequestBody {
|
|
||||||
m := new(apemanager.RemoveChainRequestBody)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetChainID(generateChainID(empty))
|
|
||||||
m.SetTarget(apetest.GenerateChainTarget(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateRemoveChainRequest(empty bool) *apemanager.RemoveChainRequest {
|
|
||||||
m := new(apemanager.RemoveChainRequest)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetBody(GenerateRemoveChainRequestBody(empty))
|
|
||||||
m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
|
|
||||||
m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateRemoveChainResponseBody(_ bool) *apemanager.RemoveChainResponseBody {
|
|
||||||
return new(apemanager.RemoveChainResponseBody)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateRemoveChainResponse(empty bool) *apemanager.RemoveChainResponse {
|
|
||||||
m := new(apemanager.RemoveChainResponse)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetBody(GenerateRemoveChainResponseBody(empty))
|
|
||||||
m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
|
|
||||||
m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateListChainsRequestBody(empty bool) *apemanager.ListChainsRequestBody {
|
|
||||||
m := new(apemanager.ListChainsRequestBody)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetTarget(apetest.GenerateChainTarget(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateListChainsRequest(empty bool) *apemanager.ListChainsRequest {
|
|
||||||
m := new(apemanager.ListChainsRequest)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetBody(GenerateListChainsRequestBody(empty))
|
|
||||||
m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
|
|
||||||
m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateListChainsResponseBody(empty bool) *apemanager.ListChainsResponseBody {
|
|
||||||
m := new(apemanager.ListChainsResponseBody)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetChains(apetest.GenerateRawChains(empty, 10))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func GenerateListChainsResponse(empty bool) *apemanager.ListChainsResponse {
|
|
||||||
m := new(apemanager.ListChainsResponse)
|
|
||||||
|
|
||||||
if !empty {
|
|
||||||
m.SetBody(GenerateListChainsResponseBody(empty))
|
|
||||||
m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
|
|
||||||
m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
|
|
||||||
}
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
|
@ -1,226 +0,0 @@
|
||||||
package apemanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
|
||||||
)
|
|
||||||
|
|
||||||
type AddChainRequest struct {
|
|
||||||
body *AddChainRequestBody
|
|
||||||
|
|
||||||
session.RequestHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *AddChainRequest) SetBody(body *AddChainRequestBody) {
|
|
||||||
r.body = body
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *AddChainRequest) GetBody() *AddChainRequestBody {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.body
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddChainRequestBody struct {
|
|
||||||
target *ape.ChainTarget
|
|
||||||
|
|
||||||
chain *ape.Chain
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) SetTarget(target *ape.ChainTarget) {
|
|
||||||
rb.target = target
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) GetTarget() *ape.ChainTarget {
|
|
||||||
if rb == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb.target
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) SetChain(chain *ape.Chain) {
|
|
||||||
rb.chain = chain
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainRequestBody) GetChain() *ape.Chain {
|
|
||||||
if rb == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb.chain
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddChainResponse struct {
|
|
||||||
body *AddChainResponseBody
|
|
||||||
|
|
||||||
session.ResponseHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *AddChainResponse) SetBody(body *AddChainResponseBody) {
|
|
||||||
r.body = body
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *AddChainResponse) GetBody() *AddChainResponseBody {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.body
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddChainResponseBody struct {
|
|
||||||
chainID []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainResponseBody) SetChainID(chainID []byte) {
|
|
||||||
rb.chainID = chainID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *AddChainResponseBody) GetChainID() []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb.chainID
|
|
||||||
}
|
|
||||||
|
|
||||||
type RemoveChainRequest struct {
|
|
||||||
body *RemoveChainRequestBody
|
|
||||||
|
|
||||||
session.RequestHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *RemoveChainRequest) SetBody(body *RemoveChainRequestBody) {
|
|
||||||
r.body = body
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *RemoveChainRequest) GetBody() *RemoveChainRequestBody {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.body
|
|
||||||
}
|
|
||||||
|
|
||||||
type RemoveChainRequestBody struct {
|
|
||||||
target *ape.ChainTarget
|
|
||||||
|
|
||||||
chainID []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) SetTarget(target *ape.ChainTarget) {
|
|
||||||
rb.target = target
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) GetTarget() *ape.ChainTarget {
|
|
||||||
if rb == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb.target
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) SetChainID(chainID []byte) {
|
|
||||||
rb.chainID = chainID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *RemoveChainRequestBody) GetChainID() []byte {
|
|
||||||
if rb == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb.chainID
|
|
||||||
}
|
|
||||||
|
|
||||||
type RemoveChainResponse struct {
|
|
||||||
body *RemoveChainResponseBody
|
|
||||||
|
|
||||||
session.ResponseHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
type RemoveChainResponseBody struct{}
|
|
||||||
|
|
||||||
func (r *RemoveChainResponse) SetBody(body *RemoveChainResponseBody) {
|
|
||||||
r.body = body
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *RemoveChainResponse) GetBody() *RemoveChainResponseBody {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.body
|
|
||||||
}
|
|
||||||
|
|
||||||
type ListChainsRequest struct {
|
|
||||||
body *ListChainsRequestBody
|
|
||||||
|
|
||||||
session.RequestHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *ListChainsRequest) SetBody(body *ListChainsRequestBody) {
|
|
||||||
r.body = body
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *ListChainsRequest) GetBody() *ListChainsRequestBody {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.body
|
|
||||||
}
|
|
||||||
|
|
||||||
type ListChainsRequestBody struct {
|
|
||||||
target *ape.ChainTarget
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsRequestBody) SetTarget(target *ape.ChainTarget) {
|
|
||||||
rb.target = target
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rb *ListChainsRequestBody) GetTarget() *ape.ChainTarget {
|
|
||||||
if rb == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb.target
|
|
||||||
}
|
|
||||||
|
|
||||||
type ListChainsResponse struct {
|
|
||||||
body *ListChainsResponseBody
|
|
||||||
|
|
||||||
session.ResponseHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *ListChainsResponse) SetBody(body *ListChainsResponseBody) {
|
|
||||||
r.body = body
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *ListChainsResponse) GetBody() *ListChainsResponseBody {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.body
|
|
||||||
}
|
|
||||||
|
|
||||||
type ListChainsResponseBody struct {
|
|
||||||
chains []*ape.Chain
|
|
||||||
|
|
||||||
session.RequestHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *ListChainsResponseBody) SetChains(chains []*ape.Chain) {
|
|
||||||
r.chains = chains
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *ListChainsResponseBody) GetChains() []*ape.Chain {
|
|
||||||
if r == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return r.chains
|
|
||||||
}
|
|
94
audit/convert.go
Normal file
94
audit/convert.go
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
audit "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/audit/grpc"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
|
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *DataAuditResult) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *audit.DataAuditResult
|
||||||
|
|
||||||
|
if a != nil {
|
||||||
|
m = new(audit.DataAuditResult)
|
||||||
|
|
||||||
|
m.SetAuditEpoch(a.auditEpoch)
|
||||||
|
m.SetPublicKey(a.pubKey)
|
||||||
|
m.SetContainerId(a.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
|
||||||
|
m.SetComplete(a.complete)
|
||||||
|
m.SetVersion(a.version.ToGRPCMessage().(*refsGRPC.Version))
|
||||||
|
m.SetPassNodes(a.passNodes)
|
||||||
|
m.SetFailNodes(a.failNodes)
|
||||||
|
m.SetRetries(a.retries)
|
||||||
|
m.SetRequests(a.requests)
|
||||||
|
m.SetHit(a.hit)
|
||||||
|
m.SetMiss(a.miss)
|
||||||
|
m.SetFail(a.fail)
|
||||||
|
m.SetPassSg(refs.ObjectIDListToGRPCMessage(a.passSG))
|
||||||
|
m.SetFailSg(refs.ObjectIDListToGRPCMessage(a.failSG))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *DataAuditResult) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*audit.DataAuditResult)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
cid := v.GetContainerId()
|
||||||
|
if cid == nil {
|
||||||
|
a.cid = nil
|
||||||
|
} else {
|
||||||
|
if a.cid == nil {
|
||||||
|
a.cid = new(refs.ContainerID)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = a.cid.FromGRPCMessage(cid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
version := v.GetVersion()
|
||||||
|
if version == nil {
|
||||||
|
a.version = nil
|
||||||
|
} else {
|
||||||
|
if a.version == nil {
|
||||||
|
a.version = new(refs.Version)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = a.version.FromGRPCMessage(version)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.passSG, err = refs.ObjectIDListFromGRPCMessage(v.GetPassSg())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
a.failSG, err = refs.ObjectIDListFromGRPCMessage(v.GetFailSg())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
a.auditEpoch = v.GetAuditEpoch()
|
||||||
|
a.pubKey = v.GetPublicKey()
|
||||||
|
a.complete = v.GetComplete()
|
||||||
|
a.passNodes = v.GetPassNodes()
|
||||||
|
a.failNodes = v.GetFailNodes()
|
||||||
|
a.retries = v.GetRetries()
|
||||||
|
a.requests = v.GetRequests()
|
||||||
|
a.hit = v.GetHit()
|
||||||
|
a.miss = v.GetMiss()
|
||||||
|
a.fail = v.GetFail()
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
75
audit/grpc/types.go
Normal file
75
audit/grpc/types.go
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetVersion is a Version field setter.
|
||||||
|
func (x *DataAuditResult) SetVersion(v *refs.Version) {
|
||||||
|
x.Version = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAuditEpoch is an AuditEpoch field setter.
|
||||||
|
func (x *DataAuditResult) SetAuditEpoch(v uint64) {
|
||||||
|
x.AuditEpoch = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId is a ContainerId field setter.
|
||||||
|
func (x *DataAuditResult) SetContainerId(v *refs.ContainerID) {
|
||||||
|
x.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPublicKey is a PublicKey field setter.
|
||||||
|
func (x *DataAuditResult) SetPublicKey(v []byte) {
|
||||||
|
x.PublicKey = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetComplete is a Complete field setter.
|
||||||
|
func (x *DataAuditResult) SetComplete(v bool) {
|
||||||
|
x.Complete = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRequests is a Requests field setter.
|
||||||
|
func (x *DataAuditResult) SetRequests(v uint32) {
|
||||||
|
x.Requests = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRetries is a Retries field setter.
|
||||||
|
func (x *DataAuditResult) SetRetries(v uint32) {
|
||||||
|
x.Retries = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPassSg is a PassSg field setter.
|
||||||
|
func (x *DataAuditResult) SetPassSg(v []*refs.ObjectID) {
|
||||||
|
x.PassSg = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFailSg is a FailSg field setter.
|
||||||
|
func (x *DataAuditResult) SetFailSg(v []*refs.ObjectID) {
|
||||||
|
x.FailSg = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetHit is a Hit field setter.
|
||||||
|
func (x *DataAuditResult) SetHit(v uint32) {
|
||||||
|
x.Hit = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMiss is a Miss field setter.
|
||||||
|
func (x *DataAuditResult) SetMiss(v uint32) {
|
||||||
|
x.Miss = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFail is a Fail field setter.
|
||||||
|
func (x *DataAuditResult) SetFail(v uint32) {
|
||||||
|
x.Fail = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPassNodes is a PassNodes field setter.
|
||||||
|
func (x *DataAuditResult) SetPassNodes(v [][]byte) {
|
||||||
|
x.PassNodes = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFailNodes is a FailNodes field setter.
|
||||||
|
func (x *DataAuditResult) SetFailNodes(v [][]byte) {
|
||||||
|
x.FailNodes = v
|
||||||
|
}
|
BIN
audit/grpc/types.pb.go
generated
Normal file
BIN
audit/grpc/types.pb.go
generated
Normal file
Binary file not shown.
14
audit/json.go
Normal file
14
audit/json.go
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
audit "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/audit/grpc"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *DataAuditResult) MarshalJSON() ([]byte, error) {
|
||||||
|
return message.MarshalJSON(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *DataAuditResult) UnmarshalJSON(data []byte) error {
|
||||||
|
return message.UnmarshalJSON(a, data, new(audit.DataAuditResult))
|
||||||
|
}
|
88
audit/marshal.go
Normal file
88
audit/marshal.go
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
audit "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/audit/grpc"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ = iota
|
||||||
|
versionFNum
|
||||||
|
auditEpochFNum
|
||||||
|
cidFNum
|
||||||
|
pubKeyFNum
|
||||||
|
completeFNum
|
||||||
|
requestsFNum
|
||||||
|
retriesFNum
|
||||||
|
passSGFNum
|
||||||
|
failSGFNum
|
||||||
|
hitFNum
|
||||||
|
missFNum
|
||||||
|
failFNum
|
||||||
|
passNodesFNum
|
||||||
|
failNodesFNum
|
||||||
|
)
|
||||||
|
|
||||||
|
// StableMarshal marshals unified DataAuditResult structure into a protobuf
|
||||||
|
// binary format without field order shuffle.
|
||||||
|
func (a *DataAuditResult) StableMarshal(buf []byte) []byte {
|
||||||
|
if a == nil {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, a.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var offset int
|
||||||
|
|
||||||
|
offset += proto.NestedStructureMarshal(versionFNum, buf[offset:], a.version)
|
||||||
|
offset += proto.Fixed64Marshal(auditEpochFNum, buf[offset:], a.auditEpoch)
|
||||||
|
offset += proto.NestedStructureMarshal(cidFNum, buf[offset:], a.cid)
|
||||||
|
offset += proto.BytesMarshal(pubKeyFNum, buf[offset:], a.pubKey)
|
||||||
|
offset += proto.BoolMarshal(completeFNum, buf[offset:], a.complete)
|
||||||
|
offset += proto.UInt32Marshal(requestsFNum, buf[offset:], a.requests)
|
||||||
|
offset += proto.UInt32Marshal(retriesFNum, buf[offset:], a.retries)
|
||||||
|
offset += refs.ObjectIDNestedListMarshal(passSGFNum, buf[offset:], a.passSG)
|
||||||
|
offset += refs.ObjectIDNestedListMarshal(failSGFNum, buf[offset:], a.failSG)
|
||||||
|
offset += proto.UInt32Marshal(hitFNum, buf[offset:], a.hit)
|
||||||
|
offset += proto.UInt32Marshal(missFNum, buf[offset:], a.miss)
|
||||||
|
offset += proto.UInt32Marshal(failFNum, buf[offset:], a.fail)
|
||||||
|
offset += proto.RepeatedBytesMarshal(passNodesFNum, buf[offset:], a.passNodes)
|
||||||
|
proto.RepeatedBytesMarshal(failNodesFNum, buf[offset:], a.failNodes)
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
// StableSize returns byte length of DataAuditResult structure
|
||||||
|
// marshaled by StableMarshal function.
|
||||||
|
func (a *DataAuditResult) StableSize() (size int) {
|
||||||
|
if a == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
size += proto.NestedStructureSize(versionFNum, a.version)
|
||||||
|
size += proto.Fixed64Size(auditEpochFNum, a.auditEpoch)
|
||||||
|
size += proto.NestedStructureSize(cidFNum, a.cid)
|
||||||
|
size += proto.BytesSize(pubKeyFNum, a.pubKey)
|
||||||
|
size += proto.BoolSize(completeFNum, a.complete)
|
||||||
|
size += proto.UInt32Size(requestsFNum, a.requests)
|
||||||
|
size += proto.UInt32Size(retriesFNum, a.retries)
|
||||||
|
size += refs.ObjectIDNestedListSize(passSGFNum, a.passSG)
|
||||||
|
size += refs.ObjectIDNestedListSize(failSGFNum, a.failSG)
|
||||||
|
size += proto.UInt32Size(hitFNum, a.hit)
|
||||||
|
size += proto.UInt32Size(missFNum, a.miss)
|
||||||
|
size += proto.UInt32Size(failFNum, a.fail)
|
||||||
|
size += proto.RepeatedBytesSize(passNodesFNum, a.passNodes)
|
||||||
|
size += proto.RepeatedBytesSize(failNodesFNum, a.failNodes)
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal unmarshals DataAuditResult structure from its protobuf
|
||||||
|
// binary representation.
|
||||||
|
func (a *DataAuditResult) Unmarshal(data []byte) error {
|
||||||
|
return message.Unmarshal(a, data, new(audit.DataAuditResult))
|
||||||
|
}
|
15
audit/message_test.go
Normal file
15
audit/message_test.go
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package audit_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
audittest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/audit/test"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message"
|
||||||
|
messagetest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/message/test"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMessageConvert(t *testing.T) {
|
||||||
|
messagetest.TestRPCMessage(t,
|
||||||
|
func(empty bool) message.Message { return audittest.GenerateDataAuditResult(empty) },
|
||||||
|
)
|
||||||
|
}
|
29
audit/test/generate.go
Normal file
29
audit/test/generate.go
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
package audittest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/audit"
|
||||||
|
refstest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/test"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GenerateDataAuditResult(empty bool) *audit.DataAuditResult {
|
||||||
|
m := new(audit.DataAuditResult)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetPublicKey([]byte{1, 2, 3})
|
||||||
|
m.SetAuditEpoch(13)
|
||||||
|
m.SetHit(100)
|
||||||
|
m.SetMiss(200)
|
||||||
|
m.SetFail(300)
|
||||||
|
m.SetComplete(true)
|
||||||
|
m.SetPassNodes([][]byte{{1}, {2}})
|
||||||
|
m.SetFailNodes([][]byte{{3}, {4}})
|
||||||
|
m.SetRequests(666)
|
||||||
|
m.SetRetries(777)
|
||||||
|
m.SetVersion(refstest.GenerateVersion(false))
|
||||||
|
m.SetContainerID(refstest.GenerateContainerID(false))
|
||||||
|
m.SetPassSG(refstest.GenerateObjectIDs(false))
|
||||||
|
m.SetFailSG(refstest.GenerateObjectIDs(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
243
audit/types.go
Normal file
243
audit/types.go
Normal file
|
@ -0,0 +1,243 @@
|
||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DataAuditResult is a unified structure of
|
||||||
|
// DataAuditResult message from proto definition.
|
||||||
|
type DataAuditResult struct {
|
||||||
|
version *refs.Version
|
||||||
|
|
||||||
|
auditEpoch uint64
|
||||||
|
|
||||||
|
requests, retries uint32
|
||||||
|
|
||||||
|
hit, miss, fail uint32
|
||||||
|
|
||||||
|
cid *refs.ContainerID
|
||||||
|
|
||||||
|
pubKey []byte
|
||||||
|
|
||||||
|
passSG, failSG []refs.ObjectID
|
||||||
|
|
||||||
|
failNodes, passNodes [][]byte
|
||||||
|
|
||||||
|
complete bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVersion returns version of Data Audit structure.
|
||||||
|
func (a *DataAuditResult) GetVersion() *refs.Version {
|
||||||
|
if a != nil {
|
||||||
|
return a.version
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVersion sets version of Data Audit structure.
|
||||||
|
func (a *DataAuditResult) SetVersion(v *refs.Version) {
|
||||||
|
a.version = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAuditEpoch returns epoch number when the Data Audit was conducted.
|
||||||
|
func (a *DataAuditResult) GetAuditEpoch() uint64 {
|
||||||
|
if a != nil {
|
||||||
|
return a.auditEpoch
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAuditEpoch sets epoch number when the Data Audit was conducted.
|
||||||
|
func (a *DataAuditResult) SetAuditEpoch(v uint64) {
|
||||||
|
a.auditEpoch = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetContainerID returns container under audit.
|
||||||
|
func (a *DataAuditResult) GetContainerID() *refs.ContainerID {
|
||||||
|
if a != nil {
|
||||||
|
return a.cid
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerID sets container under audit.
|
||||||
|
func (a *DataAuditResult) SetContainerID(v *refs.ContainerID) {
|
||||||
|
a.cid = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPublicKey returns public key of the auditing InnerRing node in a binary format.
|
||||||
|
func (a *DataAuditResult) GetPublicKey() []byte {
|
||||||
|
if a != nil {
|
||||||
|
return a.pubKey
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPublicKey sets public key of the auditing InnerRing node in a binary format.
|
||||||
|
func (a *DataAuditResult) SetPublicKey(v []byte) {
|
||||||
|
a.pubKey = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPassSG returns list of Storage Groups that passed audit PoR stage.
|
||||||
|
func (a *DataAuditResult) GetPassSG() []refs.ObjectID {
|
||||||
|
if a != nil {
|
||||||
|
return a.passSG
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPassSG sets list of Storage Groups that passed audit PoR stage.
|
||||||
|
func (a *DataAuditResult) SetPassSG(v []refs.ObjectID) {
|
||||||
|
a.passSG = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFailSG returns list of Storage Groups that failed audit PoR stage.
|
||||||
|
func (a *DataAuditResult) GetFailSG() []refs.ObjectID {
|
||||||
|
if a != nil {
|
||||||
|
return a.failSG
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFailSG sets list of Storage Groups that failed audit PoR stage.
|
||||||
|
func (a *DataAuditResult) SetFailSG(v []refs.ObjectID) {
|
||||||
|
a.failSG = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRequests returns number of requests made by PoR audit check to get
|
||||||
|
// all headers of the objects inside storage groups.
|
||||||
|
func (a *DataAuditResult) GetRequests() uint32 {
|
||||||
|
if a != nil {
|
||||||
|
return a.requests
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRequests sets number of requests made by PoR audit check to get
|
||||||
|
// all headers of the objects inside storage groups.
|
||||||
|
func (a *DataAuditResult) SetRequests(v uint32) {
|
||||||
|
a.requests = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRetries returns number of retries made by PoR audit check to get
|
||||||
|
// all headers of the objects inside storage groups.
|
||||||
|
func (a *DataAuditResult) GetRetries() uint32 {
|
||||||
|
if a != nil {
|
||||||
|
return a.retries
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRetries sets number of retries made by PoR audit check to get
|
||||||
|
// all headers of the objects inside storage groups.
|
||||||
|
func (a *DataAuditResult) SetRetries(v uint32) {
|
||||||
|
a.retries = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetHit returns number of sampled objects under audit placed
|
||||||
|
// in an optimal way according to the containers placement policy
|
||||||
|
// when checking PoP.
|
||||||
|
func (a *DataAuditResult) GetHit() uint32 {
|
||||||
|
if a != nil {
|
||||||
|
return a.hit
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetHit sets number of sampled objects under audit placed
|
||||||
|
// in an optimal way according to the containers placement policy
|
||||||
|
// when checking PoP.
|
||||||
|
func (a *DataAuditResult) SetHit(v uint32) {
|
||||||
|
a.hit = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMiss returns number of sampled objects under audit placed
|
||||||
|
// in suboptimal way according to the containers placement policy,
|
||||||
|
// but still at a satisfactory level when checking PoP.
|
||||||
|
func (a *DataAuditResult) GetMiss() uint32 {
|
||||||
|
if a != nil {
|
||||||
|
return a.miss
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMiss sets number of sampled objects under audit placed
|
||||||
|
// in suboptimal way according to the containers placement policy,
|
||||||
|
// but still at a satisfactory level when checking PoP.
|
||||||
|
func (a *DataAuditResult) SetMiss(v uint32) {
|
||||||
|
a.miss = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFail returns number of sampled objects under audit stored
|
||||||
|
// in a way not confirming placement policy or not found at all
|
||||||
|
// when checking PoP.
|
||||||
|
func (a *DataAuditResult) GetFail() uint32 {
|
||||||
|
if a != nil {
|
||||||
|
return a.fail
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFail sets number of sampled objects under audit stored
|
||||||
|
// in a way not confirming placement policy or not found at all
|
||||||
|
// when checking PoP.
|
||||||
|
func (a *DataAuditResult) SetFail(v uint32) {
|
||||||
|
a.fail = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPassNodes returns list of storage node public keys that
|
||||||
|
// passed at least one PDP.
|
||||||
|
func (a *DataAuditResult) GetPassNodes() [][]byte {
|
||||||
|
if a != nil {
|
||||||
|
return a.passNodes
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPassNodes sets list of storage node public keys that
|
||||||
|
// passed at least one PDP.
|
||||||
|
func (a *DataAuditResult) SetPassNodes(v [][]byte) {
|
||||||
|
a.passNodes = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFailNodes returns list of storage node public keys that
|
||||||
|
// failed at least one PDP.
|
||||||
|
func (a *DataAuditResult) GetFailNodes() [][]byte {
|
||||||
|
if a != nil {
|
||||||
|
return a.failNodes
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFailNodes sets list of storage node public keys that
|
||||||
|
// failed at least one PDP.
|
||||||
|
func (a *DataAuditResult) SetFailNodes(v [][]byte) {
|
||||||
|
a.failNodes = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetComplete returns boolean completion statement of audit result.
|
||||||
|
func (a *DataAuditResult) GetComplete() bool {
|
||||||
|
if a != nil {
|
||||||
|
return a.complete
|
||||||
|
}
|
||||||
|
|
||||||
|
return false // bool default
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetComplete sets boolean completion statement of audit result.
|
||||||
|
func (a *DataAuditResult) SetComplete(v bool) {
|
||||||
|
a.complete = v
|
||||||
|
}
|
|
@ -4,6 +4,9 @@ package container
|
||||||
const SysAttributePrefix = "__SYSTEM__"
|
const SysAttributePrefix = "__SYSTEM__"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// SysAttributeSubnet is a string ID of container's storage subnet.
|
||||||
|
SysAttributeSubnet = SysAttributePrefix + "SUBNET"
|
||||||
|
|
||||||
// SysAttributeName is a string of human-friendly container name registered as the domain in NNS contract.
|
// SysAttributeName is a string of human-friendly container name registered as the domain in NNS contract.
|
||||||
SysAttributeName = SysAttributePrefix + "NAME"
|
SysAttributeName = SysAttributePrefix + "NAME"
|
||||||
|
|
||||||
|
@ -15,20 +18,24 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// SysAttributePrefixNeoFS is a prefix of key to system attribute.
|
// SysAttributePrefixNeoFS is a prefix of key to system attribute.
|
||||||
// Deprecated: use SysAttributePrefix.
|
// Deprecated: use SysAttributePrefix
|
||||||
const SysAttributePrefixNeoFS = "__NEOFS__"
|
const SysAttributePrefixNeoFS = "__NEOFS__"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// SysAttributeSubnetNeoFS is a string ID of container's storage subnet.
|
||||||
|
// Deprecated: use SysAttributeSubnet
|
||||||
|
SysAttributeSubnetNeoFS = SysAttributePrefixNeoFS + "SUBNET"
|
||||||
|
|
||||||
// SysAttributeNameNeoFS is a string of human-friendly container name registered as the domain in NNS contract.
|
// SysAttributeNameNeoFS is a string of human-friendly container name registered as the domain in NNS contract.
|
||||||
// Deprecated: use SysAttributeName.
|
// Deprecated: use SysAttributeName
|
||||||
SysAttributeNameNeoFS = SysAttributePrefixNeoFS + "NAME"
|
SysAttributeNameNeoFS = SysAttributePrefixNeoFS + "NAME"
|
||||||
|
|
||||||
// SysAttributeZoneNeoFS is a string of zone for container name.
|
// SysAttributeZoneNeoFS is a string of zone for container name.
|
||||||
// Deprecated: use SysAttributeZone.
|
// Deprecated: use SysAttributeZone
|
||||||
SysAttributeZoneNeoFS = SysAttributePrefixNeoFS + "ZONE"
|
SysAttributeZoneNeoFS = SysAttributePrefixNeoFS + "ZONE"
|
||||||
|
|
||||||
// SysAttributeHomomorphicHashingNeoFS is a container's homomorphic hashing state.
|
// SysAttributeHomomorphicHashingNeoFS is a container's homomorphic hashing state.
|
||||||
// Deprecated: use SysAttributeHomomorphicHashing.
|
// Deprecated: use SysAttributeHomomorphicHashing
|
||||||
SysAttributeHomomorphicHashingNeoFS = SysAttributePrefixNeoFS + "DISABLE_HOMOMORPHIC_HASHING"
|
SysAttributeHomomorphicHashingNeoFS = SysAttributePrefixNeoFS + "DISABLE_HOMOMORPHIC_HASHING"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package container
|
package container
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
|
||||||
|
aclGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/grpc"
|
||||||
container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||||
netmapGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
netmapGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
||||||
|
@ -37,29 +39,31 @@ func (a *Attribute) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func AttributesToGRPC(xs []Attribute) (res []container.Container_Attribute) {
|
func AttributesToGRPC(xs []Attribute) (res []*container.Container_Attribute) {
|
||||||
if xs != nil {
|
if xs != nil {
|
||||||
res = make([]container.Container_Attribute, 0, len(xs))
|
res = make([]*container.Container_Attribute, 0, len(xs))
|
||||||
|
|
||||||
for i := range xs {
|
for i := range xs {
|
||||||
res = append(res, *xs[i].ToGRPCMessage().(*container.Container_Attribute))
|
res = append(res, xs[i].ToGRPCMessage().(*container.Container_Attribute))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func AttributesFromGRPC(xs []container.Container_Attribute) (res []Attribute, err error) {
|
func AttributesFromGRPC(xs []*container.Container_Attribute) (res []Attribute, err error) {
|
||||||
if xs != nil {
|
if xs != nil {
|
||||||
res = make([]Attribute, len(xs))
|
res = make([]Attribute, len(xs))
|
||||||
|
|
||||||
for i := range xs {
|
for i := range xs {
|
||||||
err = res[i].FromGRPCMessage(&xs[i])
|
if xs[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(xs[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -762,3 +766,515 @@ func (r *ListResponse) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
|
||||||
return r.ResponseHeaders.FromMessage(v)
|
return r.ResponseHeaders.FromMessage(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.SetExtendedACLRequest_Body
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.SetExtendedACLRequest_Body)
|
||||||
|
|
||||||
|
m.SetEacl(r.eacl.ToGRPCMessage().(*aclGRPC.EACLTable))
|
||||||
|
m.SetSignature(toSignatureRFC6979(r.sig))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.SetExtendedACLRequest_Body)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
eacl := v.GetEacl()
|
||||||
|
if eacl == nil {
|
||||||
|
r.eacl = nil
|
||||||
|
} else {
|
||||||
|
if r.eacl == nil {
|
||||||
|
r.eacl = new(acl.Table)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.eacl.FromGRPCMessage(eacl)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sig := v.GetSignature()
|
||||||
|
if sig == nil {
|
||||||
|
r.sig = nil
|
||||||
|
} else {
|
||||||
|
if r.sig == nil {
|
||||||
|
r.sig = new(refs.Signature)
|
||||||
|
}
|
||||||
|
|
||||||
|
r.sig.SetKey(sig.GetKey())
|
||||||
|
r.sig.SetSign(sig.GetSign())
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequest) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.SetExtendedACLRequest
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.SetExtendedACLRequest)
|
||||||
|
|
||||||
|
m.SetBody(r.body.ToGRPCMessage().(*container.SetExtendedACLRequest_Body))
|
||||||
|
r.RequestHeaders.ToMessage(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequest) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.SetExtendedACLRequest)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
body := v.GetBody()
|
||||||
|
if body == nil {
|
||||||
|
r.body = nil
|
||||||
|
} else {
|
||||||
|
if r.body == nil {
|
||||||
|
r.body = new(SetExtendedACLRequestBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.body.FromGRPCMessage(body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.RequestHeaders.FromMessage(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponseBody) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.SetExtendedACLResponse_Body
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.SetExtendedACLResponse_Body)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponseBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.SetExtendedACLResponse_Body)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponse) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.SetExtendedACLResponse
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.SetExtendedACLResponse)
|
||||||
|
|
||||||
|
m.SetBody(r.body.ToGRPCMessage().(*container.SetExtendedACLResponse_Body))
|
||||||
|
r.ResponseHeaders.ToMessage(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponse) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.SetExtendedACLResponse)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
body := v.GetBody()
|
||||||
|
if body == nil {
|
||||||
|
r.body = nil
|
||||||
|
} else {
|
||||||
|
if r.body == nil {
|
||||||
|
r.body = new(SetExtendedACLResponseBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.body.FromGRPCMessage(body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.ResponseHeaders.FromMessage(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.GetExtendedACLRequest_Body
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.GetExtendedACLRequest_Body)
|
||||||
|
|
||||||
|
m.SetContainerId(r.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.GetExtendedACLRequest_Body)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
cid := v.GetContainerId()
|
||||||
|
if cid == nil {
|
||||||
|
r.cid = nil
|
||||||
|
} else {
|
||||||
|
if r.cid == nil {
|
||||||
|
r.cid = new(refs.ContainerID)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.cid.FromGRPCMessage(cid)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequest) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.GetExtendedACLRequest
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.GetExtendedACLRequest)
|
||||||
|
|
||||||
|
m.SetBody(r.body.ToGRPCMessage().(*container.GetExtendedACLRequest_Body))
|
||||||
|
r.RequestHeaders.ToMessage(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequest) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.GetExtendedACLRequest)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
body := v.GetBody()
|
||||||
|
if body == nil {
|
||||||
|
r.body = nil
|
||||||
|
} else {
|
||||||
|
if r.body == nil {
|
||||||
|
r.body = new(GetExtendedACLRequestBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.body.FromGRPCMessage(body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.RequestHeaders.FromMessage(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.GetExtendedACLResponse_Body
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.GetExtendedACLResponse_Body)
|
||||||
|
|
||||||
|
m.SetEacl(r.eacl.ToGRPCMessage().(*aclGRPC.EACLTable))
|
||||||
|
m.SetSignature(toSignatureRFC6979(r.sig))
|
||||||
|
m.SetSessionToken(r.token.ToGRPCMessage().(*sessionGRPC.SessionToken))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.GetExtendedACLResponse_Body)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
eacl := v.GetEacl()
|
||||||
|
if eacl == nil {
|
||||||
|
r.eacl = nil
|
||||||
|
} else {
|
||||||
|
if r.eacl == nil {
|
||||||
|
r.eacl = new(acl.Table)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.eacl.FromGRPCMessage(eacl)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sig := v.GetSignature()
|
||||||
|
if sig == nil {
|
||||||
|
r.sig = nil
|
||||||
|
} else {
|
||||||
|
if r.sig == nil {
|
||||||
|
r.sig = new(refs.Signature)
|
||||||
|
}
|
||||||
|
|
||||||
|
r.sig.SetKey(sig.GetKey())
|
||||||
|
r.sig.SetSign(sig.GetSign())
|
||||||
|
}
|
||||||
|
|
||||||
|
token := v.GetSessionToken()
|
||||||
|
if token == nil {
|
||||||
|
r.token = nil
|
||||||
|
} else {
|
||||||
|
if r.token == nil {
|
||||||
|
r.token = new(session.Token)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.token.FromGRPCMessage(token)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponse) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.GetExtendedACLResponse
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.GetExtendedACLResponse)
|
||||||
|
|
||||||
|
m.SetBody(r.body.ToGRPCMessage().(*container.GetExtendedACLResponse_Body))
|
||||||
|
r.ResponseHeaders.ToMessage(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponse) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.GetExtendedACLResponse)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
body := v.GetBody()
|
||||||
|
if body == nil {
|
||||||
|
r.body = nil
|
||||||
|
} else {
|
||||||
|
if r.body == nil {
|
||||||
|
r.body = new(GetExtendedACLResponseBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.body.FromGRPCMessage(body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.ResponseHeaders.FromMessage(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.AnnounceUsedSpaceRequest_Body_Announcement
|
||||||
|
|
||||||
|
if a != nil {
|
||||||
|
m = new(container.AnnounceUsedSpaceRequest_Body_Announcement)
|
||||||
|
|
||||||
|
m.SetContainerId(a.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
|
||||||
|
m.SetEpoch(a.epoch)
|
||||||
|
m.SetUsedSpace(a.usedSpace)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.AnnounceUsedSpaceRequest_Body_Announcement)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
cid := v.GetContainerId()
|
||||||
|
if cid == nil {
|
||||||
|
a.cid = nil
|
||||||
|
} else {
|
||||||
|
if a.cid == nil {
|
||||||
|
a.cid = new(refs.ContainerID)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = a.cid.FromGRPCMessage(cid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.epoch = v.GetEpoch()
|
||||||
|
a.usedSpace = v.GetUsedSpace()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func UsedSpaceAnnouncementsToGRPCMessage(
|
||||||
|
ids []UsedSpaceAnnouncement,
|
||||||
|
) (res []*container.AnnounceUsedSpaceRequest_Body_Announcement) {
|
||||||
|
if ids != nil {
|
||||||
|
res = make([]*container.AnnounceUsedSpaceRequest_Body_Announcement, 0, len(ids))
|
||||||
|
|
||||||
|
for i := range ids {
|
||||||
|
res = append(res, ids[i].ToGRPCMessage().(*container.AnnounceUsedSpaceRequest_Body_Announcement))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func UsedSpaceAnnouncementssFromGRPCMessage(
|
||||||
|
asV2 []*container.AnnounceUsedSpaceRequest_Body_Announcement,
|
||||||
|
) (res []UsedSpaceAnnouncement, err error) {
|
||||||
|
if asV2 != nil {
|
||||||
|
res = make([]UsedSpaceAnnouncement, len(asV2))
|
||||||
|
|
||||||
|
for i := range asV2 {
|
||||||
|
if asV2[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(asV2[i])
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.AnnounceUsedSpaceRequest_Body
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.AnnounceUsedSpaceRequest_Body)
|
||||||
|
|
||||||
|
m.SetAnnouncements(UsedSpaceAnnouncementsToGRPCMessage(r.announcements))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.AnnounceUsedSpaceRequest_Body)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
r.announcements, err = UsedSpaceAnnouncementssFromGRPCMessage(v.GetAnnouncements())
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequest) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.AnnounceUsedSpaceRequest
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.AnnounceUsedSpaceRequest)
|
||||||
|
|
||||||
|
m.SetBody(r.body.ToGRPCMessage().(*container.AnnounceUsedSpaceRequest_Body))
|
||||||
|
r.RequestHeaders.ToMessage(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequest) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.AnnounceUsedSpaceRequest)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
body := v.GetBody()
|
||||||
|
if body == nil {
|
||||||
|
r.body = nil
|
||||||
|
} else {
|
||||||
|
if r.body == nil {
|
||||||
|
r.body = new(AnnounceUsedSpaceRequestBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.body.FromGRPCMessage(body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.RequestHeaders.FromMessage(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponseBody) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.AnnounceUsedSpaceResponse_Body
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.AnnounceUsedSpaceResponse_Body)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponseBody) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.AnnounceUsedSpaceResponse_Body)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponse) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *container.AnnounceUsedSpaceResponse
|
||||||
|
|
||||||
|
if r != nil {
|
||||||
|
m = new(container.AnnounceUsedSpaceResponse)
|
||||||
|
|
||||||
|
m.SetBody(r.body.ToGRPCMessage().(*container.AnnounceUsedSpaceResponse_Body))
|
||||||
|
r.ResponseHeaders.ToMessage(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponse) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*container.AnnounceUsedSpaceResponse)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
body := v.GetBody()
|
||||||
|
if body == nil {
|
||||||
|
r.body = nil
|
||||||
|
} else {
|
||||||
|
if r.body == nil {
|
||||||
|
r.body = new(AnnounceUsedSpaceResponseBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = r.body.FromGRPCMessage(body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.ResponseHeaders.FromMessage(v)
|
||||||
|
}
|
||||||
|
|
324
container/grpc/service.go
Normal file
324
container/grpc/service.go
Normal file
|
@ -0,0 +1,324 @@
|
||||||
|
package container
|
||||||
|
|
||||||
|
import (
|
||||||
|
acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/grpc"
|
||||||
|
refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetContainer sets container of the request.
|
||||||
|
func (m *PutRequest_Body) SetContainer(v *Container) {
|
||||||
|
m.Container = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets signature of the container structure.
|
||||||
|
func (m *PutRequest_Body) SetSignature(v *refs.SignatureRFC6979) {
|
||||||
|
m.Signature = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *PutRequest) SetBody(v *PutRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *PutRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *PutRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId sets identifier of the container.
|
||||||
|
func (m *PutResponse_Body) SetContainerId(v *refs.ContainerID) {
|
||||||
|
m.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *PutResponse) SetBody(v *PutResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *PutResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *PutResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId sets identifier of the container.
|
||||||
|
func (m *DeleteRequest_Body) SetContainerId(v *refs.ContainerID) {
|
||||||
|
m.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets signature of the container identifier.
|
||||||
|
func (m *DeleteRequest_Body) SetSignature(v *refs.SignatureRFC6979) {
|
||||||
|
m.Signature = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *DeleteRequest) SetBody(v *DeleteRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *DeleteRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *DeleteRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *DeleteResponse) SetBody(v *DeleteResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *DeleteResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *DeleteResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId sets identifier of the container.
|
||||||
|
func (m *GetRequest_Body) SetContainerId(v *refs.ContainerID) {
|
||||||
|
m.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *GetRequest) SetBody(v *GetRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *GetRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *GetRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainer sets the container structure.
|
||||||
|
func (m *GetResponse_Body) SetContainer(v *Container) {
|
||||||
|
m.Container = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSessionToken sets token of the session within which requested
|
||||||
|
// container was created.
|
||||||
|
func (m *GetResponse_Body) SetSessionToken(v *session.SessionToken) {
|
||||||
|
m.SessionToken = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets signature of the container structure.
|
||||||
|
func (m *GetResponse_Body) SetSignature(v *refs.SignatureRFC6979) {
|
||||||
|
m.Signature = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *GetResponse) SetBody(v *GetResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *GetResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *GetResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOwnerId sets identifier of the container owner.
|
||||||
|
func (m *ListRequest_Body) SetOwnerId(v *refs.OwnerID) {
|
||||||
|
m.OwnerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *ListRequest) SetBody(v *ListRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *ListRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *ListRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerIds sets list of the container identifiers.
|
||||||
|
func (m *ListResponse_Body) SetContainerIds(v []*refs.ContainerID) {
|
||||||
|
m.ContainerIds = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *ListResponse) SetBody(v *ListResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *ListResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *ListResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEacl sets eACL table structure.
|
||||||
|
func (m *SetExtendedACLRequest_Body) SetEacl(v *acl.EACLTable) {
|
||||||
|
m.Eacl = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets signature of the eACL table structure.
|
||||||
|
func (m *SetExtendedACLRequest_Body) SetSignature(v *refs.SignatureRFC6979) {
|
||||||
|
m.Signature = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *SetExtendedACLRequest) SetBody(v *SetExtendedACLRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *SetExtendedACLRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *SetExtendedACLRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *SetExtendedACLResponse) SetBody(v *SetExtendedACLResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *SetExtendedACLResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *SetExtendedACLResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId sets identifier of the container.
|
||||||
|
func (m *GetExtendedACLRequest_Body) SetContainerId(v *refs.ContainerID) {
|
||||||
|
m.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *GetExtendedACLRequest) SetBody(v *GetExtendedACLRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *GetExtendedACLRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *GetExtendedACLRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEacl sets eACL table structure.
|
||||||
|
func (m *GetExtendedACLResponse_Body) SetEacl(v *acl.EACLTable) {
|
||||||
|
m.Eacl = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets signature of the eACL table structure.
|
||||||
|
func (m *GetExtendedACLResponse_Body) SetSignature(v *refs.SignatureRFC6979) {
|
||||||
|
m.Signature = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSessionToken sets token of the session within which requested
|
||||||
|
// eACl table was set.
|
||||||
|
func (m *GetExtendedACLResponse_Body) SetSessionToken(v *session.SessionToken) {
|
||||||
|
m.SessionToken = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *GetExtendedACLResponse) SetBody(v *GetExtendedACLResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *GetExtendedACLResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *GetExtendedACLResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEpoch sets epoch of the size estimation.
|
||||||
|
func (m *AnnounceUsedSpaceRequest_Body_Announcement) SetEpoch(v uint64) {
|
||||||
|
m.Epoch = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerId sets identifier of the container.
|
||||||
|
func (m *AnnounceUsedSpaceRequest_Body_Announcement) SetContainerId(v *refs.ContainerID) {
|
||||||
|
m.ContainerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUsedSpace sets used space value of the container.
|
||||||
|
func (m *AnnounceUsedSpaceRequest_Body_Announcement) SetUsedSpace(v uint64) {
|
||||||
|
m.UsedSpace = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAnnouncements sets list of announcement for shared containers between nodes.
|
||||||
|
func (m *AnnounceUsedSpaceRequest_Body) SetAnnouncements(v []*AnnounceUsedSpaceRequest_Body_Announcement) {
|
||||||
|
m.Announcements = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *AnnounceUsedSpaceRequest) SetBody(v *AnnounceUsedSpaceRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *AnnounceUsedSpaceRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *AnnounceUsedSpaceRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *AnnounceUsedSpaceResponse) SetBody(v *AnnounceUsedSpaceResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *AnnounceUsedSpaceResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *AnnounceUsedSpaceResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
BIN
container/grpc/service.pb.go
generated
Normal file
BIN
container/grpc/service.pb.go
generated
Normal file
Binary file not shown.
BIN
container/grpc/service_frostfs.pb.go
generated
BIN
container/grpc/service_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,159 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package container
|
|
||||||
|
|
||||||
func DoFuzzProtoPutRequest(data []byte) int {
|
|
||||||
msg := new(PutRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONPutRequest(data []byte) int {
|
|
||||||
msg := new(PutRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoPutResponse(data []byte) int {
|
|
||||||
msg := new(PutResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONPutResponse(data []byte) int {
|
|
||||||
msg := new(PutResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoDeleteRequest(data []byte) int {
|
|
||||||
msg := new(DeleteRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONDeleteRequest(data []byte) int {
|
|
||||||
msg := new(DeleteRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoDeleteResponse(data []byte) int {
|
|
||||||
msg := new(DeleteResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONDeleteResponse(data []byte) int {
|
|
||||||
msg := new(DeleteResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoGetRequest(data []byte) int {
|
|
||||||
msg := new(GetRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONGetRequest(data []byte) int {
|
|
||||||
msg := new(GetRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoGetResponse(data []byte) int {
|
|
||||||
msg := new(GetResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONGetResponse(data []byte) int {
|
|
||||||
msg := new(GetResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoListRequest(data []byte) int {
|
|
||||||
msg := new(ListRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONListRequest(data []byte) int {
|
|
||||||
msg := new(ListRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoListResponse(data []byte) int {
|
|
||||||
msg := new(ListResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONListResponse(data []byte) int {
|
|
||||||
msg := new(ListResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package container
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoPutRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoPutRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONPutRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONPutRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoPutResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoPutResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONPutResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONPutResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoDeleteRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoDeleteRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONDeleteRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONDeleteRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoDeleteResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoDeleteResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONDeleteResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONDeleteResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoGetRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoGetRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONGetRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONGetRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoGetResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoGetResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONGetResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONGetResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoListRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoListRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONListRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONListRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoListResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoListResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONListResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONListResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
BIN
container/grpc/service_grpc.pb.go
generated
BIN
container/grpc/service_grpc.pb.go
generated
Binary file not shown.
46
container/grpc/types.go
Normal file
46
container/grpc/types.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package container
|
||||||
|
|
||||||
|
import (
|
||||||
|
netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
||||||
|
refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetKey sets key to the container attribute.
|
||||||
|
func (m *Container_Attribute) SetKey(v string) {
|
||||||
|
m.Key = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets value of the container attribute.
|
||||||
|
func (m *Container_Attribute) SetValue(v string) {
|
||||||
|
m.Value = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOwnerId sets identifier of the container owner,
|
||||||
|
func (m *Container) SetOwnerId(v *refs.OwnerID) {
|
||||||
|
m.OwnerId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNonce sets nonce of the container structure.
|
||||||
|
func (m *Container) SetNonce(v []byte) {
|
||||||
|
m.Nonce = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBasicAcl sets basic ACL of the container.
|
||||||
|
func (m *Container) SetBasicAcl(v uint32) {
|
||||||
|
m.BasicAcl = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAttributes sets list of the container attributes.
|
||||||
|
func (m *Container) SetAttributes(v []*Container_Attribute) {
|
||||||
|
m.Attributes = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPlacementPolicy sets placement policy of the container.
|
||||||
|
func (m *Container) SetPlacementPolicy(v *netmap.PlacementPolicy) {
|
||||||
|
m.PlacementPolicy = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVersion sets version of the container.
|
||||||
|
func (m *Container) SetVersion(v *refs.Version) {
|
||||||
|
m.Version = v
|
||||||
|
}
|
BIN
container/grpc/types.pb.go
generated
Normal file
BIN
container/grpc/types.pb.go
generated
Normal file
Binary file not shown.
BIN
container/grpc/types_frostfs.pb.go
generated
BIN
container/grpc/types_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,26 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package container
|
|
||||||
|
|
||||||
func DoFuzzProtoContainer(data []byte) int {
|
|
||||||
msg := new(Container)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONContainer(data []byte) int {
|
|
||||||
msg := new(Container)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package container
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoContainer(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoContainer(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONContainer(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONContainer(data)
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -34,6 +34,21 @@ const (
|
||||||
listReqBodyOwnerField = 1
|
listReqBodyOwnerField = 1
|
||||||
|
|
||||||
listRespBodyIDsField = 1
|
listRespBodyIDsField = 1
|
||||||
|
|
||||||
|
setEACLReqBodyTableField = 1
|
||||||
|
setEACLReqBodySignatureField = 2
|
||||||
|
|
||||||
|
getEACLReqBodyIDField = 1
|
||||||
|
|
||||||
|
getEACLRespBodyTableField = 1
|
||||||
|
getEACLRespBodySignatureField = 2
|
||||||
|
getEACLRespBodyTokenField = 3
|
||||||
|
|
||||||
|
usedSpaceAnnounceEpochField = 1
|
||||||
|
usedSpaceAnnounceCIDField = 2
|
||||||
|
usedSpaceAnnounceUsedSpaceField = 3
|
||||||
|
|
||||||
|
usedSpaceReqBodyAnnouncementsField = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *Attribute) StableMarshal(buf []byte) []byte {
|
func (a *Attribute) StableMarshal(buf []byte) []byte {
|
||||||
|
@ -208,7 +223,7 @@ func (r *DeleteRequestBody) Unmarshal(data []byte) error {
|
||||||
return message.Unmarshal(r, data, new(container.DeleteRequest_Body))
|
return message.Unmarshal(r, data, new(container.DeleteRequest_Body))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *DeleteResponseBody) StableMarshal(_ []byte) []byte {
|
func (r *DeleteResponseBody) StableMarshal(buf []byte) []byte {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,3 +358,189 @@ func (r *ListResponseBody) StableSize() (size int) {
|
||||||
func (r *ListResponseBody) Unmarshal(data []byte) error {
|
func (r *ListResponseBody) Unmarshal(data []byte) error {
|
||||||
return message.Unmarshal(r, data, new(container.ListResponse_Body))
|
return message.Unmarshal(r, data, new(container.ListResponse_Body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) StableMarshal(buf []byte) []byte {
|
||||||
|
if r == nil {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, r.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var offset int
|
||||||
|
|
||||||
|
offset += protoutil.NestedStructureMarshal(setEACLReqBodyTableField, buf[offset:], r.eacl)
|
||||||
|
protoutil.NestedStructureMarshal(setEACLReqBodySignatureField, buf[offset:], r.sig)
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) StableSize() (size int) {
|
||||||
|
if r == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
size += protoutil.NestedStructureSize(setEACLReqBodyTableField, r.eacl)
|
||||||
|
size += protoutil.NestedStructureSize(setEACLReqBodySignatureField, r.sig)
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) Unmarshal(data []byte) error {
|
||||||
|
return message.Unmarshal(r, data, new(container.SetExtendedACLRequest_Body))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponseBody) StableMarshal(buf []byte) []byte {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponseBody) StableSize() (size int) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponseBody) Unmarshal([]byte) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) StableMarshal(buf []byte) []byte {
|
||||||
|
if r == nil {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, r.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
protoutil.NestedStructureMarshal(getEACLReqBodyIDField, buf, r.cid)
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) StableSize() (size int) {
|
||||||
|
if r == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
size += protoutil.NestedStructureSize(getEACLReqBodyIDField, r.cid)
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) Unmarshal(data []byte) error {
|
||||||
|
return message.Unmarshal(r, data, new(container.GetExtendedACLRequest_Body))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) StableMarshal(buf []byte) []byte {
|
||||||
|
if r == nil {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, r.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var offset int
|
||||||
|
|
||||||
|
offset += protoutil.NestedStructureMarshal(getEACLRespBodyTableField, buf[offset:], r.eacl)
|
||||||
|
offset += protoutil.NestedStructureMarshal(getEACLRespBodySignatureField, buf[offset:], r.sig)
|
||||||
|
protoutil.NestedStructureMarshal(getEACLRespBodyTokenField, buf[offset:], r.token)
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) StableSize() (size int) {
|
||||||
|
if r == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
size += protoutil.NestedStructureSize(getEACLRespBodyTableField, r.eacl)
|
||||||
|
size += protoutil.NestedStructureSize(getEACLRespBodySignatureField, r.sig)
|
||||||
|
size += protoutil.NestedStructureSize(getEACLRespBodyTokenField, r.token)
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) Unmarshal(data []byte) error {
|
||||||
|
return message.Unmarshal(r, data, new(container.GetExtendedACLResponse_Body))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) StableMarshal(buf []byte) []byte {
|
||||||
|
if a == nil {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, a.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var offset int
|
||||||
|
|
||||||
|
offset += protoutil.UInt64Marshal(usedSpaceAnnounceEpochField, buf[offset:], a.epoch)
|
||||||
|
offset += protoutil.NestedStructureMarshal(usedSpaceAnnounceCIDField, buf[offset:], a.cid)
|
||||||
|
protoutil.UInt64Marshal(usedSpaceAnnounceUsedSpaceField, buf[offset:], a.usedSpace)
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) StableSize() (size int) {
|
||||||
|
if a == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
size += protoutil.UInt64Size(usedSpaceAnnounceEpochField, a.epoch)
|
||||||
|
size += protoutil.NestedStructureSize(usedSpaceAnnounceCIDField, a.cid)
|
||||||
|
size += protoutil.UInt64Size(usedSpaceAnnounceUsedSpaceField, a.usedSpace)
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) Unmarshal(data []byte) error {
|
||||||
|
return message.Unmarshal(a, data, new(container.AnnounceUsedSpaceRequest_Body_Announcement))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) StableMarshal(buf []byte) []byte {
|
||||||
|
if r == nil {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, r.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var offset int
|
||||||
|
|
||||||
|
for i := range r.announcements {
|
||||||
|
offset += protoutil.NestedStructureMarshal(usedSpaceReqBodyAnnouncementsField, buf[offset:], &r.announcements[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) StableSize() (size int) {
|
||||||
|
if r == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range r.announcements {
|
||||||
|
size += protoutil.NestedStructureSize(usedSpaceReqBodyAnnouncementsField, &r.announcements[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) Unmarshal(data []byte) error {
|
||||||
|
return message.Unmarshal(r, data, new(container.AnnounceUsedSpaceRequest_Body))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponseBody) StableMarshal(buf []byte) []byte {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponseBody) StableSize() (size int) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponseBody) Unmarshal([]byte) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -28,9 +28,20 @@ func TestMessageConvert(t *testing.T) {
|
||||||
func(empty bool) message.Message { return containertest.GenerateListRequest(empty) },
|
func(empty bool) message.Message { return containertest.GenerateListRequest(empty) },
|
||||||
func(empty bool) message.Message { return containertest.GenerateListResponseBody(empty) },
|
func(empty bool) message.Message { return containertest.GenerateListResponseBody(empty) },
|
||||||
func(empty bool) message.Message { return containertest.GenerateListResponse(empty) },
|
func(empty bool) message.Message { return containertest.GenerateListResponse(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateSetExtendedACLRequestBody(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateSetExtendedACLRequest(empty) },
|
||||||
func(empty bool) message.Message { return containertest.GenerateGetRequestBody(empty) },
|
func(empty bool) message.Message { return containertest.GenerateGetRequestBody(empty) },
|
||||||
func(empty bool) message.Message { return containertest.GenerateGetRequest(empty) },
|
func(empty bool) message.Message { return containertest.GenerateGetRequest(empty) },
|
||||||
func(empty bool) message.Message { return containertest.GenerateGetResponseBody(empty) },
|
func(empty bool) message.Message { return containertest.GenerateGetResponseBody(empty) },
|
||||||
func(empty bool) message.Message { return containertest.GenerateGetResponse(empty) },
|
func(empty bool) message.Message { return containertest.GenerateGetResponse(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateGetExtendedACLRequestBody(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateGetExtendedACLRequest(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateGetExtendedACLResponseBody(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateGetExtendedACLResponse(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateUsedSpaceAnnouncement(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateAnnounceUsedSpaceRequestBody(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateAnnounceUsedSpaceRequest(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateAnnounceUsedSpaceResponseBody(empty) },
|
||||||
|
func(empty bool) message.Message { return containertest.GenerateAnnounceUsedSpaceResponse(empty) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
package containertest
|
package containertest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
acltest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/test"
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||||
netmaptest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/test"
|
netmaptest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/test"
|
||||||
refstest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/test"
|
refstest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/test"
|
||||||
|
@ -37,11 +36,8 @@ func GenerateContainer(empty bool) *container.Container {
|
||||||
m := new(container.Container)
|
m := new(container.Container)
|
||||||
|
|
||||||
if !empty {
|
if !empty {
|
||||||
nonce := make([]byte, 16)
|
|
||||||
_, _ = rand.Read(nonce)
|
|
||||||
|
|
||||||
m.SetBasicACL(12)
|
m.SetBasicACL(12)
|
||||||
m.SetNonce(nonce)
|
m.SetNonce([]byte{1, 2, 3})
|
||||||
m.SetOwnerID(refstest.GenerateOwnerID(false))
|
m.SetOwnerID(refstest.GenerateOwnerID(false))
|
||||||
m.SetAttributes(GenerateAttributes(false))
|
m.SetAttributes(GenerateAttributes(false))
|
||||||
m.SetPlacementPolicy(netmaptest.GeneratePlacementPolicy(false))
|
m.SetPlacementPolicy(netmaptest.GeneratePlacementPolicy(false))
|
||||||
|
@ -174,7 +170,7 @@ func GenerateDeleteRequest(empty bool) *container.DeleteRequest {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func GenerateDeleteResponseBody(_ bool) *container.DeleteResponseBody {
|
func GenerateDeleteResponseBody(empty bool) *container.DeleteResponseBody {
|
||||||
m := new(container.DeleteResponseBody)
|
m := new(container.DeleteResponseBody)
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -238,3 +234,163 @@ func GenerateListResponse(empty bool) *container.ListResponse {
|
||||||
|
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GenerateSetExtendedACLRequestBody(empty bool) *container.SetExtendedACLRequestBody {
|
||||||
|
m := new(container.SetExtendedACLRequestBody)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetEACL(acltest.GenerateTable(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetSignature(refstest.GenerateSignature(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateSetExtendedACLRequest(empty bool) *container.SetExtendedACLRequest {
|
||||||
|
m := new(container.SetExtendedACLRequest)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetBody(GenerateSetExtendedACLRequestBody(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
|
||||||
|
m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateSetExtendedACLResponseBody(empty bool) *container.SetExtendedACLResponseBody {
|
||||||
|
m := new(container.SetExtendedACLResponseBody)
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateSetExtendedACLResponse(empty bool) *container.SetExtendedACLResponse {
|
||||||
|
m := new(container.SetExtendedACLResponse)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetBody(GenerateSetExtendedACLResponseBody(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
|
||||||
|
m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateGetExtendedACLRequestBody(empty bool) *container.GetExtendedACLRequestBody {
|
||||||
|
m := new(container.GetExtendedACLRequestBody)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetContainerID(refstest.GenerateContainerID(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateGetExtendedACLRequest(empty bool) *container.GetExtendedACLRequest {
|
||||||
|
m := new(container.GetExtendedACLRequest)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetBody(GenerateGetExtendedACLRequestBody(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
|
||||||
|
m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateGetExtendedACLResponseBody(empty bool) *container.GetExtendedACLResponseBody {
|
||||||
|
m := new(container.GetExtendedACLResponseBody)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetEACL(acltest.GenerateTable(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetSignature(refstest.GenerateSignature(empty))
|
||||||
|
m.SetSessionToken(sessiontest.GenerateSessionToken(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateGetExtendedACLResponse(empty bool) *container.GetExtendedACLResponse {
|
||||||
|
m := new(container.GetExtendedACLResponse)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetBody(GenerateGetExtendedACLResponseBody(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
|
||||||
|
m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateUsedSpaceAnnouncement(empty bool) *container.UsedSpaceAnnouncement {
|
||||||
|
m := new(container.UsedSpaceAnnouncement)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetContainerID(refstest.GenerateContainerID(false))
|
||||||
|
m.SetEpoch(1)
|
||||||
|
m.SetUsedSpace(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateUsedSpaceAnnouncements(empty bool) []container.UsedSpaceAnnouncement {
|
||||||
|
var res []container.UsedSpaceAnnouncement
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
res = append(res,
|
||||||
|
*GenerateUsedSpaceAnnouncement(false),
|
||||||
|
*GenerateUsedSpaceAnnouncement(false),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateAnnounceUsedSpaceRequestBody(empty bool) *container.AnnounceUsedSpaceRequestBody {
|
||||||
|
m := new(container.AnnounceUsedSpaceRequestBody)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetAnnouncements(GenerateUsedSpaceAnnouncements(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateAnnounceUsedSpaceRequest(empty bool) *container.AnnounceUsedSpaceRequest {
|
||||||
|
m := new(container.AnnounceUsedSpaceRequest)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetBody(GenerateAnnounceUsedSpaceRequestBody(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
|
||||||
|
m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateAnnounceUsedSpaceResponseBody(empty bool) *container.AnnounceUsedSpaceResponseBody {
|
||||||
|
m := new(container.AnnounceUsedSpaceResponseBody)
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateAnnounceUsedSpaceResponse(empty bool) *container.AnnounceUsedSpaceResponse {
|
||||||
|
m := new(container.AnnounceUsedSpaceResponse)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetBody(GenerateAnnounceUsedSpaceResponseBody(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
|
||||||
|
m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package container
|
package container
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
||||||
|
@ -109,6 +110,76 @@ type ListResponse struct {
|
||||||
session.ResponseHeaders
|
session.ResponseHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SetExtendedACLRequestBody struct {
|
||||||
|
eacl *acl.Table
|
||||||
|
|
||||||
|
sig *refs.Signature
|
||||||
|
}
|
||||||
|
|
||||||
|
type SetExtendedACLRequest struct {
|
||||||
|
body *SetExtendedACLRequestBody
|
||||||
|
|
||||||
|
session.RequestHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
type SetExtendedACLResponseBody struct{}
|
||||||
|
|
||||||
|
type SetExtendedACLResponse struct {
|
||||||
|
body *SetExtendedACLResponseBody
|
||||||
|
|
||||||
|
session.ResponseHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetExtendedACLRequestBody struct {
|
||||||
|
cid *refs.ContainerID
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetExtendedACLRequest struct {
|
||||||
|
body *GetExtendedACLRequestBody
|
||||||
|
|
||||||
|
session.RequestHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetExtendedACLResponseBody struct {
|
||||||
|
eacl *acl.Table
|
||||||
|
|
||||||
|
sig *refs.Signature
|
||||||
|
|
||||||
|
token *session.Token
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetExtendedACLResponse struct {
|
||||||
|
body *GetExtendedACLResponseBody
|
||||||
|
|
||||||
|
session.ResponseHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
type UsedSpaceAnnouncement struct {
|
||||||
|
epoch uint64
|
||||||
|
|
||||||
|
cid *refs.ContainerID
|
||||||
|
|
||||||
|
usedSpace uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type AnnounceUsedSpaceRequestBody struct {
|
||||||
|
announcements []UsedSpaceAnnouncement
|
||||||
|
}
|
||||||
|
|
||||||
|
type AnnounceUsedSpaceRequest struct {
|
||||||
|
body *AnnounceUsedSpaceRequestBody
|
||||||
|
|
||||||
|
session.RequestHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
type AnnounceUsedSpaceResponseBody struct{}
|
||||||
|
|
||||||
|
type AnnounceUsedSpaceResponse struct {
|
||||||
|
body *AnnounceUsedSpaceResponseBody
|
||||||
|
|
||||||
|
session.ResponseHeaders
|
||||||
|
}
|
||||||
|
|
||||||
func (a *Attribute) GetKey() string {
|
func (a *Attribute) GetKey() string {
|
||||||
if a != nil {
|
if a != nil {
|
||||||
return a.key
|
return a.key
|
||||||
|
@ -444,3 +515,203 @@ func (r *ListResponse) GetBody() *ListResponseBody {
|
||||||
func (r *ListResponse) SetBody(v *ListResponseBody) {
|
func (r *ListResponse) SetBody(v *ListResponseBody) {
|
||||||
r.body = v
|
r.body = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) GetEACL() *acl.Table {
|
||||||
|
if r != nil {
|
||||||
|
return r.eacl
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) SetEACL(v *acl.Table) {
|
||||||
|
r.eacl = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) GetSignature() *refs.Signature {
|
||||||
|
if r != nil {
|
||||||
|
return r.sig
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequestBody) SetSignature(v *refs.Signature) {
|
||||||
|
// TODO: (neofs-api-go#381) avoid this hack (e.g. create refs.SignatureRFC6979 type)
|
||||||
|
v.SetScheme(0)
|
||||||
|
r.sig = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequest) GetBody() *SetExtendedACLRequestBody {
|
||||||
|
if r != nil {
|
||||||
|
return r.body
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLRequest) SetBody(v *SetExtendedACLRequestBody) {
|
||||||
|
r.body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponse) GetBody() *SetExtendedACLResponseBody {
|
||||||
|
if r != nil {
|
||||||
|
return r.body
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SetExtendedACLResponse) SetBody(v *SetExtendedACLResponseBody) {
|
||||||
|
r.body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) GetContainerID() *refs.ContainerID {
|
||||||
|
if r != nil {
|
||||||
|
return r.cid
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequestBody) SetContainerID(v *refs.ContainerID) {
|
||||||
|
r.cid = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequest) GetBody() *GetExtendedACLRequestBody {
|
||||||
|
if r != nil {
|
||||||
|
return r.body
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLRequest) SetBody(v *GetExtendedACLRequestBody) {
|
||||||
|
r.body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) GetEACL() *acl.Table {
|
||||||
|
if r != nil {
|
||||||
|
return r.eacl
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) SetEACL(v *acl.Table) {
|
||||||
|
r.eacl = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) GetSignature() *refs.Signature {
|
||||||
|
if r != nil {
|
||||||
|
return r.sig
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponseBody) SetSignature(v *refs.Signature) {
|
||||||
|
// TODO: (neofs-api-go#381) avoid this hack (e.g. create refs.SignatureRFC6979 type)
|
||||||
|
v.SetScheme(0)
|
||||||
|
r.sig = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSessionToken returns token of the session within which requested
|
||||||
|
// eACL table was set.
|
||||||
|
func (r *GetExtendedACLResponseBody) GetSessionToken() *session.Token {
|
||||||
|
if r != nil {
|
||||||
|
return r.token
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSessionToken sets token of the session within which requested
|
||||||
|
// eACL table was set.
|
||||||
|
func (r *GetExtendedACLResponseBody) SetSessionToken(v *session.Token) {
|
||||||
|
r.token = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponse) GetBody() *GetExtendedACLResponseBody {
|
||||||
|
if r != nil {
|
||||||
|
return r.body
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *GetExtendedACLResponse) SetBody(v *GetExtendedACLResponseBody) {
|
||||||
|
r.body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) GetEpoch() uint64 {
|
||||||
|
if a != nil {
|
||||||
|
return a.epoch
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) SetEpoch(v uint64) {
|
||||||
|
a.epoch = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) GetUsedSpace() uint64 {
|
||||||
|
if a != nil {
|
||||||
|
return a.usedSpace
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) SetUsedSpace(v uint64) {
|
||||||
|
a.usedSpace = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) GetContainerID() *refs.ContainerID {
|
||||||
|
if a != nil {
|
||||||
|
return a.cid
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UsedSpaceAnnouncement) SetContainerID(v *refs.ContainerID) {
|
||||||
|
a.cid = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) GetAnnouncements() []UsedSpaceAnnouncement {
|
||||||
|
if r != nil {
|
||||||
|
return r.announcements
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequestBody) SetAnnouncements(v []UsedSpaceAnnouncement) {
|
||||||
|
r.announcements = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequest) GetBody() *AnnounceUsedSpaceRequestBody {
|
||||||
|
if r != nil {
|
||||||
|
return r.body
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceRequest) SetBody(v *AnnounceUsedSpaceRequestBody) {
|
||||||
|
r.body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponse) GetBody() *AnnounceUsedSpaceResponseBody {
|
||||||
|
if r != nil {
|
||||||
|
return r.body
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *AnnounceUsedSpaceResponse) SetBody(v *AnnounceUsedSpaceResponseBody) {
|
||||||
|
r.body = v
|
||||||
|
}
|
||||||
|
|
29
go.mod
29
go.mod
|
@ -1,28 +1,25 @@
|
||||||
module git.frostfs.info/TrueCloudLab/frostfs-api-go/v2
|
module git.frostfs.info/TrueCloudLab/frostfs-api-go/v2
|
||||||
|
|
||||||
go 1.22
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0
|
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0
|
||||||
github.com/VictoriaMetrics/easyproto v0.1.4
|
github.com/stretchr/testify v1.7.0
|
||||||
github.com/mailru/easyjson v0.7.7
|
golang.org/x/sync v0.1.0
|
||||||
github.com/stretchr/testify v1.8.3
|
google.golang.org/grpc v1.48.0
|
||||||
golang.org/x/sync v0.7.0
|
google.golang.org/protobuf v1.28.0
|
||||||
google.golang.org/grpc v1.66.2
|
|
||||||
google.golang.org/protobuf v1.34.1
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 // indirect
|
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.0 // indirect
|
||||||
github.com/josharian/intern v1.0.0 // indirect
|
github.com/golang/protobuf v1.5.2 // indirect
|
||||||
github.com/kr/pretty v0.1.0 // indirect
|
github.com/google/go-cmp v0.5.8 // indirect
|
||||||
github.com/mr-tron/base58 v1.2.0 // indirect
|
github.com/mr-tron/base58 v1.2.0 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
golang.org/x/net v0.26.0 // indirect
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
|
||||||
golang.org/x/sys v0.21.0 // indirect
|
golang.org/x/sys v0.1.0 // indirect
|
||||||
golang.org/x/text v0.16.0 // indirect
|
golang.org/x/text v0.3.3 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
164
go.sum
164
go.sum
|
@ -1,48 +1,142 @@
|
||||||
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 h1:FxqFDhQYYgpe41qsIHVOcdzSVCB8JNSfPG7Uk4r2oSk=
|
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 h1:FxqFDhQYYgpe41qsIHVOcdzSVCB8JNSfPG7Uk4r2oSk=
|
||||||
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0/go.mod h1:RUIKZATQLJ+TaYQa60X2fTDwfuhMfm8Ar60bQ5fr+vU=
|
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0/go.mod h1:RUIKZATQLJ+TaYQa60X2fTDwfuhMfm8Ar60bQ5fr+vU=
|
||||||
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 h1:M2KR3iBj7WpY3hP10IevfIB9MURr4O9mwVfJ+SjT3HA=
|
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 h1:M2KR3iBj7WpY3hP10IevfIB9MURr4O9mwVfJ+SjT3HA=
|
||||||
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0/go.mod h1:okpbKfVYf/BpejtfFTfhZqFP+sZ8rsHrP8Rr/jYPNRc=
|
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0/go.mod h1:okpbKfVYf/BpejtfFTfhZqFP+sZ8rsHrP8Rr/jYPNRc=
|
||||||
github.com/VictoriaMetrics/easyproto v0.1.4 h1:r8cNvo8o6sR4QShBXQd1bKw/VVLSQma/V2KhTBPf+Sc=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/VictoriaMetrics/easyproto v0.1.4/go.mod h1:QlGlzaJnDfFd8Lk6Ci/fuLxfTo3/GThPs2KH23mv710=
|
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
|
||||||
|
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
|
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
|
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
|
||||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
|
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||||
|
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
|
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
|
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||||
|
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||||
|
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||||
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
|
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
|
||||||
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
|
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
|
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
|
||||||
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
||||||
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
|
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
|
||||||
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
||||||
|
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||||
|
google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
|
||||||
|
google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
|
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||||
|
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|
15
internal/random/rand.go
Normal file
15
internal/random/rand.go
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package random
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint32 returns random uint32 value [0, max).
|
||||||
|
func Uint32(max uint32) uint32 {
|
||||||
|
return rand.Uint32() % max
|
||||||
|
}
|
8
lock/grpc/types.go
Normal file
8
lock/grpc/types.go
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
package lock
|
||||||
|
|
||||||
|
import refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
|
||||||
|
// SetMembers sets `members` field.
|
||||||
|
func (x *Lock) SetMembers(ids []*refs.ObjectID) {
|
||||||
|
x.Members = ids
|
||||||
|
}
|
BIN
lock/grpc/types.pb.go
generated
Normal file
BIN
lock/grpc/types.pb.go
generated
Normal file
Binary file not shown.
BIN
lock/grpc/types_frostfs.pb.go
generated
BIN
lock/grpc/types_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,26 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package lock
|
|
||||||
|
|
||||||
func DoFuzzProtoLock(data []byte) int {
|
|
||||||
msg := new(Lock)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONLock(data []byte) int {
|
|
||||||
msg := new(Lock)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package lock
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoLock(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoLock(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONLock(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONLock(data)
|
|
||||||
})
|
|
||||||
}
|
|
232
netmap/attributes.go
Normal file
232
netmap/attributes.go
Normal file
|
@ -0,0 +1,232 @@
|
||||||
|
package netmap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
|
)
|
||||||
|
|
||||||
|
// prefix of keys to subnet attributes.
|
||||||
|
const attrSubnetPrefix = "__SYSTEM__SUBNET_"
|
||||||
|
|
||||||
|
// prefix of keys to subnet attributes.
|
||||||
|
// Deprecated: use attrSubnetPrefix
|
||||||
|
const attrSubnetPrefixNeoFS = "__NEOFS__SUBNET_"
|
||||||
|
|
||||||
|
const (
|
||||||
|
// subnet attribute's value denoting subnet entry
|
||||||
|
attrSubnetValEntry = "True"
|
||||||
|
|
||||||
|
// subnet attribute's value denoting subnet exit
|
||||||
|
attrSubnetValExit = "False"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NodeSubnetInfo groups information about subnet which can be written to NodeInfo.
|
||||||
|
//
|
||||||
|
// Zero value represents entry to zero subnet.
|
||||||
|
type NodeSubnetInfo struct {
|
||||||
|
exit bool
|
||||||
|
|
||||||
|
id *refs.SubnetID
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enabled returns true iff subnet membership is enabled for the node.
|
||||||
|
func (x NodeSubnetInfo) Enabled() bool {
|
||||||
|
return !x.exit
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEntryFlag sets the subnet entry flag.
|
||||||
|
func (x *NodeSubnetInfo) SetEntryFlag(enters bool) {
|
||||||
|
x.exit = !enters
|
||||||
|
}
|
||||||
|
|
||||||
|
// ID returns identifier of the subnet.
|
||||||
|
func (x NodeSubnetInfo) ID() *refs.SubnetID {
|
||||||
|
return x.id
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetID sets identifier of the subnet.
|
||||||
|
func (x *NodeSubnetInfo) SetID(id *refs.SubnetID) {
|
||||||
|
x.id = id
|
||||||
|
}
|
||||||
|
|
||||||
|
func subnetAttributeKey(id *refs.SubnetID) string {
|
||||||
|
txt, _ := id.MarshalText() // never returns an error
|
||||||
|
|
||||||
|
return attrSubnetPrefix + string(txt)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WriteSubnetInfo writes NodeSubnetInfo to NodeInfo via attributes. NodeInfo must not be nil.
|
||||||
|
//
|
||||||
|
// Existing subnet attributes are expected to be key-unique, otherwise undefined behavior.
|
||||||
|
//
|
||||||
|
// Does not add (removes existing) attribute if node:
|
||||||
|
// - disables non-zero subnet;
|
||||||
|
// - enables zero subnet.
|
||||||
|
//
|
||||||
|
// Attribute key is calculated from ID using format `__SYSTEM__SUBNET_%s`.
|
||||||
|
// Attribute Value is:
|
||||||
|
// - `True` if node enters the subnet;
|
||||||
|
// - `False`, otherwise.
|
||||||
|
func WriteSubnetInfo(node *NodeInfo, info NodeSubnetInfo) {
|
||||||
|
attrs := node.GetAttributes()
|
||||||
|
|
||||||
|
id := info.ID()
|
||||||
|
enters := info.Enabled()
|
||||||
|
|
||||||
|
// calculate attribute key
|
||||||
|
key := subnetAttributeKey(id)
|
||||||
|
|
||||||
|
if refs.IsZeroSubnet(id) == enters {
|
||||||
|
for i := range attrs {
|
||||||
|
if attrs[i].GetKey() == key {
|
||||||
|
attrs = append(attrs[:i], attrs[i+1:]...)
|
||||||
|
break // attributes are expected to be key-unique
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var val string
|
||||||
|
|
||||||
|
if enters {
|
||||||
|
val = attrSubnetValEntry
|
||||||
|
} else {
|
||||||
|
val = attrSubnetValExit
|
||||||
|
}
|
||||||
|
|
||||||
|
presented := false
|
||||||
|
|
||||||
|
for i := range attrs {
|
||||||
|
if attrs[i].GetKey() == key {
|
||||||
|
attrs[i].SetValue(val)
|
||||||
|
presented = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !presented {
|
||||||
|
index := len(attrs)
|
||||||
|
attrs = append(attrs, Attribute{})
|
||||||
|
attrs[index].SetKey(key)
|
||||||
|
attrs[index].SetValue(val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node.SetAttributes(attrs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrRemoveSubnet is returned when a node needs to leave the subnet.
|
||||||
|
var ErrRemoveSubnet = errors.New("remove subnet")
|
||||||
|
|
||||||
|
var errNoSubnets = errors.New("no subnets")
|
||||||
|
|
||||||
|
// IterateSubnets iterates over all subnets the node belongs to and passes the IDs to f.
|
||||||
|
// Handler must not be nil.
|
||||||
|
//
|
||||||
|
// Subnet attributes are expected to be key-unique, otherwise undefined behavior.
|
||||||
|
//
|
||||||
|
// If f returns ErrRemoveSubnet, then removes subnet entry. Note that this leads to an instant mutation of NodeInfo.
|
||||||
|
// Breaks on any other non-nil error and returns it.
|
||||||
|
//
|
||||||
|
// Returns an error if any subnet attribute has wrong format.
|
||||||
|
// Returns an error if the node is not included in any subnet by the end of the loop.
|
||||||
|
func IterateSubnets(node *NodeInfo, f func(refs.SubnetID) error) error {
|
||||||
|
attrs := node.GetAttributes()
|
||||||
|
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
id refs.SubnetID
|
||||||
|
entries uint
|
||||||
|
|
||||||
|
zeroEntry = true
|
||||||
|
)
|
||||||
|
|
||||||
|
for i := 0; i < len(attrs); i++ { // range must not be used because of attrs mutation in body
|
||||||
|
key := attrs[i].GetKey()
|
||||||
|
|
||||||
|
// cut subnet ID string
|
||||||
|
idTxt := strings.TrimPrefix(key, attrSubnetPrefix)
|
||||||
|
if len(idTxt) == len(key) {
|
||||||
|
idTxt = strings.TrimPrefix(key, attrSubnetPrefixNeoFS)
|
||||||
|
if len(idTxt) == len(key) {
|
||||||
|
// not a subnet attribute
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check value
|
||||||
|
val := attrs[i].GetValue()
|
||||||
|
if val != attrSubnetValExit && val != attrSubnetValEntry {
|
||||||
|
return fmt.Errorf("invalid attribute value: %s", val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// decode subnet ID
|
||||||
|
if err = id.UnmarshalText([]byte(idTxt)); err != nil {
|
||||||
|
return fmt.Errorf("invalid ID text: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// update status of zero subnet
|
||||||
|
isZero := refs.IsZeroSubnet(&id)
|
||||||
|
|
||||||
|
if isZero {
|
||||||
|
zeroEntry = val == attrSubnetValEntry
|
||||||
|
}
|
||||||
|
|
||||||
|
// continue to process only the subnets to which the node belongs
|
||||||
|
if val == attrSubnetValExit {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// pass ID to the handler
|
||||||
|
err = f(id)
|
||||||
|
|
||||||
|
isRemoveErr := errors.Is(err, ErrRemoveSubnet)
|
||||||
|
|
||||||
|
if err != nil && !isRemoveErr {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if isRemoveErr {
|
||||||
|
if isZero {
|
||||||
|
// we can't remove attribute of zero subnet because it means entry
|
||||||
|
attrs[i].SetValue(attrSubnetValExit)
|
||||||
|
} else {
|
||||||
|
// we can set False or remove attribute, latter is more memory/network efficient.
|
||||||
|
attrs = append(attrs[:i], attrs[i+1:]...)
|
||||||
|
i--
|
||||||
|
}
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
entries++
|
||||||
|
}
|
||||||
|
|
||||||
|
if zeroEntry {
|
||||||
|
// missing attribute of zero subnet equivalent to entry
|
||||||
|
refs.MakeZeroSubnet(&id)
|
||||||
|
|
||||||
|
err = f(id)
|
||||||
|
if err != nil {
|
||||||
|
if !errors.Is(err, ErrRemoveSubnet) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// zero subnet should be clearly removed with False value
|
||||||
|
index := len(attrs)
|
||||||
|
attrs = append(attrs, Attribute{})
|
||||||
|
attrs[index].SetKey(subnetAttributeKey(&id))
|
||||||
|
attrs[index].SetValue(attrSubnetValExit)
|
||||||
|
} else {
|
||||||
|
entries++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if entries <= 0 {
|
||||||
|
return errNoSubnets
|
||||||
|
}
|
||||||
|
|
||||||
|
node.SetAttributes(attrs)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
361
netmap/attributes_test.go
Normal file
361
netmap/attributes_test.go
Normal file
|
@ -0,0 +1,361 @@
|
||||||
|
package netmap_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||||
|
netmaptest "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/test"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func subnetAttrKey(val string) string {
|
||||||
|
return "__SYSTEM__SUBNET_" + val
|
||||||
|
}
|
||||||
|
|
||||||
|
func assertSubnetAttrKey(t *testing.T, attr *netmap.Attribute, num uint32) {
|
||||||
|
require.Equal(t, subnetAttrKey(strconv.FormatUint(uint64(num), 10)), attr.GetKey())
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkNodeAttributes(b *testing.B) {
|
||||||
|
const size = 50
|
||||||
|
|
||||||
|
id := new(refs.SubnetID)
|
||||||
|
id.SetValue(12)
|
||||||
|
|
||||||
|
attrs := make([]netmap.Attribute, size)
|
||||||
|
for i := range attrs {
|
||||||
|
if i == size/2 {
|
||||||
|
attrs[i] = *netmaptest.GenerateAttribute(false)
|
||||||
|
} else {
|
||||||
|
data, err := id.MarshalText()
|
||||||
|
require.NoError(b, err)
|
||||||
|
|
||||||
|
attrs[i].SetKey(subnetAttrKey(string(data)))
|
||||||
|
attrs[i].SetValue("True")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var info netmap.NodeSubnetInfo
|
||||||
|
info.SetID(id)
|
||||||
|
info.SetEntryFlag(false)
|
||||||
|
|
||||||
|
node := new(netmap.NodeInfo)
|
||||||
|
|
||||||
|
// When using a single slice `StartTimer` overhead is comparable to the
|
||||||
|
// function execution time, so we reduce this cost by updating slices in groups.
|
||||||
|
const cacheSize = 1000
|
||||||
|
a := make([][]netmap.Attribute, cacheSize)
|
||||||
|
for i := range a {
|
||||||
|
a[i] = make([]netmap.Attribute, size)
|
||||||
|
}
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
b.ReportAllocs()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
if i%cacheSize == 0 {
|
||||||
|
b.StopTimer()
|
||||||
|
for j := range a {
|
||||||
|
copy(a[j], attrs)
|
||||||
|
}
|
||||||
|
b.StartTimer()
|
||||||
|
}
|
||||||
|
node.SetAttributes(a[i%cacheSize])
|
||||||
|
netmap.WriteSubnetInfo(node, info)
|
||||||
|
if len(node.GetAttributes())+1 != len(attrs) {
|
||||||
|
b.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWriteSubnetInfo(t *testing.T) {
|
||||||
|
t.Run("entry", func(t *testing.T) {
|
||||||
|
t.Run("zero subnet", func(t *testing.T) {
|
||||||
|
var (
|
||||||
|
node netmap.NodeInfo
|
||||||
|
info netmap.NodeSubnetInfo
|
||||||
|
)
|
||||||
|
|
||||||
|
netmap.WriteSubnetInfo(&node, info)
|
||||||
|
|
||||||
|
// entry to zero subnet does not require an attribute
|
||||||
|
attrs := node.GetAttributes()
|
||||||
|
require.Empty(t, attrs)
|
||||||
|
|
||||||
|
// exit the subnet
|
||||||
|
info.SetEntryFlag(false)
|
||||||
|
|
||||||
|
netmap.WriteSubnetInfo(&node, info)
|
||||||
|
|
||||||
|
// exit from zero subnet should be clearly reflected in attributes
|
||||||
|
attrs = node.GetAttributes()
|
||||||
|
require.Len(t, attrs, 1)
|
||||||
|
|
||||||
|
attr := &attrs[0]
|
||||||
|
assertSubnetAttrKey(t, attr, 0)
|
||||||
|
require.Equal(t, "False", attr.GetValue())
|
||||||
|
|
||||||
|
// again enter to zero subnet
|
||||||
|
info.SetEntryFlag(true)
|
||||||
|
|
||||||
|
netmap.WriteSubnetInfo(&node, info)
|
||||||
|
|
||||||
|
// attribute should be removed
|
||||||
|
attrs = node.GetAttributes()
|
||||||
|
require.Empty(t, attrs)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("non-zero subnet", func(t *testing.T) {
|
||||||
|
var (
|
||||||
|
node netmap.NodeInfo
|
||||||
|
info netmap.NodeSubnetInfo
|
||||||
|
id refs.SubnetID
|
||||||
|
)
|
||||||
|
|
||||||
|
// create non-zero subnet ID
|
||||||
|
const num = 15
|
||||||
|
|
||||||
|
id.SetValue(num)
|
||||||
|
|
||||||
|
// enter to the subnet
|
||||||
|
info.SetID(&id)
|
||||||
|
info.SetEntryFlag(true)
|
||||||
|
|
||||||
|
netmap.WriteSubnetInfo(&node, info)
|
||||||
|
|
||||||
|
// check attribute format
|
||||||
|
attrs := node.GetAttributes()
|
||||||
|
require.Len(t, attrs, 1)
|
||||||
|
|
||||||
|
attr := &attrs[0]
|
||||||
|
assertSubnetAttrKey(t, attr, num)
|
||||||
|
require.Equal(t, "True", attr.GetValue())
|
||||||
|
|
||||||
|
// again exit the subnet
|
||||||
|
info.SetEntryFlag(false)
|
||||||
|
|
||||||
|
netmap.WriteSubnetInfo(&node, info)
|
||||||
|
|
||||||
|
// attribute should be removed
|
||||||
|
attrs = node.GetAttributes()
|
||||||
|
require.Empty(t, attrs)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSubnets(t *testing.T) {
|
||||||
|
t.Run("empty", func(t *testing.T) {
|
||||||
|
var node netmap.NodeInfo
|
||||||
|
|
||||||
|
called := 0
|
||||||
|
|
||||||
|
err := netmap.IterateSubnets(&node, func(id refs.SubnetID) error {
|
||||||
|
called++
|
||||||
|
|
||||||
|
require.True(t, refs.IsZeroSubnet(&id))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.EqualValues(t, 1, called)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("with correct attribute", func(t *testing.T) {
|
||||||
|
var (
|
||||||
|
node netmap.NodeInfo
|
||||||
|
|
||||||
|
attrEntry, attrExit netmap.Attribute
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
numEntry = 13
|
||||||
|
numExit = 14
|
||||||
|
)
|
||||||
|
|
||||||
|
attrEntry.SetKey(subnetAttrKey(strconv.FormatUint(numEntry, 10)))
|
||||||
|
attrEntry.SetValue("True")
|
||||||
|
|
||||||
|
attrExit.SetKey(subnetAttrKey(strconv.FormatUint(numExit, 10)))
|
||||||
|
attrExit.SetValue("False")
|
||||||
|
|
||||||
|
attrs := []netmap.Attribute{attrEntry, attrEntry}
|
||||||
|
|
||||||
|
node.SetAttributes(attrs)
|
||||||
|
|
||||||
|
mCalledNums := make(map[uint32]struct{})
|
||||||
|
|
||||||
|
err := netmap.IterateSubnets(&node, func(id refs.SubnetID) error {
|
||||||
|
mCalledNums[id.GetValue()] = struct{}{}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, mCalledNums, 2)
|
||||||
|
|
||||||
|
_, ok := mCalledNums[numEntry]
|
||||||
|
require.True(t, ok)
|
||||||
|
|
||||||
|
_, ok = mCalledNums[numExit]
|
||||||
|
require.False(t, ok)
|
||||||
|
|
||||||
|
_, ok = mCalledNums[0]
|
||||||
|
require.True(t, ok)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("with incorrect attribute", func(t *testing.T) {
|
||||||
|
assertErr := func(attr netmap.Attribute) {
|
||||||
|
var node netmap.NodeInfo
|
||||||
|
|
||||||
|
node.SetAttributes([]netmap.Attribute{attr})
|
||||||
|
|
||||||
|
require.Error(t, netmap.IterateSubnets(&node, func(refs.SubnetID) error {
|
||||||
|
return nil
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("incorrect key", func(t *testing.T) {
|
||||||
|
var attr netmap.Attribute
|
||||||
|
|
||||||
|
attr.SetKey(subnetAttrKey("one-two-three"))
|
||||||
|
|
||||||
|
assertErr(attr)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("incorrect value", func(t *testing.T) {
|
||||||
|
var attr netmap.Attribute
|
||||||
|
|
||||||
|
attr.SetKey(subnetAttrKey("1"))
|
||||||
|
|
||||||
|
for _, invalidVal := range []string{
|
||||||
|
"",
|
||||||
|
"Troo",
|
||||||
|
"Fols",
|
||||||
|
} {
|
||||||
|
attr.SetValue(invalidVal)
|
||||||
|
assertErr(attr)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertErr(attr)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("remove entry", func(t *testing.T) {
|
||||||
|
t.Run("zero", func(t *testing.T) {
|
||||||
|
var node netmap.NodeInfo
|
||||||
|
|
||||||
|
// enter to some non-zero subnet so that zero is not the only one
|
||||||
|
var attr netmap.Attribute
|
||||||
|
|
||||||
|
attr.SetKey(subnetAttrKey("321"))
|
||||||
|
attr.SetValue("True")
|
||||||
|
|
||||||
|
attrs := []netmap.Attribute{attr}
|
||||||
|
node.SetAttributes(attrs)
|
||||||
|
|
||||||
|
err := netmap.IterateSubnets(&node, func(id refs.SubnetID) error {
|
||||||
|
if refs.IsZeroSubnet(&id) {
|
||||||
|
return netmap.ErrRemoveSubnet
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
attrs = node.GetAttributes()
|
||||||
|
require.Len(t, attrs, 2)
|
||||||
|
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for i := range attrs {
|
||||||
|
if attrs[i].GetKey() == subnetAttrKey("0") {
|
||||||
|
require.Equal(t, "False", attrs[i].GetValue())
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require.True(t, found)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("non-zero", func(t *testing.T) {
|
||||||
|
var (
|
||||||
|
node netmap.NodeInfo
|
||||||
|
attr netmap.Attribute
|
||||||
|
)
|
||||||
|
|
||||||
|
attr.SetKey(subnetAttrKey("99"))
|
||||||
|
attr.SetValue("True")
|
||||||
|
|
||||||
|
attrs := []netmap.Attribute{attr}
|
||||||
|
node.SetAttributes(attrs)
|
||||||
|
|
||||||
|
err := netmap.IterateSubnets(&node, func(id refs.SubnetID) error {
|
||||||
|
if !refs.IsZeroSubnet(&id) {
|
||||||
|
return netmap.ErrRemoveSubnet
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
attrs = node.GetAttributes()
|
||||||
|
require.Empty(t, attrs)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("all", func(t *testing.T) {
|
||||||
|
var (
|
||||||
|
node netmap.NodeInfo
|
||||||
|
attrs []netmap.Attribute
|
||||||
|
)
|
||||||
|
|
||||||
|
// enter to some non-zero subnet so that zero is not the only one
|
||||||
|
for i := 1; i <= 5; i++ {
|
||||||
|
var attr netmap.Attribute
|
||||||
|
|
||||||
|
attr.SetKey(subnetAttrKey(strconv.Itoa(i)))
|
||||||
|
attr.SetValue("True")
|
||||||
|
|
||||||
|
attrs = append(attrs, attr)
|
||||||
|
}
|
||||||
|
|
||||||
|
node.SetAttributes(attrs)
|
||||||
|
|
||||||
|
err := netmap.IterateSubnets(&node, func(id refs.SubnetID) error {
|
||||||
|
return netmap.ErrRemoveSubnet
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("zero subnet removal via attribute", func(t *testing.T) {
|
||||||
|
var (
|
||||||
|
node netmap.NodeInfo
|
||||||
|
|
||||||
|
attrZero, attrOther netmap.Attribute
|
||||||
|
)
|
||||||
|
|
||||||
|
attrZero.SetKey(subnetAttrKey("0"))
|
||||||
|
attrZero.SetValue("False")
|
||||||
|
|
||||||
|
attrOther.SetKey(subnetAttrKey("1"))
|
||||||
|
attrOther.SetValue("True")
|
||||||
|
|
||||||
|
node.SetAttributes([]netmap.Attribute{attrZero, attrOther})
|
||||||
|
|
||||||
|
calledCount := 0
|
||||||
|
|
||||||
|
err := netmap.IterateSubnets(&node, func(id refs.SubnetID) error {
|
||||||
|
require.False(t, refs.IsZeroSubnet(&id))
|
||||||
|
calledCount++
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.EqualValues(t, 1, calledCount)
|
||||||
|
})
|
||||||
|
}
|
|
@ -45,29 +45,31 @@ func (f *Filter) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FiltersToGRPC(fs []Filter) (res []netmap.Filter) {
|
func FiltersToGRPC(fs []Filter) (res []*netmap.Filter) {
|
||||||
if fs != nil {
|
if fs != nil {
|
||||||
res = make([]netmap.Filter, 0, len(fs))
|
res = make([]*netmap.Filter, 0, len(fs))
|
||||||
|
|
||||||
for i := range fs {
|
for i := range fs {
|
||||||
res = append(res, *fs[i].ToGRPCMessage().(*netmap.Filter))
|
res = append(res, fs[i].ToGRPCMessage().(*netmap.Filter))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func FiltersFromGRPC(fs []netmap.Filter) (res []Filter, err error) {
|
func FiltersFromGRPC(fs []*netmap.Filter) (res []Filter, err error) {
|
||||||
if fs != nil {
|
if fs != nil {
|
||||||
res = make([]Filter, len(fs))
|
res = make([]Filter, len(fs))
|
||||||
|
|
||||||
for i := range fs {
|
for i := range fs {
|
||||||
err = res[i].FromGRPCMessage(&fs[i])
|
if fs[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(fs[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -103,29 +105,31 @@ func (s *Selector) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelectorsToGRPC(ss []Selector) (res []netmap.Selector) {
|
func SelectorsToGRPC(ss []Selector) (res []*netmap.Selector) {
|
||||||
if ss != nil {
|
if ss != nil {
|
||||||
res = make([]netmap.Selector, 0, len(ss))
|
res = make([]*netmap.Selector, 0, len(ss))
|
||||||
|
|
||||||
for i := range ss {
|
for i := range ss {
|
||||||
res = append(res, *ss[i].ToGRPCMessage().(*netmap.Selector))
|
res = append(res, ss[i].ToGRPCMessage().(*netmap.Selector))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelectorsFromGRPC(ss []netmap.Selector) (res []Selector, err error) {
|
func SelectorsFromGRPC(ss []*netmap.Selector) (res []Selector, err error) {
|
||||||
if ss != nil {
|
if ss != nil {
|
||||||
res = make([]Selector, len(ss))
|
res = make([]Selector, len(ss))
|
||||||
|
|
||||||
for i := range ss {
|
for i := range ss {
|
||||||
err = res[i].FromGRPCMessage(&ss[i])
|
if ss[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(ss[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -138,8 +142,6 @@ func (r *Replica) ToGRPCMessage() grpc.Message {
|
||||||
|
|
||||||
m.SetSelector(r.selector)
|
m.SetSelector(r.selector)
|
||||||
m.SetCount(r.count)
|
m.SetCount(r.count)
|
||||||
m.EcDataCount = r.ecDataCount
|
|
||||||
m.EcParityCount = r.ecParityCount
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -153,35 +155,35 @@ func (r *Replica) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
|
||||||
r.selector = v.GetSelector()
|
r.selector = v.GetSelector()
|
||||||
r.count = v.GetCount()
|
r.count = v.GetCount()
|
||||||
r.ecDataCount = v.GetEcDataCount()
|
|
||||||
r.ecParityCount = v.GetEcParityCount()
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReplicasToGRPC(rs []Replica) (res []netmap.Replica) {
|
func ReplicasToGRPC(rs []Replica) (res []*netmap.Replica) {
|
||||||
if rs != nil {
|
if rs != nil {
|
||||||
res = make([]netmap.Replica, 0, len(rs))
|
res = make([]*netmap.Replica, 0, len(rs))
|
||||||
|
|
||||||
for i := range rs {
|
for i := range rs {
|
||||||
res = append(res, *rs[i].ToGRPCMessage().(*netmap.Replica))
|
res = append(res, rs[i].ToGRPCMessage().(*netmap.Replica))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReplicasFromGRPC(rs []netmap.Replica) (res []Replica, err error) {
|
func ReplicasFromGRPC(rs []*netmap.Replica) (res []Replica, err error) {
|
||||||
if rs != nil {
|
if rs != nil {
|
||||||
res = make([]Replica, len(rs))
|
res = make([]Replica, len(rs))
|
||||||
|
|
||||||
for i := range rs {
|
for i := range rs {
|
||||||
err = res[i].FromGRPCMessage(&rs[i])
|
if rs[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(rs[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -196,7 +198,7 @@ func (p *PlacementPolicy) ToGRPCMessage() grpc.Message {
|
||||||
m.SetSelectors(SelectorsToGRPC(p.selectors))
|
m.SetSelectors(SelectorsToGRPC(p.selectors))
|
||||||
m.SetReplicas(ReplicasToGRPC(p.replicas))
|
m.SetReplicas(ReplicasToGRPC(p.replicas))
|
||||||
m.SetContainerBackupFactor(p.backupFactor)
|
m.SetContainerBackupFactor(p.backupFactor)
|
||||||
m.SetUnique(p.unique)
|
m.SetSubnetID(p.subnetID.ToGRPCMessage().(*refsGRPC.SubnetID))
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -225,9 +227,21 @@ func (p *PlacementPolicy) FromGRPCMessage(m grpc.Message) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
p.backupFactor = v.GetContainerBackupFactor()
|
subnetID := v.GetSubnetId()
|
||||||
|
if subnetID == nil {
|
||||||
|
p.subnetID = nil
|
||||||
|
} else {
|
||||||
|
if p.subnetID == nil {
|
||||||
|
p.subnetID = new(refs.SubnetID)
|
||||||
|
}
|
||||||
|
|
||||||
p.unique = v.GetUnique()
|
err = p.subnetID.FromGRPCMessage(subnetID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p.backupFactor = v.GetContainerBackupFactor()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -283,29 +297,31 @@ func (a *Attribute) FromGRPCMessage(m grpc.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func AttributesToGRPC(as []Attribute) (res []netmap.NodeInfo_Attribute) {
|
func AttributesToGRPC(as []Attribute) (res []*netmap.NodeInfo_Attribute) {
|
||||||
if as != nil {
|
if as != nil {
|
||||||
res = make([]netmap.NodeInfo_Attribute, 0, len(as))
|
res = make([]*netmap.NodeInfo_Attribute, 0, len(as))
|
||||||
|
|
||||||
for i := range as {
|
for i := range as {
|
||||||
res = append(res, *as[i].ToGRPCMessage().(*netmap.NodeInfo_Attribute))
|
res = append(res, as[i].ToGRPCMessage().(*netmap.NodeInfo_Attribute))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func AttributesFromGRPC(as []netmap.NodeInfo_Attribute) (res []Attribute, err error) {
|
func AttributesFromGRPC(as []*netmap.NodeInfo_Attribute) (res []Attribute, err error) {
|
||||||
if as != nil {
|
if as != nil {
|
||||||
res = make([]Attribute, len(as))
|
res = make([]Attribute, len(as))
|
||||||
|
|
||||||
for i := range as {
|
for i := range as {
|
||||||
err = res[i].FromGRPCMessage(&as[i])
|
if as[i] != nil {
|
||||||
|
err = res[i].FromGRPCMessage(as[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -520,13 +536,13 @@ func (x *NetworkConfig) ToGRPCMessage() grpc.Message {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
m = new(netmap.NetworkConfig)
|
m = new(netmap.NetworkConfig)
|
||||||
|
|
||||||
var ps []netmap.NetworkConfig_Parameter
|
var ps []*netmap.NetworkConfig_Parameter
|
||||||
|
|
||||||
if ln := len(x.ps); ln > 0 {
|
if ln := len(x.ps); ln > 0 {
|
||||||
ps = make([]netmap.NetworkConfig_Parameter, 0, ln)
|
ps = make([]*netmap.NetworkConfig_Parameter, 0, ln)
|
||||||
|
|
||||||
for i := range ln {
|
for i := 0; i < ln; i++ {
|
||||||
ps = append(ps, *x.ps[i].ToGRPCMessage().(*netmap.NetworkConfig_Parameter))
|
ps = append(ps, x.ps[i].ToGRPCMessage().(*netmap.NetworkConfig_Parameter))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,12 +568,14 @@ func (x *NetworkConfig) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
|
||||||
ps = make([]NetworkParameter, ln)
|
ps = make([]NetworkParameter, ln)
|
||||||
|
|
||||||
for i := range ln {
|
for i := 0; i < ln; i++ {
|
||||||
if err := ps[i].FromGRPCMessage(&psV2[i]); err != nil {
|
if psV2[i] != nil {
|
||||||
|
if err := ps[i].FromGRPCMessage(psV2[i]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
x.ps = ps
|
x.ps = ps
|
||||||
|
|
||||||
|
@ -746,10 +764,10 @@ func (x *NetMap) ToGRPCMessage() grpc.Message {
|
||||||
m.SetEpoch(x.epoch)
|
m.SetEpoch(x.epoch)
|
||||||
|
|
||||||
if x.nodes != nil {
|
if x.nodes != nil {
|
||||||
nodes := make([]netmap.NodeInfo, len(x.nodes))
|
nodes := make([]*netmap.NodeInfo, len(x.nodes))
|
||||||
|
|
||||||
for i := range x.nodes {
|
for i := range x.nodes {
|
||||||
nodes[i] = *x.nodes[i].ToGRPCMessage().(*netmap.NodeInfo)
|
nodes[i] = x.nodes[i].ToGRPCMessage().(*netmap.NodeInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.SetNodes(nodes)
|
m.SetNodes(nodes)
|
||||||
|
@ -774,7 +792,7 @@ func (x *NetMap) FromGRPCMessage(m grpc.Message) error {
|
||||||
x.nodes = make([]NodeInfo, len(nodes))
|
x.nodes = make([]NodeInfo, len(nodes))
|
||||||
|
|
||||||
for i := range nodes {
|
for i := range nodes {
|
||||||
err = x.nodes[i].FromGRPCMessage(&nodes[i])
|
err = x.nodes[i].FromGRPCMessage(nodes[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
116
netmap/grpc/service.go
Normal file
116
netmap/grpc/service.go
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
package netmap
|
||||||
|
|
||||||
|
import (
|
||||||
|
refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (m *LocalNodeInfoRequest) SetBody(v *LocalNodeInfoRequest_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (m *LocalNodeInfoRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (m *LocalNodeInfoRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVersion sets version of response body.
|
||||||
|
func (m *LocalNodeInfoResponse_Body) SetVersion(v *refs.Version) {
|
||||||
|
m.Version = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNodeInfo sets node info of response body.
|
||||||
|
func (m *LocalNodeInfoResponse_Body) SetNodeInfo(v *NodeInfo) {
|
||||||
|
m.NodeInfo = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (m *LocalNodeInfoResponse) SetBody(v *LocalNodeInfoResponse_Body) {
|
||||||
|
m.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (m *LocalNodeInfoResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
m.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (m *LocalNodeInfoResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
m.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (x *NetworkInfoRequest) SetBody(v *NetworkInfoRequest_Body) {
|
||||||
|
x.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (x *NetworkInfoRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
x.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (x *NetworkInfoRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
x.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNetworkInfo sets information about the network.
|
||||||
|
func (x *NetworkInfoResponse_Body) SetNetworkInfo(v *NetworkInfo) {
|
||||||
|
x.NetworkInfo = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (x *NetworkInfoResponse) SetBody(v *NetworkInfoResponse_Body) {
|
||||||
|
x.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (x *NetworkInfoResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
x.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (x *NetworkInfoResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
x.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the request.
|
||||||
|
func (x *NetmapSnapshotRequest) SetBody(v *NetmapSnapshotRequest_Body) {
|
||||||
|
x.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the request.
|
||||||
|
func (x *NetmapSnapshotRequest) SetMetaHeader(v *session.RequestMetaHeader) {
|
||||||
|
x.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the request.
|
||||||
|
func (x *NetmapSnapshotRequest) SetVerifyHeader(v *session.RequestVerificationHeader) {
|
||||||
|
x.VerifyHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNetmap sets current Netmap.
|
||||||
|
func (x *NetmapSnapshotResponse_Body) SetNetmap(v *Netmap) {
|
||||||
|
x.Netmap = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBody sets body of the response.
|
||||||
|
func (x *NetmapSnapshotResponse) SetBody(v *NetmapSnapshotResponse_Body) {
|
||||||
|
x.Body = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetaHeader sets meta header of the response.
|
||||||
|
func (x *NetmapSnapshotResponse) SetMetaHeader(v *session.ResponseMetaHeader) {
|
||||||
|
x.MetaHeader = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVerifyHeader sets verification header of the response.
|
||||||
|
func (x *NetmapSnapshotResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) {
|
||||||
|
x.VerifyHeader = v
|
||||||
|
}
|
BIN
netmap/grpc/service.pb.go
generated
Normal file
BIN
netmap/grpc/service.pb.go
generated
Normal file
Binary file not shown.
BIN
netmap/grpc/service_frostfs.pb.go
generated
BIN
netmap/grpc/service_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,121 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package netmap
|
|
||||||
|
|
||||||
func DoFuzzProtoLocalNodeInfoRequest(data []byte) int {
|
|
||||||
msg := new(LocalNodeInfoRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONLocalNodeInfoRequest(data []byte) int {
|
|
||||||
msg := new(LocalNodeInfoRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoLocalNodeInfoResponse(data []byte) int {
|
|
||||||
msg := new(LocalNodeInfoResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONLocalNodeInfoResponse(data []byte) int {
|
|
||||||
msg := new(LocalNodeInfoResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetworkInfoRequest(data []byte) int {
|
|
||||||
msg := new(NetworkInfoRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetworkInfoRequest(data []byte) int {
|
|
||||||
msg := new(NetworkInfoRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetworkInfoResponse(data []byte) int {
|
|
||||||
msg := new(NetworkInfoResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetworkInfoResponse(data []byte) int {
|
|
||||||
msg := new(NetworkInfoResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetmapSnapshotRequest(data []byte) int {
|
|
||||||
msg := new(NetmapSnapshotRequest)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetmapSnapshotRequest(data []byte) int {
|
|
||||||
msg := new(NetmapSnapshotRequest)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetmapSnapshotResponse(data []byte) int {
|
|
||||||
msg := new(NetmapSnapshotResponse)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetmapSnapshotResponse(data []byte) int {
|
|
||||||
msg := new(NetmapSnapshotResponse)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package netmap
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoLocalNodeInfoRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoLocalNodeInfoRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONLocalNodeInfoRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONLocalNodeInfoRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoLocalNodeInfoResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoLocalNodeInfoResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONLocalNodeInfoResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONLocalNodeInfoResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetworkInfoRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetworkInfoRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetworkInfoRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetworkInfoRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetworkInfoResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetworkInfoResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetworkInfoResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetworkInfoResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetmapSnapshotRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetmapSnapshotRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetmapSnapshotRequest(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetmapSnapshotRequest(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetmapSnapshotResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetmapSnapshotResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetmapSnapshotResponse(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetmapSnapshotResponse(data)
|
|
||||||
})
|
|
||||||
}
|
|
BIN
netmap/grpc/service_grpc.pb.go
generated
BIN
netmap/grpc/service_grpc.pb.go
generated
Binary file not shown.
214
netmap/grpc/types.go
Normal file
214
netmap/grpc/types.go
Normal file
|
@ -0,0 +1,214 @@
|
||||||
|
package netmap
|
||||||
|
|
||||||
|
import refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||||
|
|
||||||
|
// SetReplicas of placement policy.
|
||||||
|
func (m *PlacementPolicy) SetReplicas(v []*Replica) {
|
||||||
|
m.Replicas = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerBackupFactor of placement policy.
|
||||||
|
func (m *PlacementPolicy) SetContainerBackupFactor(v uint32) {
|
||||||
|
m.ContainerBackupFactor = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSelectors of placement policy.
|
||||||
|
func (m *PlacementPolicy) SetSelectors(v []*Selector) {
|
||||||
|
m.Selectors = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFilters of placement policy.
|
||||||
|
func (m *PlacementPolicy) SetFilters(v []*Filter) {
|
||||||
|
m.Filters = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSubnetID sets ID of subnet.
|
||||||
|
func (m *PlacementPolicy) SetSubnetID(v *refs.SubnetID) {
|
||||||
|
m.SubnetId = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName of placement filter.
|
||||||
|
func (m *Filter) SetName(v string) {
|
||||||
|
m.Name = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKey of placement filter.
|
||||||
|
func (m *Filter) SetKey(v string) {
|
||||||
|
m.Key = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOperation of placement filter.
|
||||||
|
func (m *Filter) SetOp(v Operation) {
|
||||||
|
m.Op = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue of placement filter.
|
||||||
|
func (m *Filter) SetValue(v string) {
|
||||||
|
m.Value = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFilters sets sub-filters of placement filter.
|
||||||
|
func (m *Filter) SetFilters(v []*Filter) {
|
||||||
|
m.Filters = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName of placement selector.
|
||||||
|
func (m *Selector) SetName(v string) {
|
||||||
|
m.Name = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCount of nodes of placement selector.
|
||||||
|
func (m *Selector) SetCount(v uint32) {
|
||||||
|
m.Count = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAttribute of nodes of placement selector.
|
||||||
|
func (m *Selector) SetAttribute(v string) {
|
||||||
|
m.Attribute = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFilter of placement selector.
|
||||||
|
func (m *Selector) SetFilter(v string) {
|
||||||
|
m.Filter = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetClause of placement selector.
|
||||||
|
func (m *Selector) SetClause(v Clause) {
|
||||||
|
m.Clause = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCount of object replica.
|
||||||
|
func (m *Replica) SetCount(v uint32) {
|
||||||
|
m.Count = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSelector of object replica.
|
||||||
|
func (m *Replica) SetSelector(v string) {
|
||||||
|
m.Selector = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKey sets key to the node attribute.
|
||||||
|
func (m *NodeInfo_Attribute) SetKey(v string) {
|
||||||
|
m.Key = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets value of the node attribute.
|
||||||
|
func (m *NodeInfo_Attribute) SetValue(v string) {
|
||||||
|
m.Value = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetParent sets value of the node parents.
|
||||||
|
func (m *NodeInfo_Attribute) SetParents(v []string) {
|
||||||
|
m.Parents = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAddress sets node network address.
|
||||||
|
//
|
||||||
|
// Deprecated: use SetAddresses.
|
||||||
|
func (m *NodeInfo) SetAddress(v string) {
|
||||||
|
m.SetAddresses([]string{v})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAddresses sets list of network addresses of the node.
|
||||||
|
func (m *NodeInfo) SetAddresses(v []string) {
|
||||||
|
m.Addresses = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPublicKey sets node public key in a binary format.
|
||||||
|
func (m *NodeInfo) SetPublicKey(v []byte) {
|
||||||
|
m.PublicKey = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAttributes sets list of the node attributes.
|
||||||
|
func (m *NodeInfo) SetAttributes(v []*NodeInfo_Attribute) {
|
||||||
|
m.Attributes = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetState sets node state.
|
||||||
|
func (m *NodeInfo) SetState(v NodeInfo_State) {
|
||||||
|
m.State = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCurrentEpoch sets number of the current epoch.
|
||||||
|
func (x *NetworkInfo) SetCurrentEpoch(v uint64) {
|
||||||
|
x.CurrentEpoch = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMagicNumber sets magic number of the sidechain.
|
||||||
|
func (x *NetworkInfo) SetMagicNumber(v uint64) {
|
||||||
|
x.MagicNumber = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMsPerBlock sets MillisecondsPerBlock network parameter.
|
||||||
|
func (x *NetworkInfo) SetMsPerBlock(v int64) {
|
||||||
|
x.MsPerBlock = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNetworkConfig sets NeoFS network configuration.
|
||||||
|
func (x *NetworkInfo) SetNetworkConfig(v *NetworkConfig) {
|
||||||
|
x.NetworkConfig = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses Clause from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *Clause) FromString(s string) bool {
|
||||||
|
i, ok := Clause_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = Clause(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses Operation from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *Operation) FromString(s string) bool {
|
||||||
|
i, ok := Operation_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = Operation(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromString parses NodeInfo_State from a string representation,
|
||||||
|
// It is a reverse action to String().
|
||||||
|
//
|
||||||
|
// Returns true if s was parsed successfully.
|
||||||
|
func (x *NodeInfo_State) FromString(s string) bool {
|
||||||
|
i, ok := NodeInfo_State_value[s]
|
||||||
|
if ok {
|
||||||
|
*x = NodeInfo_State(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKey sets parameter key.
|
||||||
|
func (x *NetworkConfig_Parameter) SetKey(v []byte) {
|
||||||
|
x.Key = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets parameter value.
|
||||||
|
func (x *NetworkConfig_Parameter) SetValue(v []byte) {
|
||||||
|
x.Value = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetParameters sets NeoFS network parameters.
|
||||||
|
func (x *NetworkConfig) SetParameters(v []*NetworkConfig_Parameter) {
|
||||||
|
x.Parameters = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEpoch sets revision number of the Netmap.
|
||||||
|
func (x *Netmap) SetEpoch(v uint64) {
|
||||||
|
x.Epoch = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNodes sets nodes presented in the Netmap.
|
||||||
|
func (x *Netmap) SetNodes(v []*NodeInfo) {
|
||||||
|
x.Nodes = v
|
||||||
|
}
|
BIN
netmap/grpc/types.pb.go
generated
Normal file
BIN
netmap/grpc/types.pb.go
generated
Normal file
Binary file not shown.
BIN
netmap/grpc/types_frostfs.pb.go
generated
BIN
netmap/grpc/types_frostfs.pb.go
generated
Binary file not shown.
|
@ -1,159 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package netmap
|
|
||||||
|
|
||||||
func DoFuzzProtoFilter(data []byte) int {
|
|
||||||
msg := new(Filter)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONFilter(data []byte) int {
|
|
||||||
msg := new(Filter)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoSelector(data []byte) int {
|
|
||||||
msg := new(Selector)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONSelector(data []byte) int {
|
|
||||||
msg := new(Selector)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoReplica(data []byte) int {
|
|
||||||
msg := new(Replica)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONReplica(data []byte) int {
|
|
||||||
msg := new(Replica)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoPlacementPolicy(data []byte) int {
|
|
||||||
msg := new(PlacementPolicy)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONPlacementPolicy(data []byte) int {
|
|
||||||
msg := new(PlacementPolicy)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNodeInfo(data []byte) int {
|
|
||||||
msg := new(NodeInfo)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNodeInfo(data []byte) int {
|
|
||||||
msg := new(NodeInfo)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetmap(data []byte) int {
|
|
||||||
msg := new(Netmap)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetmap(data []byte) int {
|
|
||||||
msg := new(Netmap)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetworkConfig(data []byte) int {
|
|
||||||
msg := new(NetworkConfig)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetworkConfig(data []byte) int {
|
|
||||||
msg := new(NetworkConfig)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzProtoNetworkInfo(data []byte) int {
|
|
||||||
msg := new(NetworkInfo)
|
|
||||||
if err := msg.UnmarshalProtobuf(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_ = msg.MarshalProtobuf(nil)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
func DoFuzzJSONNetworkInfo(data []byte) int {
|
|
||||||
msg := new(NetworkInfo)
|
|
||||||
if err := msg.UnmarshalJSON(data); err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
_, err := msg.MarshalJSON()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
//go:build gofuzz
|
|
||||||
// +build gofuzz
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
|
|
||||||
|
|
||||||
package netmap
|
|
||||||
|
|
||||||
import (
|
|
||||||
testing "testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FuzzProtoFilter(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoFilter(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONFilter(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONFilter(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoSelector(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoSelector(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONSelector(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONSelector(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoReplica(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoReplica(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONReplica(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONReplica(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoPlacementPolicy(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoPlacementPolicy(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONPlacementPolicy(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONPlacementPolicy(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNodeInfo(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNodeInfo(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNodeInfo(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNodeInfo(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetmap(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetmap(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetmap(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetmap(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetworkConfig(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetworkConfig(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetworkConfig(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetworkConfig(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzProtoNetworkInfo(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzProtoNetworkInfo(data)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func FuzzJSONNetworkInfo(f *testing.F) {
|
|
||||||
f.Fuzz(func(t *testing.T, data []byte) {
|
|
||||||
DoFuzzJSONNetworkInfo(data)
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -21,14 +21,12 @@ const (
|
||||||
|
|
||||||
countReplicaField = 1
|
countReplicaField = 1
|
||||||
selectorReplicaField = 2
|
selectorReplicaField = 2
|
||||||
ecDataCountReplicaField = 3
|
|
||||||
ecParityCountReplicaField = 4
|
|
||||||
|
|
||||||
replicasPolicyField = 1
|
replicasPolicyField = 1
|
||||||
backupPolicyField = 2
|
backupPolicyField = 2
|
||||||
selectorsPolicyField = 3
|
selectorsPolicyField = 3
|
||||||
filtersPolicyField = 4
|
filtersPolicyField = 4
|
||||||
uniquePolicyField = 5
|
subnetIDPolicyField = 5
|
||||||
|
|
||||||
keyAttributeField = 1
|
keyAttributeField = 1
|
||||||
valueAttributeField = 2
|
valueAttributeField = 2
|
||||||
|
@ -67,10 +65,6 @@ func (f *Filter) StableMarshal(buf []byte) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Filter) StableSize() (size int) {
|
func (f *Filter) StableSize() (size int) {
|
||||||
if f == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += protoutil.StringSize(nameFilterField, f.name)
|
size += protoutil.StringSize(nameFilterField, f.name)
|
||||||
size += protoutil.StringSize(keyFilterField, f.key)
|
size += protoutil.StringSize(keyFilterField, f.key)
|
||||||
size += protoutil.EnumSize(opFilterField, int32(f.op))
|
size += protoutil.EnumSize(opFilterField, int32(f.op))
|
||||||
|
@ -107,10 +101,6 @@ func (s *Selector) StableMarshal(buf []byte) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Selector) StableSize() (size int) {
|
func (s *Selector) StableSize() (size int) {
|
||||||
if s == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += protoutil.StringSize(nameSelectorField, s.name)
|
size += protoutil.StringSize(nameSelectorField, s.name)
|
||||||
size += protoutil.UInt32Size(countSelectorField, s.count)
|
size += protoutil.UInt32Size(countSelectorField, s.count)
|
||||||
size += protoutil.EnumSize(countSelectorField, int32(s.clause))
|
size += protoutil.EnumSize(countSelectorField, int32(s.clause))
|
||||||
|
@ -136,22 +126,14 @@ func (r *Replica) StableMarshal(buf []byte) []byte {
|
||||||
var offset int
|
var offset int
|
||||||
|
|
||||||
offset += protoutil.UInt32Marshal(countReplicaField, buf[offset:], r.count)
|
offset += protoutil.UInt32Marshal(countReplicaField, buf[offset:], r.count)
|
||||||
offset += protoutil.StringMarshal(selectorReplicaField, buf[offset:], r.selector)
|
protoutil.StringMarshal(selectorReplicaField, buf[offset:], r.selector)
|
||||||
offset += protoutil.UInt32Marshal(ecDataCountReplicaField, buf[offset:], r.ecDataCount)
|
|
||||||
protoutil.UInt32Marshal(ecParityCountReplicaField, buf[offset:], r.ecParityCount)
|
|
||||||
|
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Replica) StableSize() (size int) {
|
func (r *Replica) StableSize() (size int) {
|
||||||
if r == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
size += protoutil.UInt32Size(countReplicaField, r.count)
|
size += protoutil.UInt32Size(countReplicaField, r.count)
|
||||||
size += protoutil.StringSize(selectorReplicaField, r.selector)
|
size += protoutil.StringSize(selectorReplicaField, r.selector)
|
||||||
size += protoutil.UInt32Size(ecDataCountReplicaField, r.ecDataCount)
|
|
||||||
size += protoutil.UInt32Size(ecParityCountReplicaField, r.ecParityCount)
|
|
||||||
|
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
@ -185,16 +167,12 @@ func (p *PlacementPolicy) StableMarshal(buf []byte) []byte {
|
||||||
offset += protoutil.NestedStructureMarshal(filtersPolicyField, buf[offset:], &p.filters[i])
|
offset += protoutil.NestedStructureMarshal(filtersPolicyField, buf[offset:], &p.filters[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
protoutil.BoolMarshal(uniquePolicyField, buf[offset:], p.unique)
|
protoutil.NestedStructureMarshal(subnetIDPolicyField, buf[offset:], p.subnetID)
|
||||||
|
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PlacementPolicy) StableSize() (size int) {
|
func (p *PlacementPolicy) StableSize() (size int) {
|
||||||
if p == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := range p.replicas {
|
for i := range p.replicas {
|
||||||
size += protoutil.NestedStructureSize(replicasPolicyField, &p.replicas[i])
|
size += protoutil.NestedStructureSize(replicasPolicyField, &p.replicas[i])
|
||||||
}
|
}
|
||||||
|
@ -209,7 +187,7 @@ func (p *PlacementPolicy) StableSize() (size int) {
|
||||||
size += protoutil.NestedStructureSize(filtersPolicyField, &p.filters[i])
|
size += protoutil.NestedStructureSize(filtersPolicyField, &p.filters[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
size += protoutil.BoolSize(uniquePolicyField, p.unique)
|
size += protoutil.NestedStructureSize(subnetIDPolicyField, p.subnetID)
|
||||||
|
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
@ -302,7 +280,7 @@ func (ni *NodeInfo) Unmarshal(data []byte) error {
|
||||||
return message.Unmarshal(ni, data, new(netmap.NodeInfo))
|
return message.Unmarshal(ni, data, new(netmap.NodeInfo))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *LocalNodeInfoRequestBody) StableMarshal(_ []byte) []byte {
|
func (l *LocalNodeInfoRequestBody) StableMarshal(buf []byte) []byte {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,7 +437,7 @@ func (i *NetworkInfo) Unmarshal(data []byte) error {
|
||||||
return message.Unmarshal(i, data, new(netmap.NetworkInfo))
|
return message.Unmarshal(i, data, new(netmap.NetworkInfo))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *NetworkInfoRequestBody) StableMarshal(_ []byte) []byte {
|
func (l *NetworkInfoRequestBody) StableMarshal(buf []byte) []byte {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue