/**
 * 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.
 */

option java_package = "org.apache.hadoop.yarn.proto";
option java_outer_classname = "YarnServerCommonProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
package hadoop.yarn;

import "yarn_protos.proto";

enum NodeActionProto {
  NORMAL = 0;
  RESYNC = 1;
  SHUTDOWN = 2;
}

message NodeStatusProto {
  optional NodeIdProto node_id = 1;
  optional int32 response_id = 2;
  repeated ContainerStatusProto containersStatuses = 3;
  optional NodeHealthStatusProto nodeHealthStatus = 4;
  repeated ApplicationIdProto keep_alive_applications = 5;
  optional ResourceUtilizationProto containers_utilization = 6;
  optional ResourceUtilizationProto node_utilization = 7;
  repeated ContainerProto increased_containers = 8;
  optional QueuedContainersStatusProto queued_container_status = 9;
}

message QueuedContainersStatusProto {
  optional int32 estimated_queue_wait_time = 1;
  optional int32 wait_queue_length = 2;
}

message MasterKeyProto {
  optional int32 key_id = 1;
  optional bytes bytes = 2;
}

message NodeHealthStatusProto {
  optional bool is_node_healthy = 1;
  optional string health_report = 2;
  optional int64 last_health_report_time = 3;
}

message VersionProto {
  optional int32 major_version = 1;
  optional int32 minor_version = 2;
}

