use of com.netflix.titus.master.eviction.service.quota.QuotaTracker in project titus-control-plane by Netflix.
the class JobQuotaController method consume.
@Override
public ConsumptionResult consume(String taskId) {
if (isLegacy()) {
return LEGACY;
}
Reference taskReference = Reference.task(taskId);
StringBuilder rejectionResponseBuilder = new StringBuilder("MissingQuotas[");
// Check quota trackers first
boolean noQuota = false;
for (QuotaTracker tracker : quotaTrackers) {
EvictionQuota quotaStatus = tracker.getQuota(taskReference);
if (quotaStatus.getQuota() <= 0) {
noQuota = true;
rejectionResponseBuilder.append(tracker.getClass().getSimpleName()).append('=').append(quotaStatus.getMessage()).append(", ");
}
}
if (noQuota) {
rejectionResponseBuilder.setLength(rejectionResponseBuilder.length() - 2);
return ConsumptionResult.rejected(rejectionResponseBuilder.append(']').toString());
}
// Now controllers
for (int i = 0; i < quotaControllers.size(); i++) {
QuotaController<Job<?>> controller = quotaControllers.get(i);
ConsumptionResult result = controller.consume(taskId);
if (!result.isApproved()) {
for (int j = 0; j < i; j++) {
quotaControllers.get(j).giveBackConsumedQuota(taskId);
}
rejectionResponseBuilder.append(controller.getClass().getSimpleName()).append('=').append(result.getRejectionReason().orElse("no quota"));
return ConsumptionResult.rejected(rejectionResponseBuilder.append(']').toString());
}
}
return ConsumptionResult.approved();
}
use of com.netflix.titus.master.eviction.service.quota.QuotaTracker in project titus-control-plane by Netflix.
the class JobQuotaController method buildQuotaTrackers.
@VisibleForTesting
static List<QuotaTracker> buildQuotaTrackers(Job<?> job, V3JobOperations jobOperations, EffectiveJobDisruptionBudgetResolver effectiveDisruptionBudgetResolver, ContainerHealthService containerHealthService, TitusRuntime titusRuntime) {
List<QuotaTracker> quotaTrackers = new ArrayList<>();
DisruptionBudget effectiveBudget = effectiveDisruptionBudgetResolver.resolve(job);
if (!effectiveBudget.getTimeWindows().isEmpty()) {
quotaTrackers.add(new TimeWindowQuotaTracker(effectiveBudget.getTimeWindows(), titusRuntime));
}
DisruptionBudgetPolicy policy = effectiveBudget.getDisruptionBudgetPolicy();
if (policy instanceof AvailabilityPercentageLimitDisruptionBudgetPolicy) {
quotaTrackers.add(UnhealthyTasksLimitTracker.percentageLimit(job, (AvailabilityPercentageLimitDisruptionBudgetPolicy) policy, jobOperations, containerHealthService));
} else if (policy instanceof UnhealthyTasksLimitDisruptionBudgetPolicy) {
quotaTrackers.add(UnhealthyTasksLimitTracker.absoluteLimit(job, (UnhealthyTasksLimitDisruptionBudgetPolicy) policy, jobOperations, containerHealthService));
}
return quotaTrackers;
}
Aggregations