Changes between Version 4 and Version 5 of BackendState
- Timestamp:
- Jul 21, 2007, 12:22:25 PM (17 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
BackendState
v4 v5 10 10 === `canonical_resultid` === #wu_canonical_resultid 11 11 The ID of the canonical result for this workunit, or zero. 12 * Initially zero 13 * Set by the validator (by `check_set()`) 12 * Initially zero. 13 * Set by the validator (by `check_set()`). 14 14 15 15 === `transition_time` === #wu_transition_time … … 17 17 * Initially now. 18 18 * Set to now by scheduler when get a result for this WU. 19 * Set to min(current value, now + delay_bound) by scheduler when send a result for this WU 20 * Set to min(x.sent_time + wu.delay_bound) over IN_PROGRESS results x by transitioner when done handling this WU 21 * Set to now by validator if it finds canonical result, or if there is already a canonical result and some other results have validate_state = INIT, or if there is no consensus and the number of successful results is > wu.max_success_results 19 * Set to min(current value, now + delay_bound) by scheduler when send a result for this WU. 20 * Set to min(x.sent_time + wu.delay_bound) over IN_PROGRESS results x by transitioner when done handling this WU. 21 * Set to now by validator if it finds canonical result, or if there is already a canonical result and some other results have validate_state = INIT, or if there is no consensus and the number of successful results is > wu.max_success_results. 22 22 23 23 === `file_delete_state` === #wu_file_delete_state 24 24 Indicates whether input files should be deleted. 25 * Initially INIT 26 * Set to READY by transitioner when all results have server_state =OVER and wu.assimilate_state=DONE Note: db_purge purges a WU and all its results when file_delete_state=DONE; therefore it is critical that it only be set to DONE if all results have server_state=OVER.25 * Initially INIT. 26 * Set to READY by transitioner when all results have server_state = OVER and wu.assimilate_state = DONE. '''Note:''' db_purge purges a WU and all its results when file_delete_state = DONE; therefore it is critical that it only be set to DONE if all results have server_state = OVER. 27 27 * Set to DONE by file_deleter when it has attempted to delete files. 28 28 29 29 === `assimilate_state` === #wu_assimilate_state 30 30 Indicates whether the workunit should be assimilated. 31 * Initially INIT 32 * Set to READY by transitioner if wu.assimilate_state =INIT and WU has error condition33 * Set to READY by validator when find canonical result and wu.assimilate_state =INIT34 * Set to DONE by assimilator when done 31 * Initially INIT. 32 * Set to READY by transitioner if wu.assimilate_state = INIT and WU has error condition. 33 * Set to READY by validator when find canonical result and wu.assimilate_state = INIT. 34 * Set to DONE by assimilator when done. 35 35 36 36 === `need_validate` === #wu_need_validate 37 37 Indicates that the workunit has a result that needs validation. 38 * Initially FALSE 39 * Set to TRUE by transitioner if the number of success results is at least wu.min_quorum and there is a success result not validated yet 40 * Set to FALSE by validator 38 * Initially FALSE. 39 * Set to TRUE by transitioner if the number of success results is at least wu.min_quorum and there is a success result not validated yet. 40 * Set to FALSE by validator. 41 41 42 42 === `error_mask` === #wu_error_mask 43 43 A bit mask for error conditions. 44 * Initially zero 44 * Initially zero. 45 45 * Transitioner sets COULDNT_SEND_RESULT if some result couldn't be sent. 46 * Transitioner sets TOO_MANY_RESULTS if too many error results 47 * Transitioner sets TOO_MANY_TOTAL_RESULTS if too many total results 48 * Validator sets TOO_MANY_SUCCESS_RESULTS if no consensus and too many success results 46 * Transitioner sets TOO_MANY_RESULTS if too many error results. 47 * Transitioner sets TOO_MANY_TOTAL_RESULTS if too many total results. 48 * Validator sets TOO_MANY_SUCCESS_RESULTS if no consensus and too many success results. 49 49 50 50 === Workunit invariants === #wu_invariants 51 51 52 * eventually either canonical_resultid or error_mask is set53 * eventually transition_time = infinity54 * Each WU is assimilated exactly once 52 * Eventually either canonical_resultid or error_mask is set. 53 * Eventually transition_time = infinity. 54 * Each WU is assimilated exactly once. 55 55 56 56 === Notes on deletion of input files === #wu_deletion_notes 57 57 58 * Input files are eventually deleted, but only when all results have state =OVER (so that clients don't get download failures) and the WU has been assimilated (in case the project wants to examine input files in error cases).58 * Input files are eventually deleted, but only when all results have state = OVER (so that clients don't get download failures) and the WU has been assimilated (in case the project wants to examine input files in error cases). 59 59 60 60 … … 63 63 === `report_deadline` === #result_report_deadline 64 64 Give up on result (and possibly delete input files) if don't get reply by this time. 65 * Set by scheduler to now + wu.delay_bound when send result 65 * Set by scheduler to now + wu.delay_bound when send result. 66 66 67 67 === `server_state` === #result_server_state 68 68 Values: UNSENT, IN_PROGRESS, OVER 69 * Initially UNSENT 70 * Set by scheduler to IN_PROGRESS when send result 69 * Initially UNSENT. 70 * Set by scheduler to IN_PROGRESS when send result. 71 71 * Set by scheduler to OVER when result is reported in request message from client. 72 72 * Set by scheduler to OVER when it thinks host has detached project. 73 * Set by transitioner to OVER if now > result.report_deadline 74 * Set by transitioner to OVER if WU has error condition and result.server_state =UNSENT75 * Set by validator to OVER if WU has canonical result and result.server_state =UNSENT73 * Set by transitioner to OVER if now > result.report_deadline. 74 * Set by transitioner to OVER if WU has error condition and result.server_state = UNSENT. 75 * Set by validator to OVER if WU has canonical result and result.server_state = UNSENT. 76 76 77 77 === `outcome` === #result_outcome 78 Values: SUCCESS, COULDNT_SEND, CLIENT_ERROR, NO_REPLY, DIDNT_NEED, VALIDATE_ERROR, CLIENT_DETACHED. Defined iff result.server_state =OVER79 * Set by scheduler to SUCCESS if get reply and no client error 80 * Set by scheduler to CLIENT_ERROR if get reply and client error 78 Values: SUCCESS, COULDNT_SEND, CLIENT_ERROR, NO_REPLY, DIDNT_NEED, VALIDATE_ERROR, CLIENT_DETACHED. Defined iff result.server_state = OVER 79 * Set by scheduler to SUCCESS if get reply and no client error. 80 * Set by scheduler to CLIENT_ERROR if get reply and client error. 81 81 * Set by scheduler to NO_REPLY if it thinks host has detached project. 82 * Set by transitioner to NO_REPLY if server_state =IN_PROGRESS and now < report_deadline83 * Set by transitioner to DIDNT_NEED if WU has error condition and result.server_state =UNSENT84 * Set by validator to DIDNT_NEED if WU has canonical result and result.server_state =UNSENT82 * Set by transitioner to NO_REPLY if server_state = IN_PROGRESS and now < report_deadline. 83 * Set by transitioner to DIDNT_NEED if WU has error condition and result.server_state = UNSENT. 84 * Set by validator to DIDNT_NEED if WU has canonical result and result.server_state = UNSENT. 85 85 * Set by validator to VALIDATE_ERROR if outcome was initially SUCCESS, but the validator had a permanent error reading a result file, or a file had a syntax error. Prevents the validator from trying again. 86 * Set by scheduler to CLIENT_DETACHED if it gets a request indicating that the client detached, then reattached 86 * Set by scheduler to CLIENT_DETACHED if it gets a request indicating that the client detached, then reattached. 87 87 88 88 === `client_state` === #result_client_state … … 90 90 91 91 === `file_delete_state` === #result_file_delete_state 92 * Initially INIT 93 * Set by transitioner to READY if this is the canonical result, and file_delete_state =INIT, and wu.assimilate_state=DONE, and all the results have server_state=OVER, and all all the results with outcome=SUCCESS have validate_state<>INIT94 * Set by transitioner to READY if wu.assimilate_state =DONE and result.outcome=CLIENT_ERROR or result.validate_state!=INIT92 * Initially INIT. 93 * Set by transitioner to READY if this is the canonical result, and file_delete_state = INIT, and wu.assimilate_state = DONE, and all the results have server_state = OVER, and all all the results with outcome = SUCCESS have validate_state <> INIT. 94 * Set by transitioner to READY if wu.assimilate_state = DONE and result.outcome = CLIENT_ERROR or result.validate_state != INIT. 95 95 96 96 === `validate_state` === #result_validate_state 97 Defined iff result.outcome =SUCCESS98 * Initially INIT 99 * Set by validator to VALID if outcome =SUCCESS and matches canonical result100 * Set by validator to INVALID if outcome =SUCCESS and doesn't match canonical result97 Defined iff result.outcome = SUCCESS 98 * Initially INIT. 99 * Set by validator to VALID if outcome = SUCCESS and matches canonical result. 100 * Set by validator to INVALID if outcome = SUCCESS and doesn't match canonical result. 101 101 * Set by transitioner to NO_CHECK if the WU had an error; this avoids showing claimed credit as 'pending'. 102 * Set by validator to ERROR if outcome =SUCCESS and had a permanent error trying to read an output file, or an output file had a syntax error.102 * Set by validator to ERROR if outcome = SUCCESS and had a permanent error trying to read an output file, or an output file had a syntax error. 103 103 * Set by validator to INCONCLUSIVE if check_set() didn't find a consensus in a set of results containing this one. 104 104 * Set by scheduler to TOO_LATE if the result was reported after the canonical result's files were deleted. … … 111 111 === Notes on deletion of output files === #result_deletion_notes 112 112 * Non-canonical results can be deleted as soon as the WU is assimilated. 113 * Canonical results can be deleted only when all results have [#result_server_state server_state] =OVER and all success results are validated.113 * Canonical results can be deleted only when all results have [#result_server_state server_state] = OVER and all success results are validated. 114 114 * If a result reply arrives after its timeout, the output files can be immediately deleted. 115 115