blob: 8ef50ebac49d18ce8af5c3686ee242514c9ffaa3 [file] [log] [blame]
/**
* 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.
*/
package org.apache.tez.runtime.api.events;
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.tez.runtime.api.Event;
import java.util.Objects;
/**
* Event generated by an Input to indicate error when trying to retrieve data.
* This is not necessarily a fatal event - it's an indication to the AM to retry
* source data generation.
*/
@Public
public final class InputReadErrorEvent extends Event {
/**
* Diagnostics/trace of the error that occurred on the Input's edge.
*/
private final String diagnostics;
/**
* Index of the physical edge on which the error occurred.
*/
private final int index;
/**
* Version of the data on which the error occurred.
*/
private final int version;
/**
* Number of failures.
*/
private final int numFailures;
/**
* Whether this input read error is caused while fetching local file.
*/
private final boolean isLocalFetch;
/**
* Whether this input read error is caused because the fetcher detected a fatal, unrecoverable,
* local file read issue from the shuffle handler.
*/
private final boolean isDiskErrorAtSource;
private InputReadErrorEvent(final String diagnostics, final int index, final int version,
final int numFailures, boolean isLocalFetch, boolean isDiskErrorAtSource) {
super();
this.diagnostics = diagnostics;
this.index = index;
this.version = version;
this.numFailures = numFailures;
this.isLocalFetch = isLocalFetch;
this.isDiskErrorAtSource = isDiskErrorAtSource;
}
public static InputReadErrorEvent create(String diagnostics, int index, int version,
boolean isLocalFetch, boolean isDiskErrorAtSource) {
return create(diagnostics, index, version, 1, isLocalFetch, isDiskErrorAtSource);
}
public static InputReadErrorEvent create(String diagnostics, int index, int version) {
return create(diagnostics, index, version, 1, false, false);
}
/**
* Create an InputReadErrorEvent.
*/
public static InputReadErrorEvent create(final String diagnostics, final int index,
final int version, final int numFailures, boolean isLocalFetch, boolean isDiskErrorAtSource) {
return new InputReadErrorEvent(diagnostics, index, version, numFailures, isLocalFetch,
isDiskErrorAtSource);
}
public String getDiagnostics() {
return diagnostics;
}
public int getIndex() {
return index;
}
public int getVersion() {
return version;
}
/**
* @return number of failures
*/
public int getNumFailures() {
return numFailures;
}
public boolean isLocalFetch() {
return isLocalFetch;
}
public boolean isDiskErrorAtSource() {
return isDiskErrorAtSource;
}
@Override
public int hashCode() {
return Objects.hash(index, version);
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
InputReadErrorEvent that = (InputReadErrorEvent) o;
return index == that.index && version == that.version;
}
}