/**
 * 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.tez.runtime.api.events";
option java_outer_classname = "EventProtos";
option java_generate_equals_and_hash = true;

message DataMovementEventProto {
  optional int32 source_index = 1;
  optional int32 target_index = 2;
  optional bytes user_payload = 3;
  optional int32 version = 4;
}

message CompositeRoutedDataMovementEventProto {
  optional int32 source_index = 1;
  optional int32 target_index = 2;
  optional int32 count = 3;
  optional bytes user_payload = 4;
  optional int32 version = 5;
}

message InputReadErrorEventProto {
  optional int32 index = 1;
  optional string diagnostics = 2;
  optional int32 version = 3;
  optional bool is_local_fetch = 4;
  optional bool is_disk_error_at_source = 5;
}

message InputFailedEventProto {
  optional int32 target_index = 1;
  optional int32 version = 2;
}

message VertexManagerEventProto {
  optional string target_vertex_name = 1;
  optional bytes user_payload = 2;
}

message RootInputDataInformationEventProto {
  optional int32 source_index = 1;
  optional int32 target_index = 2;
  optional bytes user_payload = 3;
}

message CompositeEventProto {
  optional int32 start_index = 1;
  optional int32 count = 2;
  optional bytes user_payload = 3;
  optional int32 version = 4;
}

message RootInputInitializerEventProto {
  optional string target_vertex_name = 1;
  optional string target_input_name = 2;
  optional bytes user_payload = 3;
}

message CustomProcessorEventProto {
  optional bytes user_payload = 1;
  required int32 version = 2;
}
