| /** |
| * 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://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/InterfaceClassification.html |
| * for what changes are allowed for a *Unstable* .proto interface. |
| */ |
| |
| // This file contains protocol buffers that are used to transfer data |
| // to and from the datanode. |
| option java_package = "org.apache.hadoop.hdds.protocol.proto"; |
| option java_outer_classname = "ContainerProtos"; |
| option java_generate_equals_and_hash = true; |
| package hadoop.hdds; |
| import "hdfs.proto"; |
| import "hdds.proto"; |
| |
| /** |
| * Commands that are used to manipulate the state of containers on a datanode. |
| * |
| * These commands allow us to work against the datanode - from |
| * StorageContainer Manager as well as clients. |
| * |
| * 1. CreateContainer - This call is usually made by Storage Container |
| * manager, when we need to create a new container on a given datanode. |
| * |
| * 2. ReadContainer - Allows end user to stat a container. For example |
| * this allows us to return the metadata of a container. |
| * |
| * 3. UpdateContainer - Updates a container metadata. |
| |
| * 4. DeleteContainer - This call is made to delete a container. |
| * |
| * 5. ListContainer - Returns the list of containers on this |
| * datanode. This will be used by tests and tools. |
| * |
| * 6. PutKey - Given a valid container, creates a key. |
| * |
| * 7. GetKey - Allows user to read the metadata of a Key. |
| * |
| * 8. DeleteKey - Deletes a given key. |
| * |
| * 9. ListKey - Returns a list of keys that are present inside |
| * a given container. |
| * |
| * 10. ReadChunk - Allows us to read a chunk. |
| * |
| * 11. DeleteChunk - Delete an unused chunk. |
| * |
| * 12. WriteChunk - Allows us to write a chunk |
| * |
| * 13. ListChunk - Given a Container/Key returns the list of Chunks. |
| * |
| * 14. CompactChunk - Re-writes a chunk based on Offsets. |
| * |
| * 15. PutSmallFile - A single RPC that combines both putKey and WriteChunk. |
| * |
| * 16. GetSmallFile - A single RPC that combines both getKey and ReadChunk. |
| * |
| * 17. CloseContainer - Closes an open container and makes it immutable. |
| * |
| * 18. CopyContainer - Copies a container from a remote machine. |
| */ |
| |
| enum Type { |
| CreateContainer = 1; |
| ReadContainer = 2; |
| UpdateContainer = 3; |
| DeleteContainer = 4; |
| ListContainer = 5; |
| |
| PutKey = 6; |
| GetKey = 7; |
| DeleteKey = 8; |
| ListKey = 9; |
| |
| ReadChunk = 10; |
| DeleteChunk = 11; |
| WriteChunk = 12; |
| ListChunk = 13; |
| CompactChunk = 14; |
| |
| /** Combines Key and Chunk Operation into Single RPC. */ |
| PutSmallFile = 15; |
| GetSmallFile = 16; |
| CloseContainer = 17; |
| |
| } |
| |
| |
| enum Result { |
| SUCCESS = 1; |
| UNSUPPORTED_REQUEST = 2; |
| MALFORMED_REQUEST = 3; |
| CONTAINER_INTERNAL_ERROR = 4; |
| INVALID_CONFIG = 5; |
| INVALID_FILE_HASH_FOUND = 6; |
| CONTAINER_EXISTS = 7; |
| NO_SUCH_ALGORITHM = 8; |
| CONTAINER_NOT_FOUND = 9; |
| IO_EXCEPTION = 10; |
| UNABLE_TO_READ_METADATA_DB = 11; |
| NO_SUCH_KEY = 12; |
| OVERWRITE_FLAG_REQUIRED = 13; |
| UNABLE_TO_FIND_DATA_DIR = 14; |
| INVALID_WRITE_SIZE = 15; |
| CHECKSUM_MISMATCH = 16; |
| UNABLE_TO_FIND_CHUNK = 17; |
| PROTOC_DECODING_ERROR = 18; |
| INVALID_ARGUMENT = 19; |
| PUT_SMALL_FILE_ERROR = 20; |
| GET_SMALL_FILE_ERROR = 21; |
| CLOSED_CONTAINER_IO = 22; |
| ERROR_CONTAINER_NOT_EMPTY = 23; |
| ERROR_IN_COMPACT_DB = 24; |
| UNCLOSED_CONTAINER_IO = 25; |
| DELETE_ON_OPEN_CONTAINER = 26; |
| CLOSED_CONTAINER_RETRY = 27; |
| } |
| |
| message ContainerCommandRequestProto { |
| 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; |
| |
| // One of the following command is available when the corresponding |
| // cmdType is set. At the protocol level we allow only |
| // one command in each packet. |
| // TODO : Upgrade to Protobuf 2.6 or later. |
| optional CreateContainerRequestProto createContainer = 3; |
| optional ReadContainerRequestProto readContainer = 4; |
| optional UpdateContainerRequestProto updateContainer = 5; |
| optional DeleteContainerRequestProto deleteContainer = 6; |
| optional ListContainerRequestProto listContainer = 7; |
| |
| optional PutKeyRequestProto putKey = 8; |
| optional GetKeyRequestProto getKey = 9; |
| optional DeleteKeyRequestProto deleteKey = 10; |
| optional ListKeyRequestProto listKey = 11; |
| |
| optional ReadChunkRequestProto readChunk = 12; |
| optional WriteChunkRequestProto writeChunk = 13; |
| optional DeleteChunkRequestProto deleteChunk = 14; |
| optional ListChunkRequestProto listChunk = 15; |
| |
| optional PutSmallFileRequestProto putSmallFile = 16; |
| optional GetSmallFileRequestProto getSmallFile = 17; |
| optional CloseContainerRequestProto closeContainer = 18; |
| required string datanodeUuid = 19; |
| } |
| |
| message ContainerCommandResponseProto { |
| required Type cmdType = 1; |
| optional string traceID = 2; |
| |
| optional CreateContainerResponseProto createContainer = 3; |
| optional ReadContainerResponseProto readContainer = 4; |
| optional UpdateContainerResponseProto updateContainer = 5; |
| optional DeleteContainerResponseProto deleteContainer = 6; |
| optional ListContainerResponseProto listContainer = 7; |
| |
| optional PutKeyResponseProto putKey = 8; |
| optional GetKeyResponseProto getKey = 9; |
| optional DeleteKeyResponseProto deleteKey = 10; |
| optional ListKeyResponseProto listKey = 11; |
| |
| optional WriteChunkResponseProto writeChunk = 12; |
| optional ReadChunkResponseProto readChunk = 13; |
| optional DeleteChunkResponseProto deleteChunk = 14; |
| optional ListChunkResponseProto listChunk = 15; |
| |
| required Result result = 17; |
| optional string message = 18; |
| |
| optional PutSmallFileResponseProto putSmallFile = 19; |
| optional GetSmallFileResponseProto getSmallFile = 20; |
| optional CloseContainerResponseProto closeContainer = 21; |
| |
| } |
| |
| message ContainerData { |
| required string name = 1; |
| repeated KeyValue metadata = 2; |
| optional string dbPath = 3; |
| optional string containerPath = 4; |
| optional string hash = 6; |
| optional int64 bytesUsed = 7; |
| optional int64 size = 8; |
| optional int64 keyCount = 9; |
| //TODO: change required after we switch container ID from string to long |
| optional int64 containerID = 10; |
| optional LifeCycleState state = 11 [default = OPEN]; |
| } |
| |
| message ContainerMeta { |
| required string fileName = 1; |
| required string hash = 2; |
| } |
| |
| // Container Messages. |
| message CreateContainerRequestProto { |
| required Pipeline pipeline = 1; |
| required ContainerData containerData = 2; |
| } |
| |
| message CreateContainerResponseProto { |
| } |
| |
| message ReadContainerRequestProto { |
| required Pipeline pipeline = 1; |
| required string name = 2; |
| } |
| |
| message ReadContainerResponseProto { |
| optional ContainerData containerData = 2; |
| } |
| |
| message UpdateContainerRequestProto { |
| required Pipeline pipeline = 1; |
| required ContainerData containerData = 2; |
| optional bool forceUpdate = 3 [default = false]; |
| } |
| |
| message UpdateContainerResponseProto { |
| } |
| |
| message DeleteContainerRequestProto { |
| required Pipeline pipeline = 1; |
| required string name = 2; |
| optional bool forceDelete = 3 [default = false]; |
| } |
| |
| message DeleteContainerResponseProto { |
| } |
| |
| message ListContainerRequestProto { |
| required Pipeline pipeline = 1; |
| optional string prefix = 2; |
| required uint32 count = 3; // Max Results to return |
| optional string prevKey = 4; // if this is not set query from start. |
| } |
| |
| message ListContainerResponseProto { |
| repeated ContainerData containerData = 1; |
| } |
| |
| message CloseContainerRequestProto { |
| required Pipeline pipeline = 1; |
| } |
| |
| message CloseContainerResponseProto { |
| optional Pipeline pipeline = 1; |
| optional string hash = 2; |
| } |
| |
| message KeyData { |
| required string containerName = 1; |
| required string name = 2; |
| optional int64 flags = 3; // for future use. |
| repeated KeyValue metadata = 4; |
| repeated ChunkInfo chunks = 5; |
| } |
| |
| // Key Messages. |
| message PutKeyRequestProto { |
| required Pipeline pipeline = 1; |
| required KeyData keyData = 2; |
| } |
| |
| message PutKeyResponseProto { |
| } |
| |
| message GetKeyRequestProto { |
| required Pipeline pipeline = 1; |
| required KeyData keyData = 2; |
| } |
| |
| message GetKeyResponseProto { |
| required KeyData keyData = 1; |
| } |
| |
| |
| message DeleteKeyRequestProto { |
| required Pipeline pipeline = 1; |
| required string name = 2; |
| } |
| |
| message DeleteKeyResponseProto { |
| } |
| |
| message ListKeyRequestProto { |
| required Pipeline pipeline = 1; |
| optional string prefix = 2; // if specified returns keys that match prefix. |
| required string prevKey = 3; |
| required uint32 count = 4; |
| |
| } |
| |
| message ListKeyResponseProto { |
| repeated KeyData keyData = 1; |
| } |
| |
| // Chunk Operations |
| |
| message ChunkInfo { |
| required string chunkName = 1; |
| required uint64 offset = 2; |
| required uint64 len = 3; |
| optional string checksum = 4; |
| repeated KeyValue metadata = 5; |
| } |
| |
| enum Stage { |
| WRITE_DATA = 1; |
| COMMIT_DATA = 2; |
| COMBINED = 3; |
| } |
| |
| message WriteChunkRequestProto { |
| required Pipeline pipeline = 1; |
| required string keyName = 2; |
| required ChunkInfo chunkData = 3; |
| optional bytes data = 4; |
| optional Stage stage = 5 [default = COMBINED]; |
| } |
| |
| message WriteChunkResponseProto { |
| } |
| |
| message ReadChunkRequestProto { |
| required Pipeline pipeline = 1; |
| required string keyName = 2; |
| required ChunkInfo chunkData = 3; |
| } |
| |
| message ReadChunkResponseProto { |
| required Pipeline pipeline = 1; |
| required ChunkInfo chunkData = 2; |
| required bytes data = 3; |
| } |
| |
| message DeleteChunkRequestProto { |
| required Pipeline pipeline = 1; |
| required string keyName = 2; |
| required ChunkInfo chunkData = 3; |
| } |
| |
| message DeleteChunkResponseProto { |
| } |
| |
| message ListChunkRequestProto { |
| required Pipeline pipeline = 1; |
| required string keyName = 2; |
| required string prevChunkName = 3; |
| required uint32 count = 4; |
| } |
| |
| message ListChunkResponseProto { |
| repeated ChunkInfo chunkData = 1; |
| } |
| |
| /** For small file access combines write chunk and putKey into a single |
| RPC */ |
| |
| message PutSmallFileRequestProto { |
| required PutKeyRequestProto key = 1; |
| required ChunkInfo chunkInfo = 2; |
| required bytes data = 3; |
| } |
| |
| |
| message PutSmallFileResponseProto { |
| |
| } |
| |
| message GetSmallFileRequestProto { |
| required GetKeyRequestProto key = 1; |
| } |
| |
| message GetSmallFileResponseProto { |
| required ReadChunkResponseProto data = 1; |
| } |
| |
| message CopyContainerRequestProto { |
| required string containerName = 1; |
| required uint64 readOffset = 2; |
| optional uint64 len = 3; |
| } |
| |
| message CopyContainerResponseProto { |
| required string archiveName = 1; |
| required uint64 readOffset = 2; |
| required uint64 len = 3; |
| required bool eof = 4; |
| repeated bytes data = 5; |
| optional int64 checksum = 6; |
| } |