private void configureMemoryPools(NodeMemoryConfig config, long availableMemory)
{
validateHeapHeadroom(config, availableMemory);
maxMemory = new DataSize(availableMemory - config.getHeapHeadroom().toBytes(), BYTE);
checkArgument(
config.getMaxQueryMemoryPerNode().toBytes() <= config.getMaxQueryTotalMemoryPerNode().toBytes(),
"Max query memory per node (%s) cannot be greater than the max query total memory per node (%s).",
QUERY_MAX_MEMORY_PER_NODE_CONFIG,
QUERY_MAX_TOTAL_MEMORY_PER_NODE_CONFIG);
ImmutableMap.Builder<MemoryPoolId, MemoryPool> builder = ImmutableMap.builder();
long generalPoolSize = maxMemory.toBytes();
if (config.isReservedPoolEnabled()) {
builder.put(RESERVED_POOL, new MemoryPool(RESERVED_POOL, config.getMaxQueryTotalMemoryPerNode()));
generalPoolSize -= config.getMaxQueryTotalMemoryPerNode().toBytes();
}
verify(generalPoolSize > 0, "general memory pool size is 0");
builder.put(GENERAL_POOL, new MemoryPool(GENERAL_POOL, new DataSize(generalPoolSize, BYTE)));
this.pools = builder.build();
}