<!--
  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.shuffle.ShuffleUtils"/>
    <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>
</FindBugsFilter>
