Class: Pindo::TaskSystem::DependencyChecker
- Inherits:
-
Object
- Object
- Pindo::TaskSystem::DependencyChecker
- Defined in:
- lib/pindo/module/task/core/dependency_checker.rb
Overview
DependencyChecker - 依赖检查器
职责:
-
检查任务是否可以执行
-
检查依赖状态
-
检查资源可用性
-
标记任务失败或取消
Instance Method Summary collapse
-
#all_pending_blocked? ⇒ Boolean
检查是否所有待执行任务都因依赖问题无法执行.
-
#can_execute?(task) ⇒ Boolean
判断任务是否可以执行(检查依赖和资源).
-
#check_dependencies(task) ⇒ Symbol
检查依赖状态.
-
#check_resources_available?(task) ⇒ Boolean
检查资源是否可用.
-
#dependencies_satisfied?(task) ⇒ Boolean
判断任务依赖是否满足(不检查资源).
-
#initialize(queue, resource_lock_manager) ⇒ DependencyChecker
constructor
A new instance of DependencyChecker.
Constructor Details
#initialize(queue, resource_lock_manager) ⇒ DependencyChecker
Returns a new instance of DependencyChecker.
13 14 15 16 |
# File 'lib/pindo/module/task/core/dependency_checker.rb', line 13 def initialize(queue, resource_lock_manager) @queue = queue @resource_lock_manager = resource_lock_manager end |
Instance Method Details
#all_pending_blocked? ⇒ Boolean
检查是否所有待执行任务都因依赖问题无法执行
92 93 94 |
# File 'lib/pindo/module/task/core/dependency_checker.rb', line 92 def all_pending_blocked? @queue.all_pending? { |t| check_dependencies(t) != :ready } end |
#can_execute?(task) ⇒ Boolean
判断任务是否可以执行(检查依赖和资源)
42 43 44 |
# File 'lib/pindo/module/task/core/dependency_checker.rb', line 42 def can_execute?(task) dependencies_satisfied?(task) && check_resources_available?(task) end |
#check_dependencies(task) ⇒ Symbol
检查依赖状态
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/pindo/module/task/core/dependency_checker.rb', line 59 def check_dependencies(task) return :ready if task.dependencies.empty? task.dependencies.each do |dep_id| dep_task = @queue.find(dep_id) # 依赖任务不存在 unless dep_task Funlog.error("[依赖检查] 任务 #{task.name}: 依赖任务 #{dep_id} 不存在") return :failed end # 检查依赖任务状态 case dep_task.status when TaskStatus::SUCCESS next # 这个依赖已完成 when TaskStatus::FAILED Funlog.error("[依赖检查] 任务 #{task.name}: 依赖任务 #{dep_task.name} 失败 (状态: #{dep_task.status})") return :failed # 依赖失败 when TaskStatus::CANCELLED Funlog.warning("[依赖检查] 任务 #{task.name}: 依赖任务 #{dep_task.name} 被取消 (状态: #{dep_task.status})") return :cancelled # 依赖被取消 else # Funlog.info("[依赖检查] 任务 #{task.name}: 依赖任务 #{dep_task.name} 未完成 (状态: #{dep_task.status})") return :waiting # 依赖未完成 end end :ready # 所有依赖都成功完成 end |
#check_resources_available?(task) ⇒ Boolean
检查资源是否可用
49 50 51 52 53 54 |
# File 'lib/pindo/module/task/core/dependency_checker.rb', line 49 def check_resources_available?(task) resource_names = task.required_resources return true if resource_names.nil? || resource_names.empty? @resource_lock_manager.available?(resource_names) end |
#dependencies_satisfied?(task) ⇒ Boolean
判断任务依赖是否满足(不检查资源)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/pindo/module/task/core/dependency_checker.rb', line 21 def dependencies_satisfied?(task) # 检查依赖状态 dependency_check = check_dependencies(task) case dependency_check when :failed mark_task_failed(task, "依赖任务失败") false when :cancelled mark_task_cancelled(task, "依赖任务被取消") false when :waiting false # 依赖未完成,继续等待 else true # 依赖已满足 end end |