class JobQuotaController implements QuotaController<Job<?>> {

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

    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);

}