RuneHive-Game
Loading...
Searching...
No Matches
com.runehive.game.task.TaskDeadlockWatcher Class Reference
Inheritance diagram for com.runehive.game.task.TaskDeadlockWatcher:
Collaboration diagram for com.runehive.game.task.TaskDeadlockWatcher:

Public Member Functions

void requestExit ()
void run ()
 TaskDeadlockWatcher (TaskManager taskManager)

Private Attributes

final HashMap< String, Task_alreadyAlertedTaskMap = new HashMap<>()
 A map of tasks that have already alerted us to a deadlock, we don't want to spam the logs.
boolean exitRequested
final TaskManager taskManager

Static Private Attributes

static final long DEADLOCK_WATCHER_SLEEP_MS = 1000
static final Logger logger = LogManager.getLogger(TaskDeadlockWatcher.class)
static final long TASK_TOO_LONG_MS = 1000

Detailed Description

Definition at line 10 of file TaskDeadlockWatcher.java.

Constructor & Destructor Documentation

◆ TaskDeadlockWatcher()

com.runehive.game.task.TaskDeadlockWatcher.TaskDeadlockWatcher ( TaskManager taskManager)

Definition at line 22 of file TaskDeadlockWatcher.java.

22 {
23 this.taskManager = taskManager;
24 }

References taskManager.

Member Function Documentation

◆ requestExit()

void com.runehive.game.task.TaskDeadlockWatcher.requestExit ( )

Definition at line 26 of file TaskDeadlockWatcher.java.

26 {
27 logger.info("TaskDeadlockWatcher exit requested");
28 exitRequested = true;
29 }

References exitRequested, and logger.

◆ run()

void com.runehive.game.task.TaskDeadlockWatcher.run ( )

Definition at line 33 of file TaskDeadlockWatcher.java.

33 {
34 while (!exitRequested) {
35 try {
36 var tasks = taskManager.getTasks().stream().collect(Collectors.toList()).stream()
37 .filter(t -> t != null && t.getRunStartTime().isPresent())
38 .sorted(Comparator.comparingLong((Task t) -> t.getTaskCreationTime()).reversed())
39 .collect(Collectors.toList());
40
41 for (int i = 0; i < tasks.size(); i++) {
42 var task = tasks.get(i);
43 if (task == null || _alreadyAlertedTaskMap.containsKey(task.getTaskId())) {
44 continue;
45 }
46
47 if (task.getElapsedTimeFromRunStartTime() > TASK_TOO_LONG_MS) {
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());
50 _alreadyAlertedTaskMap.put(task.getTaskId(), task);
51 }
52 }
53
54 Thread.sleep(DEADLOCK_WATCHER_SLEEP_MS);
55 } catch (Exception ex) {
56 logger.error("Error in TaskDeadlockWatcher", ex);
57 }
58 }
59 }

References _alreadyAlertedTaskMap, DEADLOCK_WATCHER_SLEEP_MS, exitRequested, com.runehive.game.task.Task.getTaskCreationTime(), logger, TASK_TOO_LONG_MS, and taskManager.

Here is the call graph for this function:

Member Data Documentation

◆ _alreadyAlertedTaskMap

final HashMap<String, Task> com.runehive.game.task.TaskDeadlockWatcher._alreadyAlertedTaskMap = new HashMap<>()
private

A map of tasks that have already alerted us to a deadlock, we don't want to spam the logs.

Definition at line 20 of file TaskDeadlockWatcher.java.

Referenced by run().

◆ DEADLOCK_WATCHER_SLEEP_MS

final long com.runehive.game.task.TaskDeadlockWatcher.DEADLOCK_WATCHER_SLEEP_MS = 1000
staticprivate

Definition at line 13 of file TaskDeadlockWatcher.java.

Referenced by run().

◆ exitRequested

boolean com.runehive.game.task.TaskDeadlockWatcher.exitRequested
private

Definition at line 11 of file TaskDeadlockWatcher.java.

Referenced by requestExit(), and run().

◆ logger

final Logger com.runehive.game.task.TaskDeadlockWatcher.logger = LogManager.getLogger(TaskDeadlockWatcher.class)
staticprivate

Definition at line 15 of file TaskDeadlockWatcher.java.

Referenced by requestExit(), and run().

◆ TASK_TOO_LONG_MS

final long com.runehive.game.task.TaskDeadlockWatcher.TASK_TOO_LONG_MS = 1000
staticprivate

Definition at line 14 of file TaskDeadlockWatcher.java.

Referenced by run().

◆ taskManager

final TaskManager com.runehive.game.task.TaskDeadlockWatcher.taskManager
private

Definition at line 12 of file TaskDeadlockWatcher.java.

Referenced by run(), and TaskDeadlockWatcher().


The documentation for this class was generated from the following file: