| /** |
| * 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); |
| } |