Anton Nikiforov
d0ed29b3c7
All checks were successful
Tests and linters / Run gofumpt (pull_request) Successful in 50s
DCO action / DCO (pull_request) Successful in 1m41s
Pre-commit hooks / Pre-commit (pull_request) Successful in 1m53s
Vulncheck / Vulncheck (pull_request) Successful in 2m10s
Build / Build Components (pull_request) Successful in 2m43s
Tests and linters / gopls check (pull_request) Successful in 3m0s
Tests and linters / Staticcheck (pull_request) Successful in 3m5s
Tests and linters / Lint (pull_request) Successful in 3m52s
Tests and linters / Tests (pull_request) Successful in 4m40s
Tests and linters / Tests with -race (pull_request) Successful in 6m17s
Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
736 lines
17 KiB
Protocol Buffer
736 lines
17 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package control;
|
|
|
|
import "pkg/services/control/types.proto";
|
|
|
|
option go_package = "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control";
|
|
|
|
// `ControlService` provides an interface for internal work with the storage
|
|
// node.
|
|
service ControlService {
|
|
// Performs health check of the storage node.
|
|
rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse);
|
|
|
|
// Sets status of the storage node in FrostFS network map.
|
|
rpc SetNetmapStatus(SetNetmapStatusRequest) returns (SetNetmapStatusResponse);
|
|
|
|
// Gets status of the storage node in FrostFS network map.
|
|
rpc GetNetmapStatus(GetNetmapStatusRequest) returns (GetNetmapStatusResponse);
|
|
|
|
// Mark objects to be removed from node's local object storage.
|
|
rpc DropObjects(DropObjectsRequest) returns (DropObjectsResponse);
|
|
|
|
// Returns list that contains information about all shards of a node.
|
|
rpc ListShards(ListShardsRequest) returns (ListShardsResponse);
|
|
|
|
// Sets mode of the shard.
|
|
rpc SetShardMode(SetShardModeRequest) returns (SetShardModeResponse);
|
|
|
|
// Synchronizes all log operations for the specified tree.
|
|
rpc SynchronizeTree(SynchronizeTreeRequest) returns (SynchronizeTreeResponse);
|
|
|
|
// EvacuateShard moves all data from one shard to the others.
|
|
// Deprecated: Use
|
|
// StartShardEvacuation/GetShardEvacuationStatus/StopShardEvacuation
|
|
rpc EvacuateShard(EvacuateShardRequest) returns (EvacuateShardResponse);
|
|
|
|
// StartShardEvacuation starts moving all data from one shard to the others.
|
|
rpc StartShardEvacuation(StartShardEvacuationRequest)
|
|
returns (StartShardEvacuationResponse);
|
|
|
|
// GetShardEvacuationStatus returns evacuation status.
|
|
rpc GetShardEvacuationStatus(GetShardEvacuationStatusRequest)
|
|
returns (GetShardEvacuationStatusResponse);
|
|
|
|
// ResetShardEvacuationStatus resets evacuation status if there is no running
|
|
// evacuation process.
|
|
rpc ResetShardEvacuationStatus(ResetShardEvacuationStatusRequest)
|
|
returns (ResetShardEvacuationStatusResponse);
|
|
|
|
// StopShardEvacuation stops moving all data from one shard to the others.
|
|
rpc StopShardEvacuation(StopShardEvacuationRequest)
|
|
returns (StopShardEvacuationResponse);
|
|
|
|
// FlushCache moves all data from one shard to the others.
|
|
rpc FlushCache(FlushCacheRequest) returns (FlushCacheResponse);
|
|
|
|
// Doctor performs storage restructuring operations on engine.
|
|
rpc Doctor(DoctorRequest) returns (DoctorResponse);
|
|
|
|
// Add local access policy engine overrides to a node.
|
|
rpc AddChainLocalOverride(AddChainLocalOverrideRequest)
|
|
returns (AddChainLocalOverrideResponse);
|
|
|
|
// Get local access policy engine overrides stored in the node by chain id.
|
|
rpc GetChainLocalOverride(GetChainLocalOverrideRequest)
|
|
returns (GetChainLocalOverrideResponse);
|
|
|
|
// List local access policy engine overrides stored in the node by container
|
|
// id.
|
|
rpc ListChainLocalOverrides(ListChainLocalOverridesRequest)
|
|
returns (ListChainLocalOverridesResponse);
|
|
|
|
// Remove local access policy engine overrides stored in the node by chaind
|
|
// id.
|
|
rpc RemoveChainLocalOverride(RemoveChainLocalOverrideRequest)
|
|
returns (RemoveChainLocalOverrideResponse);
|
|
|
|
// Remove local access policy engine overrides stored in the node by chaind
|
|
// id.
|
|
rpc RemoveChainLocalOverridesByTarget(
|
|
RemoveChainLocalOverridesByTargetRequest)
|
|
returns (RemoveChainLocalOverridesByTargetResponse);
|
|
|
|
// List targets of the local APE overrides stored in the node.
|
|
rpc ListTargetsLocalOverrides(ListTargetsLocalOverridesRequest)
|
|
returns (ListTargetsLocalOverridesResponse);
|
|
|
|
// Flush objects from write-cache and move it to degraded read only mode.
|
|
rpc SealWriteCache(SealWriteCacheRequest) returns (SealWriteCacheResponse);
|
|
|
|
// DetachShards detaches and closes shards.
|
|
rpc DetachShards(DetachShardsRequest) returns (DetachShardsResponse);
|
|
|
|
// StartShardRebuild starts shard rebuild process.
|
|
rpc StartShardRebuild(StartShardRebuildRequest) returns (StartShardRebuildResponse);
|
|
}
|
|
|
|
// Health check request.
|
|
message HealthCheckRequest {
|
|
// Health check request body.
|
|
message Body {}
|
|
|
|
// Body of health check request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Health check request.
|
|
message HealthCheckResponse {
|
|
// Health check response body
|
|
message Body {
|
|
// Status of the storage node in FrostFS network map.
|
|
NetmapStatus netmap_status = 1;
|
|
|
|
// Health status of storage node application.
|
|
HealthStatus health_status = 2;
|
|
}
|
|
|
|
// Body of health check response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Set netmap status request.
|
|
message SetNetmapStatusRequest {
|
|
// Set netmap status request body.
|
|
message Body {
|
|
// New storage node status in FrostFS network map.
|
|
// If status is MAINTENANCE, the node checks whether maintenance is
|
|
// allowed in the network settings. In case of prohibition, the request
|
|
// is denied. Otherwise, node switches to local maintenance state. To
|
|
// force local maintenance, use `force_maintenance` flag.
|
|
NetmapStatus status = 1;
|
|
|
|
// MAINTENANCE status validation skip flag. If set, node starts local
|
|
// maintenance regardless of network settings. The flag MUST NOT be
|
|
// set for any other status.
|
|
bool force_maintenance = 2;
|
|
}
|
|
|
|
// Body of set netmap status request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Set netmap status response.
|
|
message SetNetmapStatusResponse {
|
|
// Set netmap status response body
|
|
message Body {}
|
|
|
|
// Body of set netmap status response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Get netmap status request.
|
|
message GetNetmapStatusRequest {
|
|
message Body {}
|
|
|
|
// Body of set netmap status request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Get netmap status response.
|
|
message GetNetmapStatusResponse {
|
|
message Body {
|
|
// Storage node status in FrostFS network map.
|
|
NetmapStatus status = 1;
|
|
|
|
// Network map epoch.
|
|
uint64 epoch = 2;
|
|
}
|
|
|
|
// Body of get netmap status response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Request to drop the objects.
|
|
message DropObjectsRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
// List of object addresses to be removed.
|
|
// in FrostFS API binary format.
|
|
repeated bytes address_list = 1;
|
|
}
|
|
|
|
// Body of the request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Response to request to drop the objects.
|
|
message DropObjectsResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
// Body of the response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Request to list all shards of the node.
|
|
message ListShardsRequest {
|
|
// Request body structure.
|
|
message Body {}
|
|
|
|
// Body of the request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ListShards response.
|
|
message ListShardsResponse {
|
|
// Response body structure.
|
|
message Body {
|
|
// List of the node's shards.
|
|
repeated ShardInfo shards = 1;
|
|
}
|
|
|
|
// Body of the response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Request to set mode of the shard.
|
|
message SetShardModeRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
// ID of the shard.
|
|
repeated bytes shard_ID = 1;
|
|
|
|
// Mode that requested to be set.
|
|
ShardMode mode = 2;
|
|
|
|
// Flag signifying whether error counter should be set to 0.
|
|
bool resetErrorCounter = 3;
|
|
}
|
|
|
|
// Body of set shard mode request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// SetShardMode response.
|
|
message SetShardModeResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
// Body of set shard mode response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// SynchronizeTree request.
|
|
message SynchronizeTreeRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
bytes container_id = 1;
|
|
string tree_id = 2;
|
|
// Starting height for the synchronization. Can be omitted.
|
|
uint64 height = 3;
|
|
}
|
|
|
|
// Body of restore shard request message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// SynchronizeTree response.
|
|
message SynchronizeTreeResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
// Body of restore shard response message.
|
|
Body body = 1;
|
|
|
|
// Body signature.
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// EvacuateShard request.
|
|
message EvacuateShardRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
// ID of the shard.
|
|
repeated bytes shard_ID = 1;
|
|
|
|
// Flag indicating whether object read errors should be ignored.
|
|
bool ignore_errors = 2;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// EvacuateShard response.
|
|
message EvacuateShardResponse {
|
|
// Response body structure.
|
|
message Body { uint32 count = 1; }
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// FlushCache request.
|
|
message FlushCacheRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
// ID of the shard.
|
|
repeated bytes shard_ID = 1;
|
|
// If true, then writecache will be left in read-only mode after flush
|
|
// completed.
|
|
bool seal = 2;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// FlushCache response.
|
|
message FlushCacheResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Doctor request.
|
|
message DoctorRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
// Number of threads to use for the operation.
|
|
uint32 concurrency = 1;
|
|
// Flag to search engine for duplicate objects and leave only one copy.
|
|
bool remove_duplicates = 2;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// Doctor response.
|
|
message DoctorResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// StartShardEvacuation request.
|
|
message StartShardEvacuationRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
enum Scope {
|
|
NONE = 0;
|
|
OBJECTS = 1;
|
|
TREES = 2;
|
|
}
|
|
|
|
// IDs of the shards.
|
|
repeated bytes shard_ID = 1;
|
|
// Flag indicating whether object read errors should be ignored.
|
|
bool ignore_errors = 2;
|
|
// Evacuation scope.
|
|
uint32 scope = 3;
|
|
// Count of concurrent container evacuation workers.
|
|
uint32 container_worker_count = 4;
|
|
// Count of concurrent object evacuation workers.
|
|
uint32 object_worker_count = 5;
|
|
// Choose for evacuation objects in `REP 1` containers only.
|
|
bool rep_one_only = 6;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// StartShardEvacuation response.
|
|
message StartShardEvacuationResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// GetShardEvacuationStatus request.
|
|
message GetShardEvacuationStatusRequest {
|
|
// Request body structure.
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// GetShardEvacuationStatus response.
|
|
message GetShardEvacuationStatusResponse {
|
|
// Response body structure.
|
|
message Body {
|
|
// Evacuate status enum.
|
|
enum Status {
|
|
EVACUATE_SHARD_STATUS_UNDEFINED = 0;
|
|
RUNNING = 1;
|
|
COMPLETED = 2;
|
|
}
|
|
|
|
// Unix timestamp value.
|
|
message UnixTimestamp { int64 value = 1; }
|
|
|
|
// Duration in seconds.
|
|
message Duration { int64 seconds = 1; }
|
|
|
|
// Total objects to evacuate count. The value is approximate, so evacuated +
|
|
// failed + skipped == total is not guaranteed after completion.
|
|
uint64 total_objects = 1;
|
|
// Evacuated objects count.
|
|
uint64 evacuated_objects = 2;
|
|
// Failed objects count.
|
|
uint64 failed_objects = 3;
|
|
|
|
// Shard IDs.
|
|
repeated bytes shard_ID = 4;
|
|
// Evacuation process status.
|
|
Status status = 5;
|
|
// Evacuation process duration.
|
|
Duration duration = 6;
|
|
// Evacuation process started at timestamp.
|
|
UnixTimestamp started_at = 7;
|
|
// Error message if evacuation failed.
|
|
string error_message = 8;
|
|
|
|
// Skipped objects count.
|
|
uint64 skipped_objects = 9;
|
|
|
|
// Total trees to evacuate count.
|
|
uint64 total_trees = 10;
|
|
// Evacuated trees count.
|
|
uint64 evacuated_trees = 11;
|
|
// Failed trees count.
|
|
uint64 failed_trees = 12;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ResetShardEvacuationStatus request.
|
|
message ResetShardEvacuationStatusRequest {
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ResetShardEvacuationStatus response.
|
|
message ResetShardEvacuationStatusResponse {
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// StopShardEvacuation request.
|
|
message StopShardEvacuationRequest {
|
|
// Request body structure.
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// StopShardEvacuation response.
|
|
message StopShardEvacuationResponse {
|
|
// Response body structure.
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// AddChainLocalOverride request.
|
|
message AddChainLocalOverrideRequest {
|
|
message Body {
|
|
// Target for which the overrides are applied.
|
|
ChainTarget target = 1;
|
|
|
|
// Serialized rule chain. If chain ID is left empty
|
|
// in the chain, then it will be generated and returned
|
|
// in the response.
|
|
bytes chain = 2;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// AddChainLocalOverride response.
|
|
message AddChainLocalOverrideResponse {
|
|
message Body {
|
|
// Chain ID assigned for the added rule chain.
|
|
// If chain ID is left empty in the request, then
|
|
// it will be generated.
|
|
bytes chain_id = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// GetChainLocalOverride request.
|
|
message GetChainLocalOverrideRequest {
|
|
message Body {
|
|
// Target for which the overrides are applied.
|
|
ChainTarget target = 1;
|
|
|
|
// Chain ID assigned for the added rule chain.
|
|
bytes chain_id = 2;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// GetChainLocalOverride response.
|
|
message GetChainLocalOverrideResponse {
|
|
message Body {
|
|
// Serialized rule chain.
|
|
bytes chain = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ListChainLocalOverrides request.
|
|
message ListChainLocalOverridesRequest {
|
|
message Body {
|
|
// Target for which the overrides are applied.
|
|
ChainTarget target = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ListChainLocalOverrides response.
|
|
message ListChainLocalOverridesResponse {
|
|
message Body {
|
|
// The list of serialized rule chain.
|
|
repeated bytes chains = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ListTargetsLocalOverrides request.
|
|
message ListTargetsLocalOverridesRequest {
|
|
message Body {
|
|
// Target for which the overrides are applied.
|
|
string chainName = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
// ListTargetsLocalOverrides response.
|
|
message ListTargetsLocalOverridesResponse {
|
|
message Body {
|
|
// The list of chain targets.
|
|
repeated ChainTarget targets = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message RemoveChainLocalOverrideRequest {
|
|
message Body {
|
|
// Target for which the overrides are applied.
|
|
ChainTarget target = 1;
|
|
|
|
// Chain ID assigned for the added rule chain.
|
|
bytes chain_id = 2;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message RemoveChainLocalOverrideResponse {
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message RemoveChainLocalOverridesByTargetRequest {
|
|
message Body {
|
|
// Target for which the overrides are applied.
|
|
ChainTarget target = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message RemoveChainLocalOverridesByTargetResponse {
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message SealWriteCacheRequest {
|
|
// Request body structure.
|
|
message Body {
|
|
// ID of the shard.
|
|
repeated bytes shard_ID = 1;
|
|
|
|
// Flag indicating whether object read errors should be ignored.
|
|
bool ignore_errors = 2;
|
|
|
|
// Flag indicating whether writecache will be sealed async.
|
|
bool async = 3;
|
|
|
|
// If true, then writecache will be sealed, but mode will be restored to the current one.
|
|
bool restore_mode = 4;
|
|
|
|
// If true, then writecache will shrink internal storage.
|
|
bool shrink = 5;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message SealWriteCacheResponse {
|
|
message Body {
|
|
message Status {
|
|
bytes shard_ID = 1;
|
|
bool success = 2;
|
|
string error = 3;
|
|
}
|
|
repeated Status results = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message DetachShardsRequest {
|
|
message Body { repeated bytes shard_ID = 1; }
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message DetachShardsResponse {
|
|
message Body {}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message StartShardRebuildRequest {
|
|
message Body {
|
|
repeated bytes shard_ID = 1;
|
|
uint32 target_fill_percent = 2;
|
|
uint32 concurrency_limit = 3;
|
|
}
|
|
|
|
Body body = 1;
|
|
Signature signature = 2;
|
|
}
|
|
|
|
message StartShardRebuildResponse {
|
|
message Body {
|
|
message Status {
|
|
bytes shard_ID = 1;
|
|
bool success = 2;
|
|
string error = 3;
|
|
}
|
|
repeated Status results = 1;
|
|
}
|
|
|
|
Body body = 1;
|
|
|
|
Signature signature = 2;
|
|
}
|