/**
 * 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 an *unstable* .proto interface.
 */

syntax = "proto2";
option java_package = "org.apache.hadoop.hdds.protocol.proto";
option java_outer_classname = "DiskBalancerProtocolProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
package hadoop.hdds;

import "hdds.proto";

/**
 * Request for DiskBalancer information (report or status).
 */
message GetDiskBalancerInfoRequestProto {
  required uint32 clientVersion = 1;
}

/**
 * Response containing DiskBalancer information.
 */
message GetDiskBalancerInfoResponseProto {
  required DatanodeDiskBalancerInfoProto info = 1;
}

/**
 * Request to start DiskBalancer with optional configuration.
 */
message StartDiskBalancerRequestProto {
  optional DiskBalancerConfigurationProto config = 1;
}

message StartDiskBalancerResponseProto {
}

/**
 * Request to stop DiskBalancer.
 */
message StopDiskBalancerRequestProto {
}

message StopDiskBalancerResponseProto {
}

/**
 * Request to update DiskBalancer configuration.
 */
message UpdateDiskBalancerConfigurationRequestProto {
  required DiskBalancerConfigurationProto config = 1;
}

message UpdateDiskBalancerConfigurationResponseProto {
}

/**
 * Protocol for direct client-to-datanode DiskBalancer operations.
 */
service DiskBalancerProtocolService {

  // Get DiskBalancer information (report or status based on infoType)
  rpc getDiskBalancerInfo(GetDiskBalancerInfoRequestProto)
      returns (GetDiskBalancerInfoResponseProto);

  rpc startDiskBalancer(StartDiskBalancerRequestProto)
      returns (StartDiskBalancerResponseProto);

  rpc stopDiskBalancer(StopDiskBalancerRequestProto)
      returns (StopDiskBalancerResponseProto);

  rpc updateDiskBalancerConfiguration(UpdateDiskBalancerConfigurationRequestProto)
      returns (UpdateDiskBalancerConfigurationResponseProto);
}

