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

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

  <!-- 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>
  <!-- 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" />
    </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 - minimumAllocation is only initialized once and never changed -->
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler" />
    <Field name="minimumAllocation" />
    <Bug pattern="IS2_INCONSISTENT_SYNC" />
  </Match>
  <Match>
    <Class name="org.apache.hadoop.yarn.server.resourcemanager.security.DelegationTokenRenewer"/>
    <Field name="renewalTimer" />
    <Bug code="IS"/>
  </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>

</FindBugsFilter>
