docs: @Override
    public ResourcePools validateAndMerge(ResourcePools toBeUpdated) {
      Set<ResourceType<?>> resourceTypeSet = toBeUpdated.getResourceTypeSet();
  
      // Ensure update pool types already exist in existing pools
      if(!getResourceTypeSet().containsAll(resourceTypeSet)) {
        throw new IllegalArgumentException("Pools to be updated cannot contain previously undefined resources pools");
      }
      // Can not update OFFHEAP
      if(resourceTypeSet.contains(ResourceType.Core.OFFHEAP)) {
        throw new UnsupportedOperationException("Updating OFFHEAP resource is not supported");
      }
      // Can not update DISK
      if(resourceTypeSet.contains(ResourceType.Core.DISK)) {
        throw new UnsupportedOperationException("Updating DISK resource is not supported");
      }
      for(ResourceType<?> currentResourceType : resourceTypeSet) {
        getPoolForResource(currentResourceType).validateUpdate(toBeUpdated.getPoolForResource(currentResourceType));
      }
  
      Map<ResourceType<?>, ResourcePool> poolsMap = new HashMap<>(pools.size() + resourceTypeSet.size());
      poolsMap.putAll(pools);
      for(ResourceType<?> currentResourceType : resourceTypeSet) {
        ResourcePool poolForResource = toBeUpdated.getPoolForResource(currentResourceType);
        poolsMap.put(currentResourceType, poolForResource);
      }
  
      return new ResourcePoolsImpl(poolsMap);
    }