<!--
  Licensed 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. See accompanying LICENSE file.
-->
<FindBugsFilter>

  <Match>
    <Class name="org.apache.tez.dag.app.rm.node.AMNodeTracker" />
    <Or>
      <Field name="blacklistDisablePercent" />
      <Field name="maxTaskFailuresPerNode" />
      <Field name="nodeUpdatesRescheduleEnabled" />
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.recovery\.records\.RecoveryProtos\$.*Proto"/>
    <Field name="unknownFields"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.recovery\.records\.RecoveryProtos\$.*Proto"/>
    <Field name="PARSER"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.recovery\.records\.RecoveryProtos\$.*Proto\$Builder"/>
    <Method name="maybeForceBuilderInitialization"/>
    <Bug pattern="UCF_USELESS_CONTROL_FLOW"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.dag\.impl\.DAGImpl\$.*"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.dag\.impl\.TaskImpl\$.*"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.dag\.impl\.TaskAttemptImpl\$.*"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.dag\.impl\.VertexImpl\$.*"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.rm\.container\.AMContainerImpl\$.*"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.rm\.node\.AMNodeImpl\$.*"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.dag\.speculation\.legacy\.LegacySpeculator"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.rm\.node\.AMNodeTracker"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.dag\.app\.rm\.TaskSchedulerEventHandler"/>
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.app.rm.TaskSchedulerAppCallbackWrapper"/>
    <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster$DAGAppMasterShutdownHook"/>
    <Method name="run"/>
    <Bug pattern="WA_NOT_IN_LOOP"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster"/>
    <Method name="handle" params="org.apache.tez.dag.app.dag.event.DAGAppMasterEvent" returns="void"/>
    <Bug pattern="SF_SWITCH_NO_DEFAULT"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster"/>
    <Method name="&lt;init&gt;"/>
    <Bug pattern="EI_EXPOSE_REP2"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.utils.TaskSpecificLaunchCmdOption"/>
    <Method name="getTaskSpecificLogParams"/>
    <Field name="tsLogParams"/>
    <Bug pattern="EI_EXPOSE_REP"/>
  </Match>

  <!-- TEZ-1952 -->
  <Match>
    <Class name="org.apache.tez.dag.app.dag.impl.Edge"/>
    <Or>
      <Field name="edgeProperty"/>
      <Field name="onDemandRouting"/>
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <!-- TEZ-1953 -->
  <Match>
    <Class name="org.apache.tez.dag.app.dag.impl.VertexImpl"/>
    <Field name="groupInputSpecList"/>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <!-- TEZ-1954 -->
  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster"/>
    <Or>
      <Field name="context"/>
      <Field name="currentDAG"/>
      <Field name="state"/>
      <Field name="taskSchedulerEventHandler"/>
      <Field name="versionMismatch"/>
      <Field name="versionMismatchDiagnostics"/>
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <!-- TEZ-1955 -->
  <Match>
    <Class name="org.apache.tez.dag.app.rm.TaskSchedulerEventHandler"/>
    <Field name="taskScheduler"/>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <!-- TEZ-1956 -->
  <Match>
    <Class name="org.apache.tez.dag.app.rm.YarnTaskSchedulerService"/>
    <Or>
      <Field name="delayedContainerManager"/>
      <Field name="heartbeatAtLastPreemption"/>
      <Field name="localitySchedulingDelay"/>
      <Field name="preemptionPercentage"/>
      <Field name="shouldReuseContainers"/>
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <!-- TEZ-1957 -->
  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster$DAGAppMasterShutdownHandler"/>
    <Method name="shutdown" params="boolean" returns="void"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>

  <!-- TEZ-1957 -->
  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster$DAGAppMasterShutdownHandler$AMShutdownRunnable"/>
    <Method name="run"/><Field name="shutdownHandlerRunning"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>

  <!-- TEZ-1957 -->
  <Match>
    <Class name="org.apache.tez.dag.app.DAGAppMaster$DAGAppMasterShutdownHook"/>
    <Method name="run"/><Field name="shutdownHandlerRunning"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>

  <!-- TEZ-1958 -->
  <Match>
    <Class name="org.apache.tez.dag.app.rm.LocalTaskSchedulerService$AsyncDelegateRequestHandler"/>
    <Method name="addDeallocateTaskRequest" params="java.lang.Object" returns="boolean"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>

  <!-- TEZ-1958 -->
  <Match>
    <Class name="org.apache.tez.dag.app.rm.LocalTaskSchedulerService$AsyncDelegateRequestHandler"/>
    <Method name="run"/><Field name="taskRequestQueue"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>

  <!-- TEZ-1959 -->
  <Match>
    <Class name="org.apache.tez.dag.app.rm.YarnTaskSchedulerService$DelayedContainerManager"/>
    <Method name="run"/><Field name="drainedDelayedContainersForTest"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>

  <!-- TEZ-1981 -->
  <Match>
    <Class name="org.apache.tez.dag.app.dag.TaskAttempt$TaskAttemptStatus"/>
    <Field name="id"/>
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/>
  </Match>

  <!-- TEZ-1981 -->
  <Match>
    <Class name="org.apache.tez.dag.app.dag.TaskAttempt$TaskAttemptStatus"/>
    <Field name="state"/>
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/>
  </Match>

  <!-- TEZ-2552 -->
  <Match>
    <Class name="org.apache.tez.dag.app.dag.impl.TaskAttemptImpl"/>
    <Or>
      <Field name="MAX_ALLOWED_OUTPUT_FAILURES_FRACTION"/>
      <Field name="MAX_ALLOWED_OUTPUT_FAILURES"/>
      <Field name="MAX_ALLOWED_TIME_FOR_TASK_READ_ERROR_SEC"/>
    </Or>
    <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD"/>
  </Match>

</FindBugsFilter>
