Skip to content

Commit

Permalink
Merge branch 'main' of github.com:ralsina/croupier
Browse files Browse the repository at this point in the history
  • Loading branch information
ralsina committed Jul 21, 2023
2 parents 74f350e + 1fd4d15 commit 79e1548
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Version 0.4.0

* Add trace level debug about why tasks run
* Implement k/v data as input/output for tasks
* Implement *persistent* k/v store
* Implement `fast_mode` for TaskManager, where it checks file
Expand Down
32 changes: 23 additions & 9 deletions src/croupier.cr
Original file line number Diff line number Diff line change
Expand Up @@ -169,25 +169,39 @@ module Croupier
# * If one of the output files doesn't exist
# * If any of the inputs are generated by a stale task

# ameba:disable Metrics/CyclomaticComplexity
def stale?
# Tasks without inputs or flagged always_run are always stale
Log.trace { "#{outputs} is stale because @always_run" } if @always_run
Log.trace { "#{outputs} is stale because @inputs.empty?" } if @inputs.empty?
return true if @always_run || @inputs.empty?
# Tasks don't get stale twice
return false unless @stale

file_outputs = @outputs.reject(&.lchop?("kv://"))
kv_outputs = @outputs.select(&.lchop?("kv://")).map(&.lchop("kv://"))

# ameba:disable Lint/UselessAssign
(missing_file_outputs = file_outputs.any? { |output| !File.exists?(output) }) ||
# ameba:disable Lint/UselessAssign
(missing_kv_outputs = kv_outputs.any? { |output| !TaskManager.get(output) }) ||
# ameba:disable Lint/UselessAssign
(modified_inputs = inputs.any? { |input| TaskManager.modified.includes? input }) ||
# ameba:disable Lint/UselessAssign
(stale_inputs = @inputs.any? { |input| TaskManager.tasks.has_key?(input) && TaskManager.tasks[input].stale? })

result = (missing_file_outputs = file_outputs.any? { |output| !File.exists?(output) }) ||
(missing_kv_outputs = kv_outputs.any? { |output| !TaskManager.get(output) }) ||
(modified_inputs = inputs.any? { |input| TaskManager.modified.includes? input }) ||
(stale_inputs = @inputs.any? { |input| TaskManager.tasks.has_key?(input) && TaskManager.tasks[input].stale? })

if result
Log.trace {
"#{outputs} is stale because of missing_file_outputs"
} if missing_file_outputs
Log.trace {
"#{outputs} is stale because of missing_kv_outputs"
} if missing_kv_outputs
Log.trace {
"#{outputs} is stale because of modified_inputs #{inputs.select { |input| TaskManager.modified.includes? input }}"
} if modified_inputs
Log.trace {
"#{outputs} is stale because of stale_inputs"
} if stale_inputs
end
# p! missing_file_outputs, missing_kv_outputs, modified_inputs, stale_inputs
result
end

# A task is ready if it is stale but all its inputs are not.
Expand Down

0 comments on commit 79e1548

Please sign in to comment.