2
require_once("docutil.php");
3
page_head("Backend program logic");
5
<h3>Work generator</h3>
9
wu.transition_time = now
15
result.report_deadline = now + wu.delay_bound
16
wu.transition_time = min(wu.transition_time, result.report_deadline)
19
result.outcome = client_error
20
result.validate_state = INVALID
22
result.outcome = success
23
result.server_state = OVER
24
wu.transition_time = now
25
when a result falls off the bottom of infeasible queue
26
result.server_state = OVER
27
result.outcome = COULDNT_SEND
28
wu.transition_time = now
34
// gets run when either
35
// - a result becomes done (via timeout or client reply)
36
// - the WU error mask is set (e.g. by validator)
37
// - assimilation is finished
38
for each WU with now > transition_time:
40
// check for timed-out results
42
if result.server_state = in_progress and now > result.report_deadline
43
result.server_state = OVER
44
result.outcome = NO_REPLY
46
// trigger validation if needed
47
K = # of SUCCESS results
49
if any result is server_state OVER, outcome SUCCESS, validate_state INIT
50
wu.need_validate = true
52
// check for WU error conditions
53
if any result has outcome couldnt_send
54
error_mask |= couldnt_send
55
K = # results with outcome = client_error
57
error_mask |= too_many_error_results
59
// Note: check on # of success results is done in validator
63
error_mask |= too_many_total_results
65
// if no WU errors, generate new results if needed
67
K = # results w/ server_state = unsent or in_progress
69
generate L new results
71
// if WU errors, clean up unsent results
72
// and trigger assimilation if needed
74
for all results server_state = unsent
77
if wu.assimilate_state == init
78
wu.assimilate_state = ready
80
// if WU is assimilated, trigger deletion of files
81
if wu.assimilated_state = DONE
82
// trigger input file deletion if needed
83
if (all results are OVER and those that are outcome SUCCESS
84
have validate_state != INIT)
85
wu.file_delete_state = ready
87
// outputs of error results can be deleted immediately;
88
// outputs of successful results can be deleted when validated
90
if canonical result and not all results OVER
92
if outcome = CLIENT_ERROR or (SUCCESS and (VALID or INVALID))
93
if file_delete_state = INIT
94
result.file_delete_state = READY
96
// get next result timeout if any
97
transition_time = MAX_INT
98
for all results IN_PROGRESS
99
transition_time = min(transition_time, result.report_deadline)
101
// if transitioner is way behind schedule,
102
// don't repeatedly handle this WU
103
transition_time = max(transition_time, now+delay_bound)
108
for each WU w/ need_validate true
109
if have canonical result
110
for each result w/ validate_state INIT and outcome SUCCESS
111
// possible that we've already deleted canonical output files
112
if canonical_result.file_delete_state = DONE
113
validate_state = INVALID
115
if matches canonical, grant credit
116
validate_state = VALID or INVALID
117
need_to_handle_over_results = true
119
S = set of results w/ outcome SUCCESS
122
set success results as VALID or INVALID
124
need_to_handle_over_results = true
125
wu.assimilate_state = READY
126
for all results server_state UNSENT
130
if # of successful results > C
131
wu.error_mask |= too_many_success_result
132
need_to_handle_over_results = true
134
if need_to_handle_over_results:
135
wu.transition_time = now
141
for each WU with assimilate_state = READY
142
call project-specific handler function
143
wu.assimilate_state = done
144
wu.transition_time = now