以下は JE2BWM ほかが作成した翻訳 です。 原文は University of California より GFDL で配付されており、 この翻訳も GFDL に従います。
原文: Workunit and result state transitions   (翻訳対象の更新日付は 5:23 PM UTC, July 06 2006 です)。

ワークユニットとリザルトの状態遷移

boinc.gif
(英語のみ)

ワークユニットとリザルトの処理[の全体像]は、 それらの状態変数の遷移をもって説明することができます。

ワークユニットの状態変数

ワークユニットが持っている数個のパラメタについては、 ワークユニットの説明に記述があります。

ワークユニットの状態変数は以下の表のとおりです。

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 に設定します。

リザルトに関する不変条件:

出力ファイルの削除に関する注記: 「とんでもなく」遅れて到着した[リザルトの] 出力ファイルは、いかにして削除するのでしょうか?(例えば、 全てのリザルトがタイムアウトしてしまい報告が決してなされなく なってから、その後にアップロードが起った場合)。 あり得る答え: まだ取込まれていないWUのうち、最古のものの作成日時を X とすれば、 X より古い作成日付をもつ出力ファイルは削除することができます。
(訳注1) validatorプログラム:
BOINCが提供しているプログラムの名前そのものは実は動詞形で、'validate'。
(訳注2) transition_time = infinity になる:
最小値を求める処理の先頭でinifinity(=MAX_INT)に初期化するようです。 「バックエンド・プログラムの論理」中のtransitioner末尾を参照。

 


BOINCの訳のメインページに戻る | (原文のメインページに戻る)
 

最終更新時刻 00:46:33, 2006年08月12日(JST)
Copyright © 2009 University of California. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.
Copyright © 2009 Komori Hitoshi(je2bwm at jarl.com). Japanese translation from English web pages on BOINC. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.