Zhu Zhu created FLINK-14594: ------------------------------- Summary: Fix matching logics of ResourceSpec/ResourceProfile/Resource considering double values Key: FLINK-14594 URL: https://issues.apache.org/jira/browse/FLINK-14594 Project: Flink Issue Type: Sub-task Components: Runtime / Coordination Affects Versions: 1.10.0 Reporter: Zhu Zhu Fix For: 1.10.0
There are resources of double type values, like cpuCores in ResourceSpec/ResourceProfiles or all extended resources. These values can be generated via a merge or subtract, so that there can be small deltas. Currently, in resource matching, these resources are matched without considering the deltas, which may result in issues as below: 1. A shared slot cannot fulfill a slot request even if it should be able to (because it is possible that {{(d1 + d2) - d1 < d2}} for double values) 2. if a shared slot is used up, an unexpected error may occur when calculating its remaining resources in SlotSharingManager#listResolvedRootSlotInfo -> ResourceProfile#subtract 3. an unexpected error may happen when releasing a single task slot from a shared slot (in ResourceProfile#subtract) To solve this issue, I'd propose to: 1. Introduce a ResourceValue which stores a double value and its acceptable precision (the same kind of resource should use the same precision). It provides {{compareTo}} method, in which two ResourceValues are considered equal if the subtracted abs does not exceed the precision. It also provides merge/subtract/validation operations. 2. ResourceSpec/ResourceProfile uses ResourceValue for cpuCores and fix related logics(ctor/validation/subtract/matching). The usages of {{equals}} should be replaced with another method {{hasSameResources}} which considers the precision. 3. Resource uses ResourceValue to store its value. Also fix related logics. cc [~trohrmann] [~azagrebin] [~xintongsong] -- This message was sent by Atlassian Jira (v8.3.4#803005)