<!--
   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>
  <!-- Ignore PB Generated Code -->
  <Match>
    <Package name="org.apache.hadoop.yarn.proto" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.ipc\.RpcProtos.*" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.yarn.service.AbstractService" />
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER" />
  </Match>

  <!-- Ignore unchecked Event casts -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.nodemanager\.containermanager\.application\.ApplicationImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.nodemanager\.containermanager\.container\.ContainerImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.nodemanager\.containermanager\.localizer\.LocalizedResource.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.nodemanager\.containermanager\.localizer\.ResourceLocalizationService.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.rmapp\.RMAppImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.rmapp\.attempt\.RMAppAttemptImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl$AppRejectedTransition" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.rmcontainer\.RMContainerImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.rmnode\.RMNodeImpl.*" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.RMAppManager.*" />
    <Method name="handle" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.scheduler\.capacity\.CapacityScheduler.*" />
    <Method name="handle" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.resourcemanager\.scheduler\.fifo\.FifoScheduler.*" />
    <Method name="handle" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.nodemanager\.containermanager\.logaggregation\.LogAggregationService.*" />
    <Method name="handle" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.server\.nodemanager\.containermanager\.loghandler\.NonAggregatingLogHandler.*" />
    <Method name="handle" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>


  <!-- Ignore intentional switch fallthroughs -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl" />
    <Method name="finished" />
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ContainerLocalizer" />
    <Method name="localizeFiles" />
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>

  <!-- Ignore some irrelevant serialization warnings -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceRetentionSet$LRUComparator" />
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.exceptions.impl.pb.YarnRemoteExceptionPBImpl" />
    <Field name="builder" />
    <Bug pattern="SE_BAD_FIELD" />
  </Match>
  <Match>
    <Class name="~org\.apache\.hadoop\.yarn\.util\.BuilderUtils.*" />
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.resource.Priority$Comparator" />
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
  </Match>
  <!-- Ignore some irrelevant class name warning -->
  <Match>
    <Class name="org.apache.hadoop.yarn.api.records.SerializedException" />
    <Bug pattern="NM_CLASS_NOT_EXCEPTION" />
  </Match>

  <!-- Inconsistent sync warning - only start() is synchronized-->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.AllocationFileLoaderService" />
    <Field name="allocFile" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <!-- Inconsistent sync warning - minimumAllocation is only initialized once and never changed -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler" />
    <Field name="minimumAllocation" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSSchedulerNode" />
    <Method name="reserveResource" />
    <Bug pattern="BC_UNCONFIRMED_CAST" /> 
  </Match>
  <!-- Inconsistent sync warning - reinitialize read from other queue does not need sync-->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.LeafQueue" />
    <Or>
      <Field name="absoluteCapacity" />
      <Field name="absoluteMaxCapacity" />
      <Field name="acls" />
      <Field name="capacity" />
      <Field name="maxApplications" />
      <Field name="maxApplicationsPerUser" />
      <Field name="maximumCapacity" />
      <Field name="state" />
      <Field name="userLimit" />
      <Field name="userLimitFactor" />
      <Field name="maxAMResourcePerQueuePercent" />
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.ParentQueue" />
    <Or>
      <Field name="absoluteCapacity" />
      <Field name="absoluteMaxCapacity" />
      <Field name="acls" />
      <Field name="capacity" />
      <Field name="maximumCapacity" />
      <Field name="state" />
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <!-- Inconsistent sync warning - scheduleAsynchronously is only initialized once and never changed -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler" />
    <Field name="scheduleAsynchronously" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <!-- Inconsistent sync warning - updateInterval is only initialized once and never changed -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler" />
    <Field name="updateInterval" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <!-- Inconsistent sync warning - callDurationMetrics is only initialized once and never changed -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler" />
    <Field name="fsOpDurations" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>

  <!-- Inconsistent sync warning - numRetries is only initialized once and never changed -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore" />
    <Field name="numRetries" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.security.DelegationTokenRenewer"/>
    <Field name="renewalTimer" />
    <Bug code="IS"/>
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.client.NMClientImpl$NMCommunicator"/>
    <Field name="containerManager" />
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
  </Match>

  <!-- Don't care if putIfAbsent value is ignored -->
  <Match>
    <Package name="org.apache.hadoop.yarn.factories.impl.pb" />
    <Bug pattern="RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED" />
  </Match>

  <!-- Intended System.exit calls -->
  <Match>
    <Class name="org.apache.hadoop.yarn.webapp.Dispatcher$1" />
    <Bug pattern="DM_EXIT" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.webapp.WebApps$Builder" />
    <Bug pattern="DM_EXIT" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.security.DelegationTokenRenewer$DelegationTokenCancelThread" />
    <Bug pattern="DM_EXIT" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.YarnUncaughtExceptionHandler"/>
    <Bug pattern="DM_EXIT"/>
  </Match>

  <!-- AsyncDispatcher will kill the process if there is an error dispatching -->
  <Match>
    <Class name="org.apache.hadoop.yarn.event.AsyncDispatcher" />
    <Method name="dispatch" />
    <Bug pattern="DM_EXIT" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.ResourceManager$SchedulerEventDispatcher$EventProcessor" />
    <Method name="run" />
    <Bug pattern="DM_EXIT" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.NodeManager" />
    <Method name="initAndStartNodeManager" />
    <Bug pattern="DM_EXIT" />
  </Match>
 
  <!-- Ignore heartbeat exception when killing localizer -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ContainerLocalizer" />
    <Method name="localizeFiles" />
    <Bug pattern="DE_MIGHT_IGNORE" />
  </Match>

  <!-- Ignore EI_EXPOSE_REP in PolicyProviders -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.security.authorize.RMPolicyProvider" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.security.authorize.NMPolicyProvider" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>


  <!-- Ignore EI_EXPOSE_REP2 in Log services -->
  <Match>
    <Class name="org.apache.hadoop.yarn.logaggregation.AggregatedLogFormat$LogValue" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  
   <!-- /proc/mounts is always in the same place -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler" />
    <Method name="parseMtab" />
    <Bug pattern="DMI_HARDCODED_ABSOLUTE_FILENAME" />
  </Match>

  <!-- rmClient can be ignored as only code blocks outside of rpc calls need to be synchronized -->
  <Match>
    <Class name="org.apache.hadoop.yarn.client.AMRMClientImpl" />
    <Field name="rmClient" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>

  <!-- Null pointer exception needs to be ignored here as this is never going to occur. -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.LocalResourcesTrackerImpl" />
    <Method name="decrementFileCountForLocalCacheDirectory" />
    <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE" />
  </Match>

  <!-- Null pointer exception needs to be ignored here as this is never going to occur. -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.LocalResourcesTrackerImpl" />
    <Method name="getPathForLocalization" />
    <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE" />
  </Match>

  <!-- This type cast problem will never occur. -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.LocalResourcesTrackerImpl" />
    <Method name="handle" />
    <Bug pattern="BC_UNCONFIRMED_CAST" />
  </Match>

  <!-- Ignore SerializedException does not extend Exception -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.api.records.SerializedException" />
    <Bug pattern="NM_CLASS_NOT_EXCEPTION" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>

  <!-- Multithreaded correctness warnings need to be ignored here as this is for creating the singleton.-->
  <Match>
      <Class name="org.apache.hadoop.yarn.server.resourcemanager.security.authorize.RMPolicyProvider"/>
      <Bug pattern="DC_DOUBLECHECK" />
  </Match>

  <!-- ApplicationClassLoader is deprecated and moved to hadoop-common; ignore
       warning on the identical name as it should be removed later -->
  <Match>
    <Class name="org.apache.hadoop.yarn.util.ApplicationClassLoader"/>
    <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS"/>
  </Match>
</FindBugsFilter>
