<!--
   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.
-->

<FindBugsFilter>
     <Match>
       <Package name="org.apache.hadoop.record.compiler.generated" />
     </Match>
     <Match>
       <Bug pattern="EI_EXPOSE_REP" />
     </Match>
     <Match>
       <Bug pattern="EI_EXPOSE_REP2" />
     </Match>
     <Match>
       <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
     </Match>
     <Match>
       <Class name="~.*_jsp" />
       <Bug pattern="DLS_DEAD_LOCAL_STORE" />
     </Match>
     <Match>
       <Class name="~.*_jspx" />
       <Bug pattern="DLS_DEAD_LOCAL_STORE" />
     </Match>
     <Match>
       <Field name="_jspx_dependants" />
       <Bug pattern="UWF_UNWRITTEN_FIELD" />
     </Match>
     <!-- 
       Inconsistent synchronization for Client.Connection.out is
       is intentional to make a connection to be closed instantly. 
     --> 
     <Match>
       <Class name="org.apache.hadoop.ipc.Client$Connection" />
       <Field name="out" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
     </Match>
     <!-- 
       Ignore Cross Scripting Vulnerabilities
     -->
     <Match>
       <Package name="~org.apache.hadoop.mapred.*" />
       <Bug code="XSS" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.taskdetails_jsp" />
       <Bug code="HRS" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.jobdetails_jsp"/>
       <Bug pattern="HRS_REQUEST_PARAMETER_TO_HTTP_HEADER"/>
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.taskstats_jsp"/>
       <Bug pattern="HRS_REQUEST_PARAMETER_TO_HTTP_HEADER"/>
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.jobtasks_jsp"/>
       <Bug pattern="HRS_REQUEST_PARAMETER_TO_HTTP_HEADER"/>
     </Match>
     <!--
       Ignore warnings where child class has the same name as
       super class. Classes based on Old API shadow names from
       new API. Should go off after HADOOP-1.0
     -->
     <Match>
       <Class name="~org.apache.hadoop.mapred.*" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
     </Match>
     <Match>
       <Class name="~org.apache.hadoop.mapred.*" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_INTERFACE" />
     </Match>
     <Match>
       <Class name="~org.apache.hadoop.mapred.lib.aggregate.*" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_INTERFACE" />
     </Match>
     <Match>
       <Class name="~org.apache.hadoop.mapred.join.*" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_INTERFACE" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.SequenceFileInputFilter$Filter" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_INTERFACE" />
     </Match>
     <Match>
       <Class name="~org.apache.hadoop.util.*" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
     </Match>
     <Match>
       <Class name="~org.apache.hadoop.filecache.*" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
     </Match>
     <!--
       Ignore warnings for usage of System.exit. This is
       required and have been well thought out
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.Child$2" />
       <Method name="run" />
       <Bug pattern="DM_EXIT" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.JobTracker" />
       <Method name="addHostToNodeMapping" />
       <Bug pattern="DM_EXIT" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.Task" />
       <Or>
       <Method name="done" />
       <Method name="commit" />
       <Method name="statusUpdate" />
       </Or>
       <Bug pattern="DM_EXIT" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.JobTracker" />
       <Field name="clock" />
       <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.Task$TaskReporter" />
       <Method name="run" />
       <Bug pattern="DM_EXIT" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapreduce.security.token.DelegationTokenRenewal$DelegationTokenCancelThread" />
       <Method name="run" />
       <Bug pattern="DM_EXIT" />
    </Match>
     <!--
       We need to cast objects between old and new api objects
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.OutputCommitter" />
       <Bug pattern="BC_UNCONFIRMED_CAST" />
     </Match>
     <!--
       We intentionally do the get name from the inner class
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.TaskTracker$MapEventsFetcherThread" />
       <Method name="run" />
       <Bug pattern="IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.FileOutputCommitter" />
       <Or>
       <Method name="commitJob" />
       <Method name="recoverTask" />
       </Or>
       <Bug pattern="NM_WRONG_PACKAGE" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.OutputCommitter" />
       <Or>
       <Method name="abortJob" />
       <Method name="commitJob" />
       <Method name="cleanupJob" />
       <Method name="recoverTask" />
       </Or>
       <Bug pattern="NM_WRONG_PACKAGE_INTENTIONAL" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.TaskCompletionEvent" />
       <Or>
       <Method name="setTaskStatus" />
       <Method name="setTaskAttemptId" />
       </Or>
       <Bug pattern="NM_WRONG_PACKAGE" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.lib.db.DBInputFormat$DBRecordReader" />
       <Method name="next" />
       <Bug pattern="NM_WRONG_PACKAGE_INTENTIONAL" />
     </Match>
     <!--
       Ignoring this warning as resolving this would need a non-trivial change in code 
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorBaseDescriptor" />
       <Method name="configure" />
       <Field name="maxNumItems" />
       <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
     </Match>
     <!--
       Comes from org.apache.jasper.runtime.ResourceInjector. Cannot do much.
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.jobqueue_005fdetails_jsp" />
       <Field name="_jspx_resourceInjector" />
       <Bug pattern="SE_BAD_FIELD" />
     </Match>
     <!--
       Storing textInputFormat and then passing it as a parameter. Safe to ignore.
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorJob" />
       <Method name="createValueAggregatorJob" />
       <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
     </Match>
     <!--
       Can remove this after the upgrade to findbugs1.3.8
     -->
     <Match>
       <Class name="org.apache.hadoop.mapred.lib.db.DBInputFormat" />
       <Method name="getSplits" />
       <Bug pattern="DLS_DEAD_LOCAL_STORE" />
     </Match>
     <!--
       org.apache.hadoop.mapred.IndexCache is thread-safe. It does not need
       synchronous access. 
      -->
     <Match>
       <Class name="org.apache.hadoop.mapred.TaskTracker" />
       <Field name="indexCache" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
     </Match>
    <!--
      None of the following variables should be referenced by any thread
      but the collection thread in MapTask
    -->
     <Match>
       <Class name="org.apache.hadoop.mapred.MapTask$MapOutputBuffer" />
       <Field name="kvindex" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.MapTask$MapOutputBuffer" />
       <Field name="bufferRemaining" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.MapTask$MapOutputBuffer" />
       <Field name="equator" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
     </Match>

    <!-- This is spurious. -->
    <Match>
      <Class name="org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread" />
      <Method name="run" />
      <Bug pattern="UL_UNRELEASED_LOCK_EXCEPTION_PATH" />
    </Match>

     <Match>
       <Class name="org.apache.hadoop.mapreduce.task.reduce.MergeThread" />
       <Field name="inputs" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
     </Match>
     <Match>
       <Class name="org.apache.hadoop.mapred.JobTracker" />
       <Method name="updateTaskTrackerStatus" />
       <Bug pattern="DLS_DEAD_LOCAL_STORE" />
     </Match>

    <!--
     This class is unlikely to get subclassed, so ignore
    -->
     <Match>
       <Class name="org.apache.hadoop.mapreduce.task.reduce.MergeManager" />
       <Bug pattern="SC_START_IN_CTOR" />
     </Match>

    <!--
      Do not bother if equals is not implemented. We will not need it here
    -->
     <Match>
      <Class name="org.apache.hadoop.mapreduce.task.reduce.ShuffleScheduler$Penalty" />
      <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.mapred.Task" />
       <Method name="reportFatalError" />
       <Bug pattern="DM_EXIT" />
     </Match>

     <!-- 
        core changes 
     -->
     <Match>
       <Class name="~org.apache.hadoop.*" />
       <Bug code="MS" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.fs.FileSystem" />
       <Method name="checkPath" />
       <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.fs.kfs.KFSOutputStream" />
       <Field name="path" />
       <Bug pattern="URF_UNREAD_FIELD" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.fs.kfs.KosmosFileSystem" />
       <Method name="initialize" />
       <Bug pattern="DM_EXIT" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.io.Closeable" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_INTERFACE" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.security.AccessControlException" />
       <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.record.meta.Utils" />
       <Method name="skip" />
       <Bug pattern="BC_UNCONFIRMED_CAST" />
     </Match>

     <!--
        The compareTo method is actually a dummy method that just
        throws excpetions. So, no need to override equals. Ignore
     -->
     <Match>
       <Class name="org.apache.hadoop.record.meta.RecordTypeInfo" />
       <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.util.ProcfsBasedProcessTree" />
       <Bug pattern="DMI_HARDCODED_ABSOLUTE_FILENAME" />
     </Match>

     <!--
       Streaming, Examples
     -->
     <Match>
       <Class name="org.apache.hadoop.streaming.StreamUtil$TaskId" />
       <Bug pattern="URF_UNREAD_FIELD" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.examples.DBCountPageView" />
       <Method name="verify" />
       <Bug pattern="OBL_UNSATISFIED_OBLIGATION" />
     </Match>

     <Match>
       <Class name="org.apache.hadoop.examples.ContextFactory" />
       <Method name="setAttributes" />
       <Bug pattern="OBL_UNSATISFIED_OBLIGATION" />
     </Match>

    <Match>
       <Class name="org.apache.hadoop.mapred.TaskScheduler$QueueRefresher" />
       <Bug pattern="SIC_INNER_SHOULD_BE_STATIC" />
    </Match>

    <Match>
      <Class name="org.apache.hadoop.examples.terasort.TeraInputFormat$1" />
      <Method name="run" />
      <Bug pattern="DM_EXIT" />
    </Match>
    <Match>
      <Class name="org.apache.hadoop.examples.terasort.TeraOutputFormat$TeraOutputCommitter"/>
      <Bug pattern="NM_WRONG_PACKAGE_INTENTIONAL" />
    </Match>
    <Match>
      <Class name="org.apache.hadoop.examples.terasort.Unsigned16" />
      <Method name="getHexDigit"/>
      <Bug pattern="ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT" />
     </Match>

     <!-- 
	   False positive of FindBugs complaining that initializationPoller and
	   started were accessed through
	   CapacitySchedulerQueueRefresher.refreshQueues without explicitly holding
	   the lock of CapacityTaskScheduler. The lock is in fact acquired by
	   JobTracker prior to calling QueueManager.refereshQueues - this is
	   necessary to ensure the order of locking (TaskScheduler ->
	   QueueManager).
     --> 
    <Match>
       <Class name="org.apache.hadoop.mapred.CapacityTaskScheduler" />
       <Field name="initializationPoller" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
    </Match>
    <Match>
       <Class name="org.apache.hadoop.mapred.CapacityTaskScheduler" />
       <Field name="started" />
       <Bug pattern="IS2_INCONSISTENT_SYNC" />
    </Match>
  
   <!-- Yarn excludes -->
  <Match>
    <Class name="org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl" />
    <Method name="computeSlotMillis" />
    <Bug pattern="DB_DUPLICATE_BRACHES" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.mapreduce.v2.app.MRAppMaster$1" />
    <Bug pattern="DM_EXIT" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner" />
    <Bug pattern="DM_EXIT" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.mapreduce\.v2\.app\.job\.impl\.TaskImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>

  <Match>
    <Class name="~org\.apache\.hadoop\.mapreduce\.v2\.app\.job\.impl\.JobImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.mapreduce\.v2\.app\.job\.impl\.TaskAttemptImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.mapreduce\.v2\.app\.recover\.RecoveryService" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>

  <Match>
    <Class name="~org\.apache\.hadoop\.mapreduce\.v2\.app\.rm\.RMContainerAllocator" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl" />
    <Method name="computeSlotMillis" />
   <Bug pattern="DB_DUPLICATE_BRANCHES" />
  </Match>

   <Match>
    <Package name="org.apache.hadoop.yarn.proto" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.mapreduce\.v2\.proto.*" />
  </Match>
  
   <Match>
     <Class name="org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator" />
      <Field name="mapResourceReqt" />
     <Bug pattern="IS2_INCONSISTENT_SYNC" />
   </Match>
  
   <Match>
     <Class name="org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator" />
      <Field name="reduceResourceReqt" />
     <Bug pattern="IS2_INCONSISTENT_SYNC" />
   </Match>
   <!--
     The above 2 fields are accessed locally and only via methods that are synchronized. 
     -->
 
   <Match>
     <Class name="org.apache.hadoop.mapred.ShuffleHandler" />
      <Field name="sslFileBufferSize" />
     <Bug pattern="IS2_INCONSISTENT_SYNC" />
   </Match> 
 </FindBugsFilter>
