private void refreshTaskDefs() { try { Map<String, TaskDef> map = new HashMap<>(); getAllTaskDefs().forEach(taskDef -> map.put(taskDef.getName(), taskDef)); this.taskDefCache = map; logger.debug("Refreshed task defs " + this.taskDefCache.size()); } catch (Exception e){ Monitors.error(className, "refreshTaskDefs"); logger.error("refresh TaskDefs failed ", e); } }
@VisibleForTesting private List<Message> receiveMessages() { try { List<Message> messages = queueDAO.pollMessages(queueName, pollCount, longPollTimeout); Monitors.recordEventQueueMessagesProcessed(QUEUE_TYPE, queueName, messages.size()); return messages; } catch (Exception exception) { logger.error("Exception while getting messages from queueDAO", exception); Monitors.recordObservableQMessageReceivedErrors(QUEUE_TYPE); } return new ArrayList<>(); }
void recordCassandraDaoEventRequests(String action, String event) { Monitors.recordDaoEventRequests(DAO_NAME, action, event); }
Monitors.recordTaskPoll(taskName); logger.debug("Polling for {}, got {} tasks", taskName, polledTaskIds.size()); for(String taskId : polledTaskIds) { Monitors.error(className, "pollAndExecute"); logger.error("Error executing system task:{}", taskName, e);
if(current >= limit) { logger.info("Task execution count limited. task - {}:{}, limit: {}, current: {}", task.getTaskId(), task.getTaskDefName(), limit, current); Monitors.recordTaskConcurrentExecutionLimited(task.getTaskDefName(), limit); return true; .filter(id -> !dynoClient.sismember(inProgressKey, id)) .forEach(id2 -> dynoClient.zrem(rateLimitKey, id2)); Monitors.recordTaskRateLimited(task.getTaskDefName(), limit);
void recordRedisDaoPayloadSize(String action, int size, String taskType, String workflowType) { Monitors.recordDaoPayloadSize(DAO_NAME, action, StringUtils.defaultIfBlank(taskType,""), StringUtils.defaultIfBlank(workflowType,""), size); } }
void recordRedisDaoRequests(String action, String taskType, String workflowType) { Monitors.recordDaoRequests(DAO_NAME, action, taskType, workflowType); }
@Override public boolean exceedsInProgressLimit(Task task) { Optional<TaskDef> taskDefinition = task.getTaskDefinition(); if (!taskDefinition.isPresent()) { return false; } TaskDef taskDef = taskDefinition.get(); int limit = taskDef.concurrencyLimit(); if (limit <= 0) { return false; } long current = getInProgressTaskCount(task.getTaskDefName()); if (current >= limit) { Monitors.recordTaskConcurrentExecutionLimited(task.getTaskDefName(), limit); return true; } logger.info("Task execution count for {}: limit={}, current={}", task.getTaskDefName(), limit, getInProgressTaskCount(task.getTaskDefName())); String taskId = task.getTaskId(); List<String> tasksInProgressInOrderOfArrival = findAllTasksInProgressInOrderOfArrival(task, limit); boolean rateLimited = !tasksInProgressInOrderOfArrival.contains(taskId); if (rateLimited) { logger.info("Task execution count limited. {}, limit {}, current {}", task.getTaskDefName(), limit, getInProgressTaskCount(task.getTaskDefName())); Monitors.recordTaskConcurrentExecutionLimited(task.getTaskDefName(), limit); } return rateLimited; }
Monitors.recordTaskPoll(taskName); logger.debug("Polling for {}, got {} tasks", taskName, polledTaskIds.size()); for(String taskId : polledTaskIds) { Monitors.error(className, "pollAndExecute"); logger.error("Error executing system task:{}", taskName, e);
if(current >= limit) { logger.info("Task execution count limited. task - {}:{}, limit: {}, current: {}", task.getTaskId(), task.getTaskDefName(), limit, current); Monitors.recordTaskConcurrentExecutionLimited(task.getTaskDefName(), limit); return true; .filter(id -> !dynoClient.sismember(inProgressKey, id)) .forEach(id2 -> dynoClient.zrem(rateLimitKey, id2)); Monitors.recordTaskRateLimited(task.getTaskDefName(), limit);
void recordCassandraDaoPayloadSize(String action, int size, String taskType, String workflowType) { Monitors.recordDaoPayloadSize(DAO_NAME, action, StringUtils.defaultIfBlank(taskType, ""), StringUtils.defaultIfBlank(workflowType, ""), size); }
void recordCassandraDaoRequests(String action, String taskType, String workflowType) { Monitors.recordDaoRequests(DAO_NAME, action, taskType, workflowType); }
@Override public Response toResponse(ValidationException exception) { logException(exception); Response.ResponseBuilder responseBuilder; if (exception instanceof ConstraintViolationException) { responseBuilder = Response.status(Response.Status.BAD_REQUEST); } else { responseBuilder = Response.serverError(); Monitors.error("error", "error"); } Map<String, Object> entityMap = new HashMap<>(); entityMap.put("instance", host); responseBuilder.type(MediaType.APPLICATION_JSON_TYPE); responseBuilder.entity(toErrorResponse(exception)); return responseBuilder.build(); }
@VisibleForTesting List<Message> receiveMessages() { try { ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest() .withQueueUrl(queueURL) .withVisibilityTimeout(visibilityTimeoutInSeconds) .withMaxNumberOfMessages(batchSize); ReceiveMessageResult result = client.receiveMessage(receiveMessageRequest); List<Message> messages = result.getMessages().stream() .map(msg -> new Message(msg.getMessageId(), msg.getBody(), msg.getReceiptHandle())) .collect(Collectors.toList()); Monitors.recordEventQueueMessagesProcessed(QUEUE_TYPE, this.queueName, messages.size()); return messages; } catch (Exception e) { logger.error("Exception while getting messages from SQS", e); Monitors.recordObservableQMessageReceivedErrors(QUEUE_TYPE); } return new ArrayList<>(); }
void recordRedisDaoPayloadSize(String action, int size, String taskType, String workflowType) { Monitors.recordDaoPayloadSize(DAO_NAME, action, StringUtils.defaultIfBlank(taskType,""), StringUtils.defaultIfBlank(workflowType,""), size); } }
void recordRedisDaoEventRequests(String action, String event) { Monitors.recordDaoEventRequests(DAO_NAME, action, event); }
void recordRedisDaoRequests(String action, String taskType, String workflowType) { Monitors.recordDaoRequests(DAO_NAME, action, taskType, workflowType); }
private void listen() { try { //noinspection InfiniteLoopStatement for(;;) { WorkflowSystemTask workflowSystemTask = queue.poll(60, TimeUnit.SECONDS); if(workflowSystemTask != null && workflowSystemTask.isAsync() && !listeningTasks.contains(workflowSystemTask)) { listen(workflowSystemTask); listeningTasks.add(workflowSystemTask); } } }catch(InterruptedException ie) { Monitors.error(className, "listen"); logger.warn("Error listening for workflow system tasks", ie); } }
@VisibleForTesting private List<Message> receiveMessages() { try { List<Message> messages = queueDAO.pollMessages(queueName, pollCount, longPollTimeout); Monitors.recordEventQueueMessagesProcessed(QUEUE_TYPE, queueName, messages.size()); return messages; } catch (Exception exception) { logger.error("Exception while getting messages from queueDAO", exception); Monitors.recordObservableQMessageReceivedErrors(QUEUE_TYPE); } return new ArrayList<>(); }
void recordRedisDaoEventRequests(String action, String event) { Monitors.recordDaoEventRequests(DAO_NAME, action, event); }