/**
 * 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.tajo";
option java_outer_classname = "TajoProtos";
option java_generic_services = false;
option java_generate_equals_and_hash = true;

enum QueryState {
  QUERY_MASTER_INIT = 0;
  QUERY_MASTER_LAUNCHED = 1;
  QUERY_NEW = 2;
  QUERY_INIT = 3;
  QUERY_RUNNING = 4;
  QUERY_SUCCEEDED = 5;
  QUERY_FAILED = 6;
  QUERY_KILLED = 7;
  QUERY_KILL_WAIT = 8;
  QUERY_ERROR = 9;
  QUERY_NOT_ASSIGNED = 10;
}

enum TaskAttemptState {
  TA_NEW = 0;
  TA_UNASSIGNED = 1;
  TA_ASSIGNED = 2;
  TA_PENDING = 3;
  TA_RUNNING = 4;
  TA_SUCCEEDED = 5;
  TA_FAILED = 6;
  TA_KILL_WAIT = 7;
  TA_KILLED = 8;
}

enum FetcherState {
  FETCH_INIT = 0;
  FETCH_FETCHING = 1;
  FETCH_FINISHED = 2;
  FETCH_FAILED = 3;
}

message WorkerConnectionInfoProto {
  required int32 id = 1;
  required string host = 2;
  required int32 peer_rpc_port = 3;
  required int32 pull_server_port = 4;
  optional int32 query_master_port = 5;
  required int32 client_port = 6;
  required int32 http_info_port = 7;
}

message NodeResourceProto {
  optional int32 memory = 1;
  optional int32 virtual_cores = 2;
  optional int32 disks = 3;
}

enum CodecType {
  SNAPPY = 0;
}
