HDFS-9853. Ozone: Add container definitions. Contributed by Anu Engineer.
This commit is contained in:
parent
11a6cc2a4d
commit
3481897bde
|
@ -0,0 +1,35 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
package org.apache.hadoop.ozone;
|
||||
|
||||
/**
|
||||
This package contains class that support ozone implementation on the datanode
|
||||
side.
|
||||
|
||||
Main parts of ozone on datanode are:
|
||||
|
||||
1. REST Interface - This code lives under the web directory and listens to the
|
||||
WebHDFS port.
|
||||
|
||||
2. Datanode container classes: This support persistence of ozone objects on
|
||||
datanode. These classes live under container directory.
|
||||
|
||||
3. Client and Shell: We also support a ozone REST client lib, they are under
|
||||
web/client and web/ozShell.
|
||||
|
||||
*/
|
|
@ -0,0 +1,314 @@
|
|||
/**
|
||||
* 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.hdfs.ozone.protocol.proto";
|
||||
option java_outer_classname = "ContainerProtos";
|
||||
option java_generate_equals_and_hash = true;
|
||||
package hadoop.hdfs.ozone;
|
||||
import "hdfs.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. CreateKey - Given a valid container, creates a key.
|
||||
*
|
||||
* 7. ReadKey - Allows user to read the metadata of a Key.
|
||||
*
|
||||
* 8. UpdateKey - Updates the metadata of a Key.
|
||||
*
|
||||
* 9. DeleteKey - Deletes a given key.
|
||||
*
|
||||
* 10. ListKey - Returns a list of keys that are present inside
|
||||
* a given container.
|
||||
*
|
||||
* 11. ReadChunk - Allows us to read a chunk.
|
||||
*
|
||||
* 12. DeleteChunk - Delete an unused chunk.
|
||||
*
|
||||
* 13. WriteChunk - Allows us to write a chunk
|
||||
*
|
||||
* 14. ListChunk - Given a Container/Key returns the list of Chunks.
|
||||
*
|
||||
*/
|
||||
|
||||
enum Type {
|
||||
CreateContainer = 1;
|
||||
ReadContainer = 2;
|
||||
UpdateContainer = 3;
|
||||
DeleteContainer = 4;
|
||||
ListContainer = 5;
|
||||
|
||||
CreateKey = 6;
|
||||
Readkey = 7;
|
||||
UpdateKey = 8;
|
||||
DeleteKey = 9;
|
||||
ListKey = 10;
|
||||
|
||||
ReadChunk = 11;
|
||||
DeleteChunk = 12;
|
||||
WriteChunk = 13;
|
||||
ListChunk = 14;
|
||||
}
|
||||
|
||||
|
||||
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 CreateKeyRequestProto createKey = 8;
|
||||
optional ReadKeyRequestProto readKey = 9;
|
||||
optional UpdateKeyRequestProto updateKey = 10;
|
||||
optional DeleteKeyRequestProto deleteKey = 11;
|
||||
optional ListKeyRequestProto listKey = 12;
|
||||
|
||||
optional ReadChunkRequestProto readChunk = 13;
|
||||
optional WriteChunkRequestProto writeChunk = 14;
|
||||
optional DeleteChunkRequestProto deleteChunk = 15;
|
||||
optional ListChunkRequestProto listChunk = 16;
|
||||
}
|
||||
|
||||
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 CreateKeyResponseProto createKey = 8;
|
||||
optional ReadKeyResponeProto readKey = 9;
|
||||
optional UpdateKeyResponseProto updateKey = 10;
|
||||
optional DeleteKeyResponeProto deleteKey = 11;
|
||||
optional ListKeyResponeProto listKey = 12;
|
||||
|
||||
optional WriteChunkReponseProto writeChunk = 13;
|
||||
optional ReadChunkReponseProto readChunk = 14;
|
||||
optional DeleteChunkResponseProto deleteChunk = 15;
|
||||
optional ListChunkResponseProto listChunk = 16;
|
||||
|
||||
}
|
||||
|
||||
// A pipeline is composed of one or more datanodes that back a container.
|
||||
message Pipeline {
|
||||
required string leaderID = 1;
|
||||
repeated DatanodeIDProto members = 2;
|
||||
optional string containerName = 3;
|
||||
}
|
||||
|
||||
message KeyValue {
|
||||
required string key = 1;
|
||||
optional string value = 2;
|
||||
}
|
||||
|
||||
message ContainerData {
|
||||
required string name = 1;
|
||||
repeated KeyValue metadata = 2;
|
||||
optional string containerPath = 3;
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
message UpdateContainerResponseProto {
|
||||
}
|
||||
|
||||
message DeleteContainerRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string name = 2;
|
||||
}
|
||||
|
||||
message DeleteContainerResponseProto {
|
||||
}
|
||||
|
||||
message ListContainerRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
optional string prevKey = 2; // if this is not set query from start.
|
||||
required uint32 count = 3; // Max Results to return
|
||||
}
|
||||
|
||||
message ListContainerResponseProto {
|
||||
repeated ContainerData containerData = 1;
|
||||
}
|
||||
|
||||
|
||||
message ContainerKeyData {
|
||||
optional string containerName = 1;
|
||||
required string name = 2;
|
||||
repeated KeyValue metadata = 3;
|
||||
}
|
||||
|
||||
// Key Messages.
|
||||
message CreateKeyRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required ContainerKeyData containerKeyData = 2;
|
||||
}
|
||||
|
||||
message CreateKeyResponseProto {
|
||||
}
|
||||
|
||||
message ReadKeyRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required ContainerKeyData containerKeyData = 2;
|
||||
}
|
||||
|
||||
message ReadKeyResponeProto {
|
||||
repeated KeyValue metadata = 1;
|
||||
repeated chunkInfo chunkData = 2;
|
||||
}
|
||||
|
||||
message UpdateKeyRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required ContainerKeyData containerKeyData = 2;
|
||||
}
|
||||
|
||||
message UpdateKeyResponseProto {
|
||||
}
|
||||
|
||||
|
||||
message DeleteKeyRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string name = 2;
|
||||
}
|
||||
|
||||
message DeleteKeyResponeProto {
|
||||
}
|
||||
|
||||
message ListKeyRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string prevKey = 2;
|
||||
required uint32 count = 3;
|
||||
}
|
||||
|
||||
message ListKeyResponeProto {
|
||||
repeated ContainerKeyData containerKeyData = 1;
|
||||
}
|
||||
|
||||
// Chunk Operations
|
||||
|
||||
message chunkInfo {
|
||||
required uint64 offset = 1;
|
||||
required uint64 len = 2;
|
||||
optional uint64 checksum = 3;
|
||||
repeated KeyValue metadata = 4;
|
||||
}
|
||||
|
||||
message WriteChunkRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string containerName = 2;
|
||||
required string keyName = 3;
|
||||
required chunkInfo chunkData = 4;
|
||||
repeated bytes data = 5;
|
||||
}
|
||||
|
||||
message WriteChunkReponseProto {
|
||||
}
|
||||
|
||||
message ReadChunkRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string containerName = 2;
|
||||
required string keyName = 3;
|
||||
required chunkInfo chunkData = 4;
|
||||
}
|
||||
|
||||
message ReadChunkReponseProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required chunkInfo chunkData = 2;
|
||||
repeated bytes data = 3;
|
||||
}
|
||||
|
||||
message DeleteChunkRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string containerName = 2;
|
||||
required string keyName = 3;
|
||||
required chunkInfo chunkData = 4;
|
||||
}
|
||||
|
||||
message DeleteChunkResponseProto {
|
||||
}
|
||||
|
||||
message ListChunkRequestProto {
|
||||
required Pipeline pipeline = 1;
|
||||
required string containerName = 2;
|
||||
required string keyName = 3;
|
||||
required uint64 startOffset = 4;
|
||||
required uint32 count = 5;
|
||||
}
|
||||
|
||||
message ListChunkResponseProto {
|
||||
repeated chunkInfo chunkData = 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue