While doing tests, there're a couple of issues:
1) When use ProfileCapability#getProfileCapabilityOverride, it does overwrite of whatever specified in resource-profiles.json when value >= 0. Which is different from javadocs of ProfileCapability
For example, if you have a resource profile "small" that maps to <4096M, 2 cores, 1 gpu> and you set the capability override to <8192M, 0 cores, 0 gpu>, then the actual resource allocation on the ResourceManager will be <8192M, 2 cores, 1 gpu>
To me, the correct behavior should do overwrite when value > 0. The reason is, by default resource value will be set to 0, For example, assume we have a profile "a" = (mem=3, vcore=5, res_1=7), and create a capability-overwrite (capability = new resource(8). The final result should be (mem=8, vcore=5, res_1=7), instead of (mem=8, vcore=0, res_1=0).
2) ResourceProfileManager now loads minimum/maximum profile from config file (resource-profiles.json), to me this is not correct because minimum/maximum allocation for each resource types are already specified inside resource-types.xml. We should always use ResourceUtils#getResourceTypesMinimum/MaximumAllocation to get from resource-types.xml and yarn-site.xml. This value will be added to profiles so client can get these configs.