diff --git a/Makefile b/Makefile index 0caa683..29f41bc 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PROTO_VERSION=v0.7.0 +PROTO_VERSION=v0.7.1 PROTO_URL=https://github.com/nspcc-dev/neofs-api/archive/$(PROTO_VERSION).tar.gz B=\033[0;1m @@ -9,14 +9,14 @@ R=\033[0m # Dependencies deps: - @echo "${B}${G}=> Golang modules ${R}" + @echo "${B}${G}⇒ Golang modules ${R}" @go mod tidy -v @go mod vendor - @echo "${B}${G}=> Cleanup old files ${R}" + @echo "${B}${G}⇒ Cleanup old files ${R}" @find . -type f -name '*.proto' -not -path './vendor/*' -not -name '*_test.proto' -exec rm {} \; - @echo "${B}${G}=> NeoFS Proto files ${R}" + @echo "${B}${G}⇒ NeoFS Proto files ${R}" @mkdir -p ./vendor/proto @curl -sL -o ./vendor/proto.tar.gz $(PROTO_URL) @tar -xzf ./vendor/proto.tar.gz --strip-components 1 -C ./vendor/proto @@ -24,7 +24,7 @@ deps: cp $$f/*.proto ./$$(basename $$f); \ done - @echo "${B}${G}=> Cleanup ${R}" + @echo "${B}${G}⇒ Cleanup ${R}" @rm -rf ./vendor/proto @rm -rf ./vendor/proto.tar.gz @@ -48,14 +48,14 @@ docgen: deps # Regenerate proto files: protoc: deps - @echo "${B}${G}=> Cleanup old files ${R}" + @echo "${B}${G}⇒ Cleanup old files ${R}" @find . -type f -name '*.pb.go' -not -path './vendor/*' -exec rm {} \; - @echo "${B}${G}=> Install specific version for gogo-proto ${R}" + @echo "${B}${G}⇒ Install specific version for gogo-proto ${R}" @go list -f '{{.Path}}/...@{{.Version}}' -m github.com/gogo/protobuf | xargs go get -v - @echo "${B}${G}=> Install specific version for protobuf lib ${R}" + @echo "${B}${G}⇒ Install specific version for protobuf lib ${R}" @go list -f '{{.Path}}/...@{{.Version}}' -m github.com/golang/protobuf | xargs go get -v - @echo "${B}${G}=> Protoc generate ${R}" + @echo "${B}${G}⇒ Protoc generate ${R}" @for f in `find . -type f -name '*.proto' -not -path './vendor/*'`; do \ echo "${B}${G}⇒ Processing $$f ${R}"; \ protoc \ diff --git a/docs/state.md b/docs/state.md index 2b3de4a..3b7b89d 100644 --- a/docs/state.md +++ b/docs/state.md @@ -8,6 +8,8 @@ - [Status](#state.Status) - Messages + - [ChangeStateRequest](#state.ChangeStateRequest) + - [ChangeStateResponse](#state.ChangeStateResponse) - [DumpRequest](#state.DumpRequest) - [DumpResponse](#state.DumpResponse) - [DumpVarsRequest](#state.DumpVarsRequest) @@ -34,7 +36,8 @@ ### Service "state.Status" -Status service provides node's healthcheck and status info +Status service provides node's healthcheck and status info. +TODO: decide how to describe auth and were contains permissions. ``` rpc Netmap(NetmapRequest) returns (.bootstrap.SpreadMap); @@ -42,6 +45,7 @@ rpc Metrics(MetricsRequest) returns (MetricsResponse); rpc HealthCheck(HealthRequest) returns (HealthResponse); rpc DumpConfig(DumpRequest) returns (DumpResponse); rpc DumpVars(DumpVarsRequest) returns (DumpVarsResponse); +rpc ChangeState(ChangeStateRequest) returns (ChangeStateResponse); ``` @@ -85,9 +89,38 @@ The request should be signed. | Name | Input | Output | | ---- | ----- | ------ | | DumpVars | [DumpVarsRequest](#state.DumpVarsRequest) | [DumpVarsResponse](#state.DumpVarsResponse) | +#### Method ChangeState + +ChangeState allows to change current node state of node. +To permit access, used server config options. +The request should be signed. + +| Name | Input | Output | +| ---- | ----- | ------ | +| ChangeState | [ChangeStateRequest](#state.ChangeStateRequest) | [ChangeStateResponse](#state.ChangeStateResponse) | + + +### Message ChangeStateRequest +ChangeStateRequest contains a new state of node. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| state | [ChangeStateRequest.State](#state.ChangeStateRequest.State) | | State is a new state of node. | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | + + + + +### Message ChangeStateResponse +ChangeStateResponse is an empty response, that returns when RPC invoked without errors. + + + ### Message DumpRequest @@ -198,6 +231,19 @@ NetmapRequest message to request current node netmap + + + +### ChangeStateRequest.State + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| Unknown | 0 | Unknown is default value. Does nothing. | +| Online | 1 | Online used when need to set node to the online state. | +| Offline | 2 | Offline used when need to set node to the offline state. | + + diff --git a/state/service.pb.go b/state/service.pb.go index 4c7db88..187949b 100644 Binary files a/state/service.pb.go and b/state/service.pb.go differ diff --git a/state/service.proto b/state/service.proto index bebc913..410a000 100644 --- a/state/service.proto +++ b/state/service.proto @@ -10,7 +10,8 @@ import "github.com/gogo/protobuf/gogoproto/gogo.proto"; option (gogoproto.stable_marshaler_all) = true; -// Status service provides node's healthcheck and status info +// Status service provides node's healthcheck and status info. +// TODO: decide how to describe auth and were contains permissions. service Status { // Netmap request allows to receive current [bootstrap.SpreadMap](bootstrap.md#bootstrap.SpreadMap) rpc Netmap(NetmapRequest) returns (bootstrap.SpreadMap); @@ -27,6 +28,10 @@ service Status { // To permit access, used server config options. // The request should be signed. rpc DumpVars(DumpVarsRequest) returns (DumpVarsResponse); + // ChangeState allows to change current node state of node. + // To permit access, used server config options. + // The request should be signed. + rpc ChangeState(ChangeStateRequest) returns (ChangeStateResponse); } // NetmapRequest message to request current node netmap @@ -95,3 +100,25 @@ message DumpVarsRequest { message DumpVarsResponse { bytes Variables = 1; } + +// ChangeStateRequest contains a new state of node. +message ChangeStateRequest { + enum State { + // Unknown is default value. Does nothing. + Unknown = 0; + // Online used when need to set node to the online state. + Online = 1; + // Offline used when need to set node to the offline state. + Offline = 2; + } + + // State is a new state of node. + State state = 1; + // RequestMetaHeader contains information about request meta headers (should be embedded into message) + service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) + service.RequestVerificationHeader Verify = 99 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; +} + +// ChangeStateResponse is an empty response, that returns when RPC invoked without errors. +message ChangeStateResponse {} \ No newline at end of file