<!--
  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.runtime.library.common.shuffle.orderedgrouped.ShuffleScheduler$Penalty"/>
    <Method name="compareTo" params="java.lang.Object" returns="int"/>
    <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS"/>
  </Match>


  <Match>
    <Class name="org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$SpanIterator"/>
    <Method name="compareTo" params="org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter$SpanIterator" returns="int"/>
    <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS"/>
  </Match>


  <Match>
    <Class name="org.apache.tez.runtime.library.common.comparator.TezBytesComparator"/>
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE"/>
  </Match>


  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.orderedgrouped.MapOutput$MapOutputComparator"/>
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE"/>
  </Match>


  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.orderedgrouped.InMemoryReader"/>
    <Method name="&lt;init&gt;"/>
    <Field name="buffer"/>
    <Bug pattern="EI_EXPOSE_REP2"/>
  </Match>


  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.Fetcher"/>
    <Method name="shutdownInternal" params="boolean" returns="void"/><Field name="isShutDown"/>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>


  <Match>
    <Class name="org.apache.tez.runtime.library.common.comparator.TezBytesComparator"/>
    <Method name="getProxy" params="org.apache.hadoop.io.BytesWritable" returns="int"/>
    <Bug pattern="SF_SWITCH_FALLTHROUGH"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.sort.impl.dflt.DefaultSorter"/>
    <Method name="&lt;init&gt;"/>
    <Bug pattern="SC_START_IN_CTOR"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.Constants"/>
    <Field name="MERGED_OUTPUT_PREFIX"/>
    <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.orderedgrouped.FetcherOrderedGrouped"/>
    <Method name="setupConnection" params="org.apache.tez.runtime.library.common.shuffle.orderedgrouped.MapHost, java.util.List" returns="boolean"/>
    <Bug pattern="BC_VACUOUS_INSTANCEOF"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.Fetcher"/>
    <Method name="setupConnection" params="java.util.List" returns="org.apache.tez.runtime.library.common.shuffle.Fetcher$HostFetchResult"/>
    <Bug pattern="BC_VACUOUS_INSTANCEOF"/>
  </Match>

  <!-- TODO This needs more looking into -->
  <Match>
    <Class name="org.apache.tez.runtime.library.common.sort.impl.dflt.DefaultSorter"/>
    <Field name="kvindex"/>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.runtime\.library\.shuffle\.impl\.ShuffleUserPayloads\$.*Proto"/>
    <Field name="PARSER"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.runtime\.library\.shuffle\.impl\.ShuffleUserPayloads\$.*Proto"/>
    <Field name="unknownFields"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>

  <Match>
    <Class name="~org\.apache\.tez\.runtime\.library\.shuffle\.impl\.ShuffleUserPayloads\$.*Proto\$Builder"/>
    <Method name="maybeForceBuilderInitialization"/>
    <Bug pattern="UCF_USELESS_CONTROL_FLOW"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.orderedgrouped.ShuffleScheduler"/>
    <Method name="close" params="" returns="void"/>
    <Bug pattern="NN_NAKED_NOTIFY"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.TezRuntimeUtils"/>
    <Method name="getHttpConnectionParams" params="org.apache.hadoop.conf.Configuration" return="org.apache.tez.http.HttpConnectionParams"/>
    <Bug pattern="DC_PARTIALLY_CONSTRUCTED"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.cartesianproduct.CartesianProductUserPayload$CartesianProductConfigProto"/>
    <Field name="unknownFields"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.cartesianproduct.CartesianProductUserPayload$CartesianProductConfigProto"/>
    <Field name="PARSER"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.cartesianproduct.CartesianProductUserPayload$CartesianProductConfigProto$Builder"/>
    <Method name="maybeForceBuilderInitialization"/>
    <Bug pattern="UCF_USELESS_CONTROL_FLOW"/>
  </Match>

  <Match>
    <Bug pattern="EI_EXPOSE_REP"/>
    <Or>
      <Class name="org.apache.tez.runtime.library.common.sort.impl.ExteralSorter" />
      <Method name="getPartitionStats"/>
      <Field name="partitionStats"/>
    </Or>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.library.vertexmanager.ShuffleVertexManagerBase"/>
    <Or>
      <Field name="bipartiteSources"/>
      <Field name="numBipartiteSourceTasksCompleted"/>
      <Field name="totalNumBipartiteSourceTasks"/>
      <Field name="totalTasksToSchedule"/>
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$FairShuffleEdgeManagerConfigPayloadProto"/>
    <Field name="unknownFields"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$FairShuffleEdgeManagerDestinationTaskPropProto"/>
    <Field name="unknownFields"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$RangeProto"/>
    <Field name="unknownFields"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$FairShuffleEdgeManagerConfigPayloadProto"/>
    <Field name="PARSER"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match> 
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$FairShuffleEdgeManagerDestinationTaskPropProto"/>
    <Field name="PARSER"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match>   
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$RangeProto"/>
    <Field name="PARSER"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.dag.library.vertexmanager.FairShuffleUserPayloads$RangeProto$Builder"/>
    <Method name="maybeForceBuilderInitialization"/>
    <Bug pattern="UCF_USELESS_CONTROL_FLOW"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.sort.impl.IFile$Reader"/>
    <Field name="MAX_BUFFER_SIZE"/>
    <Bug pattern="MS_SHOULD_BE_FINAL"/>
  </Match>

  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.MemoryFetchedInput"/>
    <Method name="getBytes"/>
    <Bug pattern="EI_EXPOSE_REP"/>
  </Match>

  <!-- TEZ-4203 -->
  <Match>
    <Class name="org.apache.tez.runtime.library.common.shuffle.orderedgrouped.MergeThread"/>
    <Field name="shuffleSchedulerThread"/>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>
</FindBugsFilter>
