class JobQuotaController implements QuotaController<Job<?>> {

    @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();
    }

    public  JobQuotaController(Job<?> job,
                              V3JobOperations jobOperations,
                              EffectiveJobDisruptionBudgetResolver effectiveDisruptionBudgetResolver,
                              ContainerHealthService containerHealthService,
                              TitusRuntime titusRuntime);
    private  JobQuotaController(Job<?> newJob,
                               V3JobOperations jobOperations,
                               EffectiveJobDisruptionBudgetResolver effectiveDisruptionBudgetResolver,
                               ContainerHealthService containerHealthService,
                               JobQuotaController previousJobQuotaController,
                               TitusRuntime titusRuntime);

}