1package com.runehive.game.task;
3import org.apache.logging.log4j.LogManager;
4import org.apache.logging.log4j.Logger;
6import java.util.Comparator;
7import java.util.HashMap;
8import java.util.stream.Collectors;
27 logger.info(
"TaskDeadlockWatcher exit requested");
36 var tasks =
taskManager.getTasks().stream().collect(Collectors.toList()).stream()
37 .filter(t -> t !=
null && t.getRunStartTime().isPresent())
39 .collect(Collectors.toList());
41 for (
int i = 0; i < tasks.size(); i++) {
42 var
task = tasks.get(i);
48 var elapsedTime =
task.getElapsedTimeFromRunStartTime();
49 logger.error(
"Task {} deadlock detected, task has been running for {}ms, task: {}, stacktrace: {}",
task.getTaskId(), elapsedTime,
task,
task.getCreationStackTraceStr());
55 }
catch (Exception ex) {
56 logger.error(
"Error in TaskDeadlockWatcher", ex);
TaskDeadlockWatcher(TaskManager taskManager)
static final long DEADLOCK_WATCHER_SLEEP_MS
static final Logger logger
final TaskManager taskManager
final HashMap< String, Task > _alreadyAlertedTaskMap
A map of tasks that have already alerted us to a deadlock, we don't want to spam the logs.
static final long TASK_TOO_LONG_MS
A game representing a cyclic unit of work.
long getTaskCreationTime()
The class that handles scheduling tasks, and processing them.