private void ensureMaxCapacity() { final IClusterCapacity currentCapacity = resourceManager.getCurrentCapacity(); final IReadOnlyClusterCapacity maximumCapacity = resourceManager.getMaximumCapacity(); if (currentCapacity.getAggregatedCores() > maximumCapacity.getAggregatedCores() || currentCapacity.getAggregatedMemoryByteSize() > maximumCapacity.getAggregatedMemoryByteSize()) { LOGGER.warn("Current cluster available capacity {} is more than its maximum capacity {}", currentCapacity, maximumCapacity); } } }
@Override public JobSubmissionStatus allocate(JobSpecification job) throws HyracksException { IClusterCapacity requiredCapacity = job.getRequiredClusterCapacity(); long reqAggregatedMemoryByteSize = requiredCapacity.getAggregatedMemoryByteSize(); int reqAggregatedNumCores = requiredCapacity.getAggregatedCores(); IReadOnlyClusterCapacity maximumCapacity = resourceManager.getMaximumCapacity(); if (!(reqAggregatedMemoryByteSize <= maximumCapacity.getAggregatedMemoryByteSize() && reqAggregatedNumCores <= maximumCapacity.getAggregatedCores())) { throw HyracksException.create(ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY, requiredCapacity.toString(), maximumCapacity.toString()); } IClusterCapacity currentCapacity = resourceManager.getCurrentCapacity(); long currentAggregatedMemoryByteSize = currentCapacity.getAggregatedMemoryByteSize(); int currentAggregatedAvailableCores = currentCapacity.getAggregatedCores(); if (!(reqAggregatedMemoryByteSize <= currentAggregatedMemoryByteSize && reqAggregatedNumCores <= currentAggregatedAvailableCores)) { return JobSubmissionStatus.QUEUE; } currentCapacity.setAggregatedMemoryByteSize(currentAggregatedMemoryByteSize - reqAggregatedMemoryByteSize); currentCapacity.setAggregatedCores(currentAggregatedAvailableCores - reqAggregatedNumCores); return JobSubmissionStatus.EXECUTE; }