Ryu Kobayashi created YARN-11964:
------------------------------------

             Summary: Resource.castToIntSafely() should clamp negative values 
to 0 to prevent propagation of invalid resource counts
                 Key: YARN-11964
                 URL: https://issues.apache.org/jira/browse/YARN-11964
             Project: Hadoop YARN
          Issue Type: Bug
          Components: resourcemanager
            Reporter: Ryu Kobayashi


  h2. Problem

  Resource.castToIntSafely() clamps values exceeding Integer.MAX_VALUE to 
Integer.MAX_VALUE,
  but silently passes through negative values. The method comment states
  "This method assumes resource value is positive", however this assumption
  is not guaranteed in practice.

  When YARN RM temporarily reports negative available resources
  (e.g. due to overload, node failures, or transient resource calculation 
errors),
  the negative value is propagated as-is to callers.

  h2. Root Cause

  The method only guards against positive overflow:

  {code:java}
  protected static int castToIntSafely(long value) {
      if (value > Integer.MAX_VALUE) {
        return Integer.MAX_VALUE;
      }
      return Long.valueOf(value).intValue();
  }
  {code}

  There is no guard for negative values. When a negative long is passed,
  it is returned as a negative int, which can cause unexpected behavior
  in downstream components that assume resource values are non-negative.

  h2. Impact

  Downstream components that rely on this method receiving a non-negative int
  may compute invalid results (e.g. negative slot counts, illegal collection 
sizes)
  when YARN temporarily reports negative available resources.

  h2. Fix

  Return 0 when value < 0, consistent with the existing behavior of
  clamping out-of-range values to a safe boundary:

  {code:java}
  protected static int castToIntSafely(long value) {
      if (value < 0) {
        return 0;
      }
      if (value > Integer.MAX_VALUE) {
        return Integer.MAX_VALUE;
      }
      return Long.valueOf(value).intValue();
  }
  {code}




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to