blob: fc7a5988ce66969adf2ed76ea6653823ae3c7332 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* These .proto interfaces are private and unstable.
* Please see http://wiki.apache.org/hadoop/Compatibility
* for what changes are allowed for a *unstable* .proto interface.
*/
option java_package = "org.apache.hadoop.hdds.protocol.proto";
option java_outer_classname = "ScmBlockLocationProtocolProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
package hadoop.hdds.block;
import "hdds.proto";
// SCM Block protocol
enum Type {
AllocateScmBlock = 11;
DeleteScmKeyBlocks = 12;
GetScmInfo = 13;
SortDatanodes = 14;
}
message SCMBlockLocationRequest {
required Type cmdType = 1; // Type of the command
// A string that identifies this command, we generate Trace ID in Ozone
// frontend and this allows us to trace that command all over ozone.
optional string traceID = 2;
optional UserInfo userInfo = 3;
optional AllocateScmBlockRequestProto allocateScmBlockRequest = 11;
optional DeleteScmKeyBlocksRequestProto deleteScmKeyBlocksRequest = 12;
optional hadoop.hdds.GetScmInfoRequestProto getScmInfoRequest = 13;
optional SortDatanodesRequestProto sortDatanodesRequest = 14;
}
message SCMBlockLocationResponse {
required Type cmdType = 1; // Type of the command
// A string that identifies this command, we generate Trace ID in Ozone
// frontend and this allows us to trace that command all over ozone.
optional string traceID = 2;
optional bool success = 3 [default=true];
optional string message = 4;
required Status status = 5;
optional string leaderOMNodeId = 6;
optional AllocateScmBlockResponseProto allocateScmBlockResponse = 11;
optional DeleteScmKeyBlocksResponseProto deleteScmKeyBlocksResponse = 12;
optional hadoop.hdds.GetScmInfoResponseProto getScmInfoResponse = 13;
optional SortDatanodesResponseProto sortDatanodesResponse = 14;
}
/**
User information which will be extracted during RPC context and used
during validating Acl.
*/
message UserInfo {
optional string userName = 1;
optional string remoteAddress = 3;
}
enum Status {
OK = 1;
FAILED_TO_LOAD_NODEPOOL = 2;
FAILED_TO_FIND_NODE_IN_POOL = 3;
FAILED_TO_FIND_HEALTHY_NODES = 4;
FAILED_TO_FIND_NODES_WITH_SPACE = 5;
FAILED_TO_FIND_SUITABLE_NODE = 6;
INVALID_CAPACITY = 7;
INVALID_BLOCK_SIZE = 8;
SAFE_MODE_EXCEPTION = 9;
FAILED_TO_LOAD_OPEN_CONTAINER = 10;
FAILED_TO_ALLOCATE_CONTAINER = 11;
FAILED_TO_CHANGE_CONTAINER_STATE = 12;
FAILED_TO_CHANGE_PIPELINE_STATE = 13;
CONTAINER_EXISTS = 14;
FAILED_TO_FIND_CONTAINER = 15;
FAILED_TO_FIND_CONTAINER_WITH_SPACE = 16;
BLOCK_EXISTS = 17;
FAILED_TO_FIND_BLOCK = 18;
IO_EXCEPTION = 19;
UNEXPECTED_CONTAINER_STATE = 20;
SCM_NOT_INITIALIZED = 21;
DUPLICATE_DATANODE = 22;
NO_SUCH_DATANODE = 23;
NO_REPLICA_FOUND = 24;
FAILED_TO_FIND_ACTIVE_PIPELINE = 25;
FAILED_TO_INIT_CONTAINER_PLACEMENT_POLICY = 26;
FAILED_TO_ALLOCATE_ENOUGH_BLOCKS = 27;
INTERNAL_ERROR = 29;
}
/**
* Request send to SCM asking allocate block of specified size.
*/
message AllocateScmBlockRequestProto {
required uint64 size = 1;
required uint32 numBlocks = 2;
required ReplicationType type = 3;
required hadoop.hdds.ReplicationFactor factor = 4;
required string owner = 5;
optional ExcludeListProto excludeList = 7;
}
/**
* A delete key request sent by OM to SCM, it contains
* multiple number of keys (and their blocks).
*/
message DeleteScmKeyBlocksRequestProto {
repeated KeyBlocks keyBlocks = 1;
}
/**
* A object key and all its associated blocks.
* We need to encapsulate object key name plus the blocks in this potocol
* because SCM needs to response OM with the keys it has deleted.
* If the response only contains blocks, it will be very expensive for
* OM to figure out what keys have been deleted.
*/
message KeyBlocks {
required string key = 1;
repeated BlockID blocks = 2;
}
/**
* A delete key response from SCM to OM, it contains multiple child-results.
* Each child-result represents a key deletion result, only if all blocks of
* a key are successfully deleted, this key result is considered as succeed.
*/
message DeleteScmKeyBlocksResponseProto {
repeated DeleteKeyBlocksResultProto results = 1;
}
/**
* A key deletion result. It contains all the block deletion results.
*/
message DeleteKeyBlocksResultProto {
required string objectKey = 1;
repeated DeleteScmBlockResult blockResults = 2;
}
message DeleteScmBlockResult {
enum Result {
success = 1;
safeMode = 2;
errorNotFound = 3;
unknownFailure = 4;
}
required Result result = 1;
required BlockID blockID = 2;
}
message AllocateBlockResponse {
optional ContainerBlockID containerBlockID = 1;
optional hadoop.hdds.Pipeline pipeline = 2;
}
/**
* Reply from SCM indicating that the container.
*/
message AllocateScmBlockResponseProto {
repeated AllocateBlockResponse blocks = 3;
}
/**
* Datanode sort request sent by OM to SCM, it contains
* multiple number of datanodes.
*/
message SortDatanodesRequestProto{
required string client = 1;
repeated string nodeNetworkName = 2;
}
message SortDatanodesResponseProto{
repeated DatanodeDetailsProto node = 1;
}
/**
* Protocol used from OzoneManager to StorageContainerManager.
* See request and response messages for details of the RPC calls.
*/
service ScmBlockLocationProtocolService {
rpc send(SCMBlockLocationRequest)
returns (SCMBlockLocationResponse);
}