/**
 * 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.
 */
syntax="proto2";
// 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 = "ClientDatanodeProtocolProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
package hadoop.hdfs;

import "Security.proto";
import "hdfs.proto";
import "ReconfigurationProtocol.proto";

/**
 * block - block for which visible length is requested
 */
message GetReplicaVisibleLengthRequestProto {
  required ExtendedBlockProto block = 1;
}

/**
 * length - visible length of the block
 */
message GetReplicaVisibleLengthResponseProto {
  required uint64 length = 1;
}

/**
 * void request
 */
message RefreshNamenodesRequestProto {
}

/**
 * void response
 */
message RefreshNamenodesResponseProto {
}

/**
 * blockPool - block pool to be deleted
 * force - if false, delete the block pool only if it is empty.
 *         if true, delete the block pool even if it has blocks.
 */
message DeleteBlockPoolRequestProto {
  required string blockPool = 1;
  required bool force = 2;
}

/**
 * void response
 */
message DeleteBlockPoolResponseProto {
}

/**
 * Gets the file information where block and its metadata is stored
 * block - block for which path information is being requested
 * token - block token
 *
 * This message is deprecated in favor of file descriptor passing.
 */
message GetBlockLocalPathInfoRequestProto {
  required ExtendedBlockProto block = 1;
  required hadoop.common.TokenProto token = 2;
}

/**
 * block - block for which file path information is being returned
 * localPath - file path where the block data is stored
 * localMetaPath - file path where the block meta data is stored
 *
 * This message is deprecated in favor of file descriptor passing.
 */
message GetBlockLocalPathInfoResponseProto {
  required ExtendedBlockProto block = 1;
  required string localPath = 2;
  required string localMetaPath = 3;
}

/**
 * forUpgrade - if true, clients are advised to wait for restart and quick
 *              upgrade restart is instrumented. Otherwise, datanode does
 *              the regular shutdown.
 */
message ShutdownDatanodeRequestProto {
  required bool forUpgrade = 1;
}

message ShutdownDatanodeResponseProto {
}

/** Tell datanode to evict active clients that are writing */
message EvictWritersRequestProto {
}

message EvictWritersResponseProto {
}

/**
 * Ping datanode for liveness and quick info
 */
message GetDatanodeInfoRequestProto {
}

message GetDatanodeInfoResponseProto {
  required DatanodeLocalInfoProto localInfo = 1;
}

message GetVolumeReportRequestProto {
}

message GetVolumeReportResponseProto {
  repeated DatanodeVolumeInfoProto volumeInfo = 1;
}

message TriggerBlockReportRequestProto {
  required bool incremental = 1;
}

message TriggerBlockReportResponseProto {
}

message GetBalancerBandwidthRequestProto {
}

/**
 * bandwidth - balancer bandwidth value of the datanode.
 */
message GetBalancerBandwidthResponseProto {
  required uint64 bandwidth = 1;
}

/**
 * This message allows a client to submit a disk
 * balancer plan to a data node.
 */
message SubmitDiskBalancerPlanRequestProto {
  required string planID = 1;         // A hash of the plan like SHA-1
  required string plan = 2;           // Plan file data in Json format
  optional uint64 planVersion = 3;    // Plan version number
  optional bool ignoreDateCheck = 4;  // Ignore date checks on this plan.
  required string planFile = 5;       // Plan file path
}

/**
 * Response from the DataNode on Plan Submit request
 */
message SubmitDiskBalancerPlanResponseProto {
}

/**
 * This message describes a request to cancel an
 * outstanding disk balancer plan
 */
message CancelPlanRequestProto {
  required string planID = 1;
}

/**
 * This is the response for the cancellation request
 */
message CancelPlanResponseProto {
}


/**
 * This message allows a client to query data node to see
 * if a disk balancer plan is executing and if so what is
 * the status.
 */
message QueryPlanStatusRequestProto {
}

/**
 * This message describes a plan if it is in progress
 */
message QueryPlanStatusResponseProto {
  optional uint32 result = 1;
  optional string planID = 2;
  optional string currentStatus = 3;
  optional string planFile = 4;
}

/**
  * This message sends a request to data node get a specific setting
  * that is used by disk balancer.
  */
message DiskBalancerSettingRequestProto {
  required string key = 1;
}

/**
 * Response that describes the value of requested disk balancer setting.
 */
message DiskBalancerSettingResponseProto {
  required string value = 1;
}

/**
 * Protocol used from client to the Datanode.
 * See the request and response for details of rpc call.
 */
service ClientDatanodeProtocolService {
  /**
   * Returns the visible length of the replica
   */
  rpc getReplicaVisibleLength(GetReplicaVisibleLengthRequestProto)
      returns(GetReplicaVisibleLengthResponseProto);

  /**
   * Refresh the list of federated namenodes from updated configuration.
   * Adds new namenodes and stops the deleted namenodes.
   */
  rpc refreshNamenodes(RefreshNamenodesRequestProto)
      returns(RefreshNamenodesResponseProto);

  /**
   * Delete the block pool from the datanode.
   */
  rpc deleteBlockPool(DeleteBlockPoolRequestProto)
      returns(DeleteBlockPoolResponseProto);

  /**
   * Retrieves the path names of the block file and metadata file stored on the
   * local file system.
   */
  rpc getBlockLocalPathInfo(GetBlockLocalPathInfoRequestProto)
      returns(GetBlockLocalPathInfoResponseProto);

  rpc shutdownDatanode(ShutdownDatanodeRequestProto)
      returns(ShutdownDatanodeResponseProto);

  rpc evictWriters(EvictWritersRequestProto)
      returns(EvictWritersResponseProto);

  rpc getDatanodeInfo(GetDatanodeInfoRequestProto)
      returns(GetDatanodeInfoResponseProto);

  rpc getVolumeReport(GetVolumeReportRequestProto)
      returns(GetVolumeReportResponseProto);

  rpc getReconfigurationStatus(GetReconfigurationStatusRequestProto)
      returns(GetReconfigurationStatusResponseProto);

  rpc startReconfiguration(StartReconfigurationRequestProto)
      returns(StartReconfigurationResponseProto);

  rpc listReconfigurableProperties(
      ListReconfigurablePropertiesRequestProto)
      returns(ListReconfigurablePropertiesResponseProto);

  rpc triggerBlockReport(TriggerBlockReportRequestProto)
      returns(TriggerBlockReportResponseProto);

  /**
   * Returns the balancer bandwidth value of datanode.
   */
  rpc getBalancerBandwidth(GetBalancerBandwidthRequestProto)
      returns(GetBalancerBandwidthResponseProto);

  /**
   * Submit a disk balancer plan for execution
   */
  rpc submitDiskBalancerPlan(SubmitDiskBalancerPlanRequestProto)
      returns (SubmitDiskBalancerPlanResponseProto);
  /**
   * Cancel an executing plan
   */
  rpc cancelDiskBalancerPlan(CancelPlanRequestProto)
      returns (CancelPlanResponseProto);

  /**
   * Gets the status of an executing Plan
   */
  rpc queryDiskBalancerPlan(QueryPlanStatusRequestProto)
      returns (QueryPlanStatusResponseProto);
  /**
   *  Gets run-time settings of Disk Balancer.
   */
  rpc getDiskBalancerSetting(DiskBalancerSettingRequestProto)
      returns(DiskBalancerSettingResponseProto);
}
