private Optional<Integer> getCpuHardLimit(SingularityTaskRequest task) { if (configuration.getCpuHardLimit().isPresent()) { Optional<Resources> maybeResources = task.getPendingTask().getResources().or(task.getDeploy().getResources()); if (maybeResources.isPresent()) { double requestedCpus = maybeResources.get().getCpus(); int scaledLimit = (int) Math.ceil(requestedCpus * configuration.getCpuHardLimitScaleFactor()); return Optional.of(Math.max(scaledLimit, configuration.getCpuHardLimit().get())); } } return Optional.absent(); }
public SingularityTaskRequestHolder(SingularityTaskRequest taskRequest, Resources defaultResources, Resources defaultCustomExecutorResources) { this.taskRequest = taskRequest; this.executorResources = taskRequest.getDeploy().getCustomExecutorCmd().isPresent() ? taskRequest.getDeploy().getCustomExecutorResources().or(defaultCustomExecutorResources) : Resources.EMPTY_RESOURCES;; this.taskResources = taskRequest.getPendingTask().getResources().or(taskRequest.getDeploy().getResources()).or(defaultResources); this.totalResources = Resources.add(taskResources, executorResources); this.requestedPorts = new ArrayList<>(); if (taskRequest.getDeploy().getContainerInfo().isPresent() && taskRequest.getDeploy().getContainerInfo().get().getDocker().isPresent()) { requestedPorts.addAll(taskRequest.getDeploy().getContainerInfo().get().getDocker().get().getLiteralHostPorts()); } }
if (task.getPendingTask().getResources().isPresent()) { Resources override = task.getPendingTask().getResources().get();
private MaxProbableUsage getMaxProbableUsageForSlave(List<SingularityTaskId> activeTaskIds, Map<String, RequestUtilization> requestUtilizations, String sanitizedHostname) { double cpu = 0; double memBytes = 0; double diskBytes = 0; for (SingularityTaskId taskId : activeTaskIds) { if (taskId.getSanitizedHost().equals(sanitizedHostname)) { if (requestUtilizations.containsKey(taskId.getRequestId())) { RequestUtilization utilization = requestUtilizations.get(taskId.getRequestId()); cpu += getEstimatedCpuUsageForRequest(utilization); memBytes += utilization.getMaxMemBytesUsed(); diskBytes += utilization.getMaxDiskBytesUsed(); } else { Optional<SingularityTask> maybeTask = taskManager.getTask(taskId); if (maybeTask.isPresent()) { Resources resources = maybeTask.get().getTaskRequest().getPendingTask().getResources() .or(maybeTask.get().getTaskRequest().getDeploy().getResources()) .or(defaultResources); cpu += resources.getCpus(); memBytes += resources.getMemoryMb() * SingularitySlaveUsage.BYTES_PER_MEGABYTE; diskBytes += resources.getDiskMb() * SingularitySlaveUsage.BYTES_PER_MEGABYTE; } } } } return new MaxProbableUsage(cpu, memBytes, diskBytes); }
if (task.isPresent()) { cmdLineArgsList = task.get().getTaskRequest().getPendingTask().getCmdLineArgsList(); resources = task.get().getTaskRequest().getPendingTask().getResources();
@Test public void testNotAcceptOfferWithRoleForRequestWithoutRole() { SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.ON_DEMAND); requestResource.postRequest(bldr.build(), singularityUser); deploy("d2"); SingularityRunNowRequest runNowRequest = new SingularityRunNowRequestBuilder() .setResources(new Resources(2, 2, 0)) .build(); requestResource.scheduleImmediately(singularityUser, requestId, runNowRequest); scheduler.drainPendingQueue(); SingularityPendingTask pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5, Optional.of("test-role")))); pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); }
Optional<Resources> maybeResources = Optional.absent(); if (maybeTask.isPresent()) { maybeResources = maybeTask.get().getTaskRequest().getPendingTask().getResources().or(maybeTask.get().getTaskRequest().getDeploy().getResources()); if (maybeResources.isPresent()) { Resources taskResources = maybeResources.get();
@Test public void testAcceptOffersWithRoleForRequestWithRole() { SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.ON_DEMAND); bldr.setRequiredRole(Optional.of("test-role")); requestResource.postRequest(bldr.build(), singularityUser); deploy("d2"); SingularityRunNowRequest runNowRequest = new SingularityRunNowRequestBuilder() .setResources(new Resources(2, 2, 0)) .build(); requestResource.scheduleImmediately(singularityUser, requestId, runNowRequest); scheduler.drainPendingQueue(); SingularityPendingTask pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5))); pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5, Optional.of("test-role")))); SingularityTask task = taskManager.getActiveTasks().get(0); Assert.assertEquals(MesosUtils.getNumCpus(mesosProtosUtils.toResourceList(task.getMesosTask().getResources()), Optional.of("test-role")), 2.0, 0.0); }
@Test public void testCustomResourcesWithRunNowRequest() { SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.ON_DEMAND); requestResource.postRequest(bldr.build(), singularityUser); deploy("d2"); SingularityRunNowRequest runNowRequest = new SingularityRunNowRequestBuilder() .setResources(new Resources(2, 2, 0)) .build(); requestResource.scheduleImmediately(singularityUser, requestId, runNowRequest); scheduler.drainPendingQueue(); SingularityPendingTask pendingTaskWithResourcs = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResourcs.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResourcs.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5, "slave1", "host1", Optional.of("rack1")))); SingularityTask task = taskManager.getActiveTasks().get(0); Assert.assertEquals(MesosUtils.getNumCpus(mesosProtosUtils.toResourceList(task.getMesosTask().getResources()), Optional.<String>absent()), 2.0, 0.0); }
Resources resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01);
private Optional<Integer> getCpuHardLimit(SingularityTaskRequest task) { if (configuration.getCpuHardLimit().isPresent()) { Optional<Resources> maybeResources = task.getPendingTask().getResources().or(task.getDeploy().getResources()); if (maybeResources.isPresent()) { double requestedCpus = maybeResources.get().getCpus(); int scaledLimit = (int) Math.ceil(requestedCpus * configuration.getCpuHardLimitScaleFactor()); return Optional.of(Math.max(scaledLimit, configuration.getCpuHardLimit().get())); } } return Optional.absent(); }
private void relaunchTask(SingularityTask task) { SingularityPendingTask pendingTask = task.getTaskRequest().getPendingTask(); SingularityPendingRequest pendingRequest = new SingularityPendingRequestBuilder() .setRequestId(task.getTaskRequest().getRequest().getId()) .setDeployId(task.getTaskRequest().getDeploy().getId()) .setPendingType(PendingType.RETRY) .setUser(pendingTask.getUser()) .setRunId(pendingTask.getRunId()) .setCmdLineArgsList(pendingTask.getCmdLineArgsList()) .setSkipHealthchecks(pendingTask.getSkipHealthchecks()) .setMessage(pendingTask.getMessage()) .setResources(pendingTask.getResources()) .setS3UploaderAdditionalFiles(pendingTask.getS3UploaderAdditionalFiles()) .setRunAsUserOverride(pendingTask.getRunAsUserOverride()) .setEnvOverrides(pendingTask.getEnvOverrides()) .setExtraArtifacts(pendingTask.getExtraArtifacts()) .setActionId(pendingTask.getActionId()) .setRunAt(pendingTask.getPendingTaskId().getNextRunAt()) .setTimestamp(System.currentTimeMillis()) .build(); requestManager.addToPendingQueue(pendingRequest); }
public SingularityTaskRequestHolder(SingularityTaskRequest taskRequest, Resources defaultResources, Resources defaultCustomExecutorResources) { this.taskRequest = taskRequest; this.executorResources = taskRequest.getDeploy().getCustomExecutorCmd().isPresent() ? taskRequest.getDeploy().getCustomExecutorResources().or(defaultCustomExecutorResources) : Resources.EMPTY_RESOURCES;; this.taskResources = taskRequest.getPendingTask().getResources().or(taskRequest.getDeploy().getResources()).or(defaultResources); this.totalResources = Resources.add(taskResources, executorResources); this.requestedPorts = new ArrayList<>(); if (taskRequest.getDeploy().getContainerInfo().isPresent() && taskRequest.getDeploy().getContainerInfo().get().getDocker().isPresent()) { requestedPorts.addAll(taskRequest.getDeploy().getContainerInfo().get().getDocker().get().getLiteralHostPorts()); } }
if (task.getPendingTask().getResources().isPresent()) { Resources override = task.getPendingTask().getResources().get();
private MaxProbableUsage getMaxProbableUsageForSlave(List<SingularityTaskId> activeTaskIds, Map<String, RequestUtilization> requestUtilizations, String sanitizedHostname) { double cpu = 0; double memBytes = 0; double diskBytes = 0; for (SingularityTaskId taskId : activeTaskIds) { if (taskId.getSanitizedHost().equals(sanitizedHostname)) { if (requestUtilizations.containsKey(taskId.getRequestId())) { RequestUtilization utilization = requestUtilizations.get(taskId.getRequestId()); cpu += getEstimatedCpuUsageForRequest(utilization); memBytes += utilization.getMaxMemBytesUsed(); diskBytes += utilization.getMaxDiskBytesUsed(); } else { Optional<SingularityTask> maybeTask = taskManager.getTask(taskId); if (maybeTask.isPresent()) { Resources resources = maybeTask.get().getTaskRequest().getPendingTask().getResources() .or(maybeTask.get().getTaskRequest().getDeploy().getResources()) .or(defaultResources); cpu += resources.getCpus(); memBytes += resources.getMemoryMb() * SingularitySlaveUsage.BYTES_PER_MEGABYTE; diskBytes += resources.getDiskMb() * SingularitySlaveUsage.BYTES_PER_MEGABYTE; } } } } return new MaxProbableUsage(cpu, memBytes, diskBytes); }
@Test public void testNotAcceptOfferWithRoleForRequestWithoutRole() { SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.ON_DEMAND); requestResource.postRequest(bldr.build(), singularityUser); deploy("d2"); SingularityRunNowRequest runNowRequest = new SingularityRunNowRequestBuilder() .setResources(new Resources(2, 2, 0)) .build(); requestResource.scheduleImmediately(singularityUser, requestId, runNowRequest); scheduler.drainPendingQueue(); SingularityPendingTask pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5, Optional.of("test-role")))); pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); }
@Test public void testAcceptOffersWithRoleForRequestWithRole() { SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.ON_DEMAND); bldr.setRequiredRole(Optional.of("test-role")); requestResource.postRequest(bldr.build(), singularityUser); deploy("d2"); SingularityRunNowRequest runNowRequest = new SingularityRunNowRequestBuilder() .setResources(new Resources(2, 2, 0)) .build(); requestResource.scheduleImmediately(singularityUser, requestId, runNowRequest); scheduler.drainPendingQueue(); SingularityPendingTask pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5))); pendingTaskWithResources = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResources.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResources.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5, Optional.of("test-role")))); SingularityTask task = taskManager.getActiveTasks().get(0); Assert.assertEquals(MesosUtils.getNumCpus(mesosProtosUtils.toResourceList(task.getMesosTask().getResources()), Optional.of("test-role")), 2.0, 0.0); }
@Test public void testCustomResourcesWithRunNowRequest() { SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.ON_DEMAND); requestResource.postRequest(bldr.build(), singularityUser); deploy("d2"); SingularityRunNowRequest runNowRequest = new SingularityRunNowRequestBuilder() .setResources(new Resources(2, 2, 0)) .build(); requestResource.scheduleImmediately(singularityUser, requestId, runNowRequest); scheduler.drainPendingQueue(); SingularityPendingTask pendingTaskWithResourcs = taskManager.getPendingTasks().get(0); Assert.assertTrue(pendingTaskWithResourcs.getResources().isPresent()); Assert.assertEquals(pendingTaskWithResourcs.getResources().get().getCpus(), 2, 0.0); sms.resourceOffers(Arrays.asList(createOffer(5, 5, 5, "slave1", "host1", Optional.of("rack1")))); SingularityTask task = taskManager.getActiveTasks().get(0); Assert.assertEquals(MesosUtils.getNumCpus(mesosProtosUtils.toResourceList(task.getMesosTask().getResources()), Optional.<String>absent()), 2.0, 0.0); }
Resources resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01);
private void relaunchTask(SingularityTask task) { SingularityPendingTask pendingTask = task.getTaskRequest().getPendingTask(); SingularityPendingRequest pendingRequest = new SingularityPendingRequestBuilder() .setRequestId(task.getTaskRequest().getRequest().getId()) .setDeployId(task.getTaskRequest().getDeploy().getId()) .setPendingType(PendingType.RETRY) .setUser(pendingTask.getUser()) .setRunId(pendingTask.getRunId()) .setCmdLineArgsList(pendingTask.getCmdLineArgsList()) .setSkipHealthchecks(pendingTask.getSkipHealthchecks()) .setMessage(pendingTask.getMessage()) .setResources(pendingTask.getResources()) .setS3UploaderAdditionalFiles(pendingTask.getS3UploaderAdditionalFiles()) .setRunAsUserOverride(pendingTask.getRunAsUserOverride()) .setEnvOverrides(pendingTask.getEnvOverrides()) .setExtraArtifacts(pendingTask.getExtraArtifacts()) .setActionId(pendingTask.getActionId()) .setRunAt(pendingTask.getPendingTaskId().getNextRunAt()) .setTimestamp(System.currentTimeMillis()) .build(); requestManager.addToPendingQueue(pendingRequest); }