/**
 * 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 InputReadErrorEventProto {
  optional int32 index = 1;
  optional string diagnostics = 2;
  optional int32 version = 3;
}

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

message InputInformationEventProto {
  optional bytes user_payload = 1;
}
