TaskPersisterJpa.java 文件源码

java
阅读 32 收藏 0 点赞 0 评论 0

项目:dcp-api 作者:
@Override
public void heartbeat(String nodeId, Set<String> runningTasksId, long failoverTimeout) {
    List<TaskStatusInfo> tsi = listTasks(null, runningTaskStatusFilter, 0, 0);
    if (tsi != null && !tsi.isEmpty()) {
        long ct = System.currentTimeMillis();
        long ft = ct - failoverTimeout;
        for (TaskStatusInfo task : tsi) {
            try {
                em.lock(task, LockModeType.PESSIMISTIC_WRITE);
                if (task.getTaskStatus() == TaskStatus.RUNNING) {
                    if (runningTasksId != null && runningTasksId.contains(task.getId())) {
                        task.setHeartbeat(ct);
                    } else {
                        if (task.getHeartbeat() < ft) {
                            changeTaskStatus(task.getId(), TaskStatus.FAILOVER, "Failover necessity detected by node '" + nodeId
                                    + "' at " + ct + " due heartbeat timestamp " + task.getHeartbeat());
                        }
                    }
                }
            } catch (LockTimeoutException e) {
                log.fine("Lock exception for task id=" + task.getId());
            }
        }
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号