|
@@ -0,0 +1,201 @@
|
|
|
+/**
|
|
|
+ * 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 stable.
|
|
|
+ * Please see http://wiki.apache.org/hadoop/Compatibility
|
|
|
+ * for what changes are allowed for a *stable* .proto interface.
|
|
|
+ */
|
|
|
+
|
|
|
+// This file contains protocol buffers that are used throughout HDFS -- i.e.
|
|
|
+// by the client, server, and data transfer protocols.
|
|
|
+
|
|
|
+
|
|
|
+option java_package = "org.apache.hadoop.hdfs.protocol.proto";
|
|
|
+option java_outer_classname = "HdfsServerProtos";
|
|
|
+option java_generate_equals_and_hash = true;
|
|
|
+package hadoop.hdfs;
|
|
|
+
|
|
|
+import "hdfs.proto";
|
|
|
+
|
|
|
+/**
|
|
|
+ * A list of storage IDs.
|
|
|
+ */
|
|
|
+message StorageUuidsProto {
|
|
|
+ repeated string storageUuids = 1;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Block access token information
|
|
|
+ */
|
|
|
+message BlockKeyProto {
|
|
|
+ required uint32 keyId = 1; // Key identifier
|
|
|
+ required uint64 expiryDate = 2; // Expiry time in milliseconds
|
|
|
+ optional bytes keyBytes = 3; // Key secret
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Current key and set of block keys at the namenode.
|
|
|
+ */
|
|
|
+message ExportedBlockKeysProto {
|
|
|
+ required bool isBlockTokenEnabled = 1;
|
|
|
+ required uint64 keyUpdateInterval = 2;
|
|
|
+ required uint64 tokenLifeTime = 3;
|
|
|
+ required BlockKeyProto currentKey = 4;
|
|
|
+ repeated BlockKeyProto allKeys = 5;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Block and datanodes where is it located
|
|
|
+ */
|
|
|
+message BlockWithLocationsProto {
|
|
|
+ required BlockProto block = 1; // Block
|
|
|
+ repeated string datanodeUuids = 2; // Datanodes with replicas of the block
|
|
|
+ repeated string storageUuids = 3; // Storages with replicas of the block
|
|
|
+ repeated StorageTypeProto storageTypes = 4;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * List of block with locations
|
|
|
+ */
|
|
|
+message BlocksWithLocationsProto {
|
|
|
+ repeated BlockWithLocationsProto blocks = 1;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Editlog information with available transactions
|
|
|
+ */
|
|
|
+message RemoteEditLogProto {
|
|
|
+ required uint64 startTxId = 1; // Starting available edit log transaction
|
|
|
+ required uint64 endTxId = 2; // Ending available edit log transaction
|
|
|
+ optional bool isInProgress = 3 [default = false];
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Enumeration of editlogs available on a remote namenode
|
|
|
+ */
|
|
|
+message RemoteEditLogManifestProto {
|
|
|
+ repeated RemoteEditLogProto logs = 1;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Namespace information that describes namespace on a namenode
|
|
|
+ */
|
|
|
+message NamespaceInfoProto {
|
|
|
+ required string buildVersion = 1; // Software revision version (e.g. an svn or git revision)
|
|
|
+ required uint32 unused = 2; // Retained for backward compatibility
|
|
|
+ required string blockPoolID = 3; // block pool used by the namespace
|
|
|
+ required StorageInfoProto storageInfo = 4;// Node information
|
|
|
+ required string softwareVersion = 5; // Software version number (e.g. 2.0.0)
|
|
|
+ optional uint64 capabilities = 6 [default = 0]; // feature flags
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * State of a block replica at a datanode
|
|
|
+ */
|
|
|
+enum ReplicaStateProto {
|
|
|
+ FINALIZED = 0; // State of a replica when it is not modified
|
|
|
+ RBW = 1; // State of replica that is being written to
|
|
|
+ RWR = 2; // State of replica that is waiting to be recovered
|
|
|
+ RUR = 3; // State of replica that is under recovery
|
|
|
+ TEMPORARY = 4; // State of replica that is created for replication
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Block that needs to be recovered with at a given location
|
|
|
+ */
|
|
|
+message RecoveringBlockProto {
|
|
|
+ required uint64 newGenStamp = 1; // New genstamp post recovery
|
|
|
+ required LocatedBlockProto block = 2; // Block to be recovered
|
|
|
+ optional BlockProto truncateBlock = 3; // New block for recovery (truncate)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Unique signature to identify checkpoint transactions.
|
|
|
+ */
|
|
|
+message CheckpointSignatureProto {
|
|
|
+ required string blockPoolId = 1;
|
|
|
+ required uint64 mostRecentCheckpointTxId = 2;
|
|
|
+ required uint64 curSegmentTxId = 3;
|
|
|
+ required StorageInfoProto storageInfo = 4;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Command returned from primary to checkpointing namenode.
|
|
|
+ * This command has checkpoint signature that identifies
|
|
|
+ * checkpoint transaction and is needed for further
|
|
|
+ * communication related to checkpointing.
|
|
|
+ */
|
|
|
+message CheckpointCommandProto {
|
|
|
+ // Unique signature to identify checkpoint transation
|
|
|
+ required CheckpointSignatureProto signature = 1;
|
|
|
+
|
|
|
+ // If true, return transfer image to primary upon the completion of checkpoint
|
|
|
+ required bool needToReturnImage = 2;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Command sent from one namenode to another namenode.
|
|
|
+ */
|
|
|
+message NamenodeCommandProto {
|
|
|
+ enum Type {
|
|
|
+ NamenodeCommand = 0; // Base command
|
|
|
+ CheckPointCommand = 1; // Check point command
|
|
|
+ }
|
|
|
+ required uint32 action = 1;
|
|
|
+ required Type type = 2;
|
|
|
+ optional CheckpointCommandProto checkpointCmd = 3;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * void request
|
|
|
+ */
|
|
|
+message VersionRequestProto {
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Version response from namenode.
|
|
|
+ */
|
|
|
+message VersionResponseProto {
|
|
|
+ required NamespaceInfoProto info = 1;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Common node information shared by all the nodes in the cluster
|
|
|
+ */
|
|
|
+message StorageInfoProto {
|
|
|
+ required uint32 layoutVersion = 1; // Layout version of the file system
|
|
|
+ required uint32 namespceID = 2; // File system namespace ID
|
|
|
+ required string clusterID = 3; // ID of the cluster
|
|
|
+ required uint64 cTime = 4; // File system creation time
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Information sent by a namenode to identify itself to the primary namenode.
|
|
|
+ */
|
|
|
+message NamenodeRegistrationProto {
|
|
|
+ required string rpcAddress = 1; // host:port of the namenode RPC address
|
|
|
+ required string httpAddress = 2; // host:port of the namenode http server
|
|
|
+ enum NamenodeRoleProto {
|
|
|
+ NAMENODE = 1;
|
|
|
+ BACKUP = 2;
|
|
|
+ CHECKPOINT = 3;
|
|
|
+ }
|
|
|
+ required StorageInfoProto storageInfo = 3; // Node information
|
|
|
+ optional NamenodeRoleProto role = 4 [default = NAMENODE]; // Namenode role
|
|
|
+}
|