| /** |
| * 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 = "HddsProtos"; |
| option java_generic_services = true; |
| option java_generate_equals_and_hash = true; |
| package hadoop.hdds; |
| |
| message DatanodeDetailsProto { |
| // TODO: make the port as a seperate proto message and use it here |
| required string uuid = 1; // UUID assigned to the Datanode. |
| required string ipAddress = 2; // IP address |
| required string hostName = 3; // hostname |
| optional uint32 containerPort = 4 [default = 0]; // Ozone stand_alone protocol |
| optional uint32 ratisPort = 5 [default = 0]; //Ozone ratis port |
| optional uint32 ozoneRestPort = 6 [default = 0]; |
| } |
| |
| message PipelineChannel { |
| required string leaderID = 1; |
| repeated DatanodeDetailsProto members = 2; |
| optional LifeCycleState state = 3 [default = OPEN]; |
| optional ReplicationType type = 4 [default = STAND_ALONE]; |
| optional ReplicationFactor factor = 5 [default = ONE]; |
| optional string name = 6; |
| } |
| |
| // A pipeline is composed of PipelineChannel (Ratis/StandAlone) that back a |
| // container. |
| message Pipeline { |
| required string containerName = 1; |
| required PipelineChannel pipelineChannel = 2; |
| } |
| |
| message KeyValue { |
| required string key = 1; |
| optional string value = 2; |
| } |
| |
| /** |
| * Type of the node. |
| */ |
| enum NodeType { |
| KSM = 1; |
| SCM = 2; |
| DATANODE = 3; |
| } |
| |
| // Should we rename NodeState to DatanodeState? |
| /** |
| * Enum that represents the Node State. This is used in calls to getNodeList |
| * and getNodeCount. |
| */ |
| enum NodeState { |
| HEALTHY = 1; |
| STALE = 2; |
| DEAD = 3; |
| DECOMMISSIONING = 4; |
| DECOMMISSIONED = 5; |
| RAFT_MEMBER = 6; |
| FREE_NODE = 7; // Not a member in raft. |
| INVALID = 8; |
| } |
| |
| enum QueryScope { |
| CLUSTER = 1; |
| POOL = 2; |
| } |
| |
| message Node { |
| required DatanodeDetailsProto nodeID = 1; |
| repeated NodeState nodeStates = 2; |
| } |
| |
| message NodePool { |
| repeated Node nodes = 1; |
| } |
| |
| /** |
| * LifeCycleState for SCM object creation state machine: |
| * ->Allocated: allocated on SCM but clean has not started creating it yet. |
| * ->Creating: allocated and assigned to client to create but not ack-ed yet. |
| * ->Open: allocated on SCM and created on datanodes and ack-ed by a client. |
| * ->Close: container closed due to space all used or error? |
| * ->Timeout -> container failed to create on datanodes or ack-ed by client. |
| * ->Deleting(TBD) -> container will be deleted after timeout |
| * 1. ALLOCATE-ed containers on SCM can't serve key/block related operation |
| * until ACK-ed explicitly which changes the state to OPEN. |
| * 2. Only OPEN/CLOSED containers can serve key/block related operation. |
| * 3. ALLOCATE-ed containers that are not ACK-ed timely will be TIMEOUT and |
| * CLEANUP asynchronously. |
| */ |
| |
| enum LifeCycleState { |
| ALLOCATED = 1; |
| CREATING = 2; // Used for container allocated/created by different client. |
| OPEN =3; // Mostly an update to SCM via HB or client call. |
| CLOSING = 4; |
| CLOSED = 5; // !!State after this has not been used yet. |
| DELETING = 6; |
| DELETED = 7; // object is deleted. |
| } |
| |
| enum LifeCycleEvent { |
| CREATE = 1; // A request to client to create this object |
| CREATED = 2; |
| FINALIZE = 3; |
| CLOSE = 4; // !!Event after this has not been used yet. |
| UPDATE = 5; |
| TIMEOUT = 6; // creation has timed out from SCM's View. |
| DELETE = 7; |
| CLEANUP = 8; |
| } |
| |
| message SCMContainerInfo { |
| // TODO : Remove the container name from pipeline. |
| required string containerName = 1; |
| required LifeCycleState state = 2; |
| required Pipeline pipeline = 3; |
| // This is not total size of container, but space allocated by SCM for |
| // clients to write blocks |
| required uint64 allocatedBytes = 4; |
| required uint64 usedBytes = 5; |
| required uint64 numberOfKeys = 6; |
| optional int64 stateEnterTime = 7; |
| required string owner = 8; |
| required int64 containerID = 9; |
| } |
| |
| message GetScmInfoRequestProto { |
| } |
| |
| message GetScmInfoRespsonseProto { |
| required string clusterId = 1; |
| required string scmId = 2; |
| } |
| |
| |
| enum ReplicationType { |
| RATIS = 1; |
| STAND_ALONE = 2; |
| CHAINED = 3; |
| } |
| |
| enum ReplicationFactor { |
| ONE = 1; |
| THREE = 3; |
| } |