<!--
  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="nodeBlacklistingEnabled" />
    </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.node.PerSourceNodeTracker" />
    <Bug pattern="BC_UNCONFIRMED_CAST"/>
  </Match>

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

  <Match>
    <Class name="org.apache.tez.dag.app.launcher.ContainerLauncherManager" />
    <Method name="handle" params="org.apache.tez.dag.app.rm.ContainerLauncherEvent" returns="void" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.app.rm.TaskSchedulerContextImplWrapper"/>
    <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="taskSchedulerManager"/>
      <Field name="versionMismatch"/>
      <Field name="versionMismatchDiagnostics"/>
      <Field name="containers"/>
      <Field name="currentRecoveryDataDir"/>
      <Field name="execService"/>
      <Field name="historyEventHandler"/>
      <Field name="nodes"/>
      <Field name="recoveryEnabled"/>
      <Field name="isLocal"/>
    </Or>
    <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"/>
    </Or>
    <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD"/>
  </Match>

</FindBugsFilter>
