private void updateQueueStatus(CeActivityDto.Status status, long executionTimeInMs) { if (status == CeActivityDto.Status.SUCCESS) { queueStatus.addSuccess(executionTimeInMs); } else { queueStatus.addError(executionTimeInMs); } }
@Override public long getErrorCount() { return queueStatus.getErrorCount(); }
@Override public long getInProgressCount() { return queueStatus.getInProgressCount(); }
@Test public void remove_updates_queueStatus_failure_even_if_task_does_not_exist_in_DB() { CEQueueStatus queueStatusMock = mock(CEQueueStatus.class); CeTask task = submit(CeTaskTypes.REPORT, newProjectDto("PROJECT_1")); db.getDbClient().ceQueueDao().deleteByUuid(db.getSession(), task.getUuid()); db.commit(); InternalCeQueueImpl underTest = new InternalCeQueueImpl(system2, db.getDbClient(), null, queueStatusMock, null, null); try { underTest.remove(task, CeActivityDto.Status.FAILED, null, null); fail("remove should have thrown a IllegalStateException"); } catch (IllegalStateException e) { verify(queueStatusMock).addError(anyLong()); } }
@Test public void remove_updates_queueStatus_success_even_if_task_does_not_exist_in_DB() { CEQueueStatus queueStatus = mock(CEQueueStatus.class); CeTask task = submit(CeTaskTypes.REPORT, newProjectDto("PROJECT_1")); db.getDbClient().ceQueueDao().deleteByUuid(db.getSession(), task.getUuid()); db.commit(); InternalCeQueueImpl underTest = new InternalCeQueueImpl(system2, db.getDbClient(), null, queueStatus, null, null); try { underTest.remove(task, CeActivityDto.Status.SUCCESS, null, null); fail("remove should have thrown a IllegalStateException"); } catch (IllegalStateException e) { verify(queueStatus).addSuccess(anyLong()); } }
@Override public long getSuccessCount() { return queueStatus.getSuccessCount(); }
@Override public long getProcessingTime() { return queueStatus.getProcessingTime(); }
@Override public long getPendingCount() { return queueStatus.getPendingCount(); }
@Override public Optional<CeTask> peek(String workerUuid) { requireNonNull(workerUuid, "workerUuid can't be null"); if (computeEngineStatus.getStatus() != ComputeEngineStatus.Status.STARTED || getWorkersPauseStatus() != WorkersPauseStatus.RESUMED) { return Optional.empty(); } try (DbSession dbSession = dbClient.openSession(false)) { CeQueueDao ceQueueDao = dbClient.ceQueueDao(); int i = ceQueueDao.resetToPendingForWorker(dbSession, workerUuid); if (i > 0) { dbSession.commit(); LOG.debug("{} in progress tasks reset for worker uuid {}", i, workerUuid); } Optional<CeQueueDto> opt = ceQueueDao.peek(dbSession, workerUuid); if (opt.isPresent()) { CeQueueDto taskDto = opt.get(); Map<String, ComponentDto> componentsByUuid = loadComponentDtos(dbSession, taskDto); Map<String, String> characteristics = dbClient.ceTaskCharacteristicsDao().selectByTaskUuids(dbSession, singletonList(taskDto.getUuid())).stream() .collect(uniqueIndex(CeTaskCharacteristicDto::getKey, CeTaskCharacteristicDto::getValue)); CeTask task = convertToTask(dbSession, taskDto, characteristics, ofNullable(taskDto.getComponentUuid()).map(componentsByUuid::get).orElse(null), ofNullable(taskDto.getMainComponentUuid()).map(componentsByUuid::get).orElse(null)); queueStatus.addInProgress(); return Optional.of(task); } return Optional.empty(); } }
@Override public ProtobufSystemInfo.Section toProtobuf() { ProtobufSystemInfo.Section.Builder builder = ProtobufSystemInfo.Section.newBuilder(); builder.setName("Compute Engine Tasks"); builder.addAttributesBuilder().setKey("Pending").setLongValue(getPendingCount()).build(); builder.addAttributesBuilder().setKey("In Progress").setLongValue(getInProgressCount()).build(); builder.addAttributesBuilder().setKey("Processed With Error").setLongValue(getErrorCount()).build(); builder.addAttributesBuilder().setKey("Processed With Success").setLongValue(getSuccessCount()).build(); builder.addAttributesBuilder().setKey("Processing Time (ms)").setLongValue(getProcessingTime()).build(); builder.addAttributesBuilder().setKey("Worker Count").setLongValue(getWorkerCount()).build(); builder.addAttributesBuilder().setKey("Max Worker Count").setLongValue(getWorkerMaxCount()).build(); builder.addAttributesBuilder().setKey("Workers Paused").setBooleanValue(queueStatus.areWorkersPaused()).build(); return builder.build(); } }
@Override public long getSuccessCount() { return queueStatus.getSuccessCount(); }
@Override public long getProcessingTime() { return queueStatus.getProcessingTime(); }
@Override public long getPendingCount() { return queueStatus.getPendingCount(); }
@Override public Optional<CeTask> peek(String workerUuid) { requireNonNull(workerUuid, "workerUuid can't be null"); if (computeEngineStatus.getStatus() != ComputeEngineStatus.Status.STARTED) { return Optional.empty(); } try (DbSession dbSession = dbClient.openSession(false)) { CeQueueDao ceQueueDao = dbClient.ceQueueDao(); int i = ceQueueDao.resetToPendingForWorker(dbSession, workerUuid); if (i > 0) { LOG.debug("{} in progress tasks reset for worker uuid {}", i, workerUuid); } Optional<CeQueueDto> dto = ceQueueDao.peek(dbSession, workerUuid, MAX_EXECUTION_COUNT); CeTask task = null; if (dto.isPresent()) { task = loadTask(dbSession, dto.get()); queueStatus.addInProgress(); } return Optional.ofNullable(task); } }
private void updateQueueStatus(CeActivityDto.Status status, CeActivityDto activityDto) { Long startedAt = activityDto.getStartedAt(); if (startedAt == null) { return; } activityDto.setExecutedAt(system2.now()); long executionTimeInMs = activityDto.getExecutedAt() - startedAt; activityDto.setExecutionTimeMs(executionTimeInMs); if (status == CeActivityDto.Status.SUCCESS) { queueStatus.addSuccess(executionTimeInMs); } else { queueStatus.addError(executionTimeInMs); } }
@Override public long getInProgressCount() { return queueStatus.getInProgressCount(); }
@Override public long getErrorCount() { return queueStatus.getErrorCount(); }