use of com.netflix.titus.master.eviction.service.quota.job.JobQuotaController in project titus-control-plane by Netflix.
the class TitusQuotasManagerTest method tryConsumeSystemAndJobQuota.
@Test
public void tryConsumeSystemAndJobQuota() {
String taskId = "job1Task1";
String jobQuotaRejectionReason = "Job does not allow any more terminations";
Job<BatchJobExt> job1 = JobGenerator.oneBatchJob().but(withApplicationName("app1Test"));
EvictionConfiguration config1 = mock(EvictionConfiguration.class);
when(config1.getAppsExemptFromSystemDisruptionWindow()).thenReturn("app1.*");
SystemQuotaController systemQuotaController = mock(SystemQuotaController.class);
when(systemQuotaController.consume(taskId)).thenReturn(ConsumptionResult.approved());
JobQuotaController jobQuotaController = mock(JobQuotaController.class);
when(jobQuotaController.consume(taskId)).thenReturn(ConsumptionResult.rejected(jobQuotaRejectionReason));
TitusQuotasManager titusQuotasManager = new TitusQuotasManager(null, null, null, systemQuotaController, config1, null);
ConsumptionResult consumptionResult = titusQuotasManager.tryConsumeSystemAndJobQuota(jobQuotaController, job1, taskId);
assertThat(consumptionResult.isApproved()).isFalse();
assertThat(consumptionResult.getRejectionReason()).isPresent();
assertThat(consumptionResult.getRejectionReason().get()).isEqualTo(jobQuotaRejectionReason);
JobQuotaController jobQuotaController2 = mock(JobQuotaController.class);
when(jobQuotaController2.consume(taskId)).thenReturn(ConsumptionResult.approved());
ConsumptionResult consumptionResult2 = titusQuotasManager.tryConsumeSystemAndJobQuota(jobQuotaController2, job1, taskId);
assertThat(consumptionResult2.isApproved()).isTrue();
String quotaLimitExceededReason = SystemQuotaConsumptionResults.QUOTA_LIMIT_EXCEEDED.getRejectionReason().get();
when(systemQuotaController.consume(taskId)).thenReturn(ConsumptionResult.rejected(quotaLimitExceededReason));
ConsumptionResult consumptionResult3 = titusQuotasManager.tryConsumeSystemAndJobQuota(jobQuotaController2, job1, taskId);
assertThat(consumptionResult3.isApproved()).isFalse();
assertThat(consumptionResult3.getRejectionReason()).isPresent();
assertThat(consumptionResult3.getRejectionReason().get()).isEqualTo(quotaLimitExceededReason);
String outsideSystemWindowReason = SystemQuotaConsumptionResults.OUTSIDE_SYSTEM_TIME_WINDOW.getRejectionReason().get();
when(systemQuotaController.consume(taskId)).thenReturn(ConsumptionResult.rejected(outsideSystemWindowReason));
ConsumptionResult consumptionResult4 = titusQuotasManager.tryConsumeSystemAndJobQuota(jobQuotaController2, job1, taskId);
assertThat(consumptionResult4.isApproved()).isTrue();
}
use of com.netflix.titus.master.eviction.service.quota.job.JobQuotaController in project titus-control-plane by Netflix.
the class TitusQuotasManager method tryConsumeQuota.
public ConsumptionResult tryConsumeQuota(Job<?> job, Task task) {
JobQuotaController jobQuotaController = jobQuotaControllersByJobId.get(job.getId());
if (jobQuotaController == null) {
return UNKNOWN_JOB;
}
String taskId = task.getId();
return tryConsumeSystemAndJobQuota(jobQuotaController, job, taskId);
}
Aggregations