| canonical_resultid |
標準的リザルトのID。 このワークユニットに対する
標準的リザルトの IDの値、あるいは、ゼロ。
- 初期値はゼロ。
- validator が( check_set() 関数を使い) 設定します。
|
| transition_time |
次回遷移時刻。 このワークユニットの状態遷移を、次回検査する時刻。
- 初期値は、現在時刻。
- このWUに1つリザルトを受けたなら、スケジューラはこのフィールドの値を 現在時刻 に設定します。
- このWUのリザルトを1つ送信したら、スケジューラはこのフィールドの値を、
min(現在の値, 現在時刻 + delay_bound) に設定します。
- transitioner プログラムがこのWUの処理を済ませたときに、IN_PROGRESS 状態のリザルト x
の全てにわたって、(x.sent_time + wu.delay_bound) の最小値を求めて、このフィールドに設定します。
- 以下の場合にvalidaterプログラム訳注1はこのフィールドの値を 現在時刻 に設定します。
- validaterプログラムが標準的リザルトを見つけたとき、あるいは、
- すでに標準的リザルトは見つかっていて、いくつかの他のリザルトが
validate_state = INIT であるとき、あるいは、
- 「合意(consensus)」はまだとれていないが、計算に成功したリザルトの
数が wu.max_success_results より多いとき。
|
| file_delete_state |
ファイル消去状態。 入力ファイルを消すべきかどうかを示します。
- 初期値は INIT
- すべてのリザルトが server_state=OVER かつ、wu.assimilate_state=DONE
となったとき、transitionerプログラムがこのフィールドの値を READY に設定します。
注意: file_delete_state=DONE の条件が満たされるとき、db_purge は
ワークユニットと関連リザルトのすべてを消し去ります。 ですから、すべてのリザルトの状態が
server_state=OVER のときにだけ、file_delete_state を DONE に設定するということが重要です。
- file_deleterプログラムがファイルを消そうと試みたとき、このフィールドの値を DONE に設定します。
|
| assimilate_state |
取り込み状態。 このワークユニットを取り込むべきかを示します。
- 初期値は INIT
- wu.assimilate_state=INIT の状態で、ワークユニットに異常があるとき、transitionerプログラムは
このフィールドの値を READY に設定します。
- validaterプログラムが標準的リザルトを見つけたときに、ワークユニットが wu.assimilate_state=INIT
の状態なら、validater プログラムがこのフィールドの値を READY に設定します。
- assimilator プログラムが取込み完了したとき、DONE に設定します。
|
| need_validate |
検証の必要性。 このワークユニットに、検証を必要としているリザルトがあることを示します。
- 初期値は FALSE
- 計算に成功したリザルトの数が、少なくとも wu.min_quorum 個あり、かつ、計算に成功したが
検証未のリザルトがあるとき、transitioner プログラムはこのフィールドの値を TRUE に設定します。
- validatorプログラムはこのフィールドの値を FALSE に設定します。
|
| error_mask |
異常状態についてのビットマスク。
- 初期値はゼロ。
- COULDNT_SEND_RESULT: リザルトを送出できないことがおきたら、
transitionerプログラムはこのビットをセットします。
- TOO_MANY_RESULTS: 異常なリザルトが多すぎると、
transitionerプログラムは このビットをセットします。
- TOO_MANY_TOTAL_RESULTS: リザルトの合計数が多すぎると、
transitionerプログラムは このビットをセットします。
- TOO_MANY_SUCCESS_RESULTS:「合意(consensus)」がとれていないにもかかわらず、
計算成功のリザルトが多くありすぎるとき、validator プログラムは、このビットをセットします。
|
| report_deadline |
報告期限。 この時刻までに結果が返って来なければ、
リザルトを断念(give up)します(おそらく、入力ファイルを消します。 )
- リザルトを送出するとき、スケジューラが (現在時刻 + wu.delay_bound)に設定します。
|
| server_state |
サーバ側の状態。 とりうる値は、UNSENT(未送信), IN_PROGRESS(送出済み), OVER(終了)
- 初期値は UNSENT
- リザルトを送信するときに、スケジューラが IN_PROGRESS に設定します。
- クライアントからの要求メッセージ内でリザルトの報告を受け取ると、スケジューラは OVER に設定します。
- 計算機がプロジェクトから離脱したとスケジューラが考えると、
スケジューラはこのフィールドの値を OVER に設定します。
- transitioner プログラムは、 現在時刻 が result.report_deadline
に達していることを見つけると、OVER に設定します。
- transitioner プログラムは、対応するWUが異常になっていて、
result.server_state=UNSENT であれば、このフィールドの値を OVER に設定します。
- validator プログラムは、WUがすでに標準的リザルトを得ていて、
result.server_state=UNSENT であれば、このフィールドの値を OVER に設定します。
|
| outcome |
計算の終了状況。 とりうる値は、
SUCCESS(成功)、 COULDNT_SEND(送出不可)、
CLIENT_ERROR(クライアント異常)、 NO_REPLY(返答なし)、
DIDNT_NEED(計算不要), VALIDATE_ERROR(検証異常)、
CLIENT_DETACHED(クライアント離脱) のいずれかです。
このフィールドが意味をもつのは、result.server_state=OVER
のときに限ります。
- スケジューラは、クライアントから結果をもらって異常がなければ、
このフィールドの値を SUCCESS に設定します。
- スケジューラは、クライアントから結果をもらって異常を見つけると、
このフィールドの値を CLIENT_ERROR に設定します。
- 計算機がプロジェクトから離脱したとスケジューラが考えると、
スケジューラはこのフィールドの値を NO_REPLY に設定します。
- transitioner プログラムは server_state=IN_PROGRESS で、かつ、
現在時刻が report_deadline (報告期限)に達していると、
このフィールドの値を NO_REPLY に設定します。
- transitioner プログラムは、WU に異常が有り、かつ、
result.server_state=UNSENT であれば、このフィールドの値を DIDNT_NEED に設定します。
- validator プログラムは、WU がすでに標準的リザルトを得ており、
かつ、result.server_state=UNSENT であれば、このフィールドの値を
DIDNT_NEED に設定します。
- outcome が初期には SUCCESS だったが、バリデーターがリザルトファイルを
読んだときに永続的異常を検出した場合、あるいはファイル内容に構文異常が
検出された場合は、バリデーターはこのフィールドの値を VALIDATE_ERROR に設定します。
これで、バリデーターは再試行しなくなります。
- クライアントが離脱した後に再び参加しなおした場合、
離脱したことを示す要求をスケジューラが受け取ったらなら、スケジューラはこのフィールドの値を
CLIENT_DETACHED に設定します。
|
| client_state |
クライアント状態。 このフィールドは、
異常が発生したときのクライアントの状態を記録します。 その状態とは、
DOWNLOADING(ダウンロード処理中), DOWNLOADED(計算誤り),
COMPUTE_ERROR(ダウンロード済み), UPLOADING(アップロード処理中),
UPLOADED(アップロード済み), ABORTED(中止済み) のいずれかです。
outcome が CLIENT_ERROR のときだけ意味を持ちます。
|
| file_delete_state |
ファイル削除の状態
- 初期値は、INIT
- transitioner プログラムは、このリザルトが標準的リザルトであり、
file_delete_state=INIT かつ、wu.assimilate_state=DONE かつ、 全てのリザルトが
server_state=OVER かつ、outcome=SUCCESS である全てのリザルトで、
validate_state<>INIT であるならば、このフィールドの値を READY に設定します。
- transitioner プログラムは、WUの状態が wu.assimilate_state=DONE であり、
リザルトの状態が result.outcome=CLIENT_ERROR または、result.validate_state != INIT
であれば、このフィールドの値を READY に設定します。
|
| validate_state |
検証状態。 result.outcome=SUCCESS のときだけ意味をもちます。
- 初期値は、INIT
- validatorプログラムは、[受信したリザルトが]outcome=SUCCESS で、
かつ、標準的リザルトに適合した場合は、このフィールドの値を VALID に設定します。
- validatorプログラムは、[受信したリザルトが]outcome=SUCCESS で、かつ、
標準的リザルトに不適合であった場合は、このフィールドの値を INVALID に設定します。
- ワークユニットに異常があった場合、トランジショナはこのフィールドの値を
NO_CHECK に設定します。 これによって、申請された功績が「保留(pending)」
状態と表示されないようにします。
- validatorプログラムは、[受信したリザルトが]outcome=SUCCESS で、かつ、
出力ファイルを読み込もうとしたときに、永続的なエラーまたは構文検査でエラーに出会った場合、
このフィールドの値を INVALID に設定します。
- 受信したリザルトを含むリザルト集合について、合意が成り立っていないと check_set()
関数が判定したとき、validatorプログラムは このフィールドの値を INCONCLUSIVE に設定します。
- 標準的リザルトのファイルが消去された後になって、そのリザルトが報告されたときは、
スケジューラはこのフィールドを TOO_LATE に設定します。
|