bricolages / bricolage

AWS-oriented Data Warehouse Framework
114 stars 20 forks source link

Fix queue order of restored job execution #135

Closed ragi256 closed 4 years ago

ragi256 commented 4 years ago

DBから引き出したqueueの順序が保たれていなかったため、restoreによって再処理されるjobnetのjobの順序がおかしくなっていました。job_execution_id で並び替えることで修正します。

実行ごとにinsertされるjob_executionは、その実行時におけるjobnetファイルの記述内容の順序通りにinsertされているはずなので、job_execution_idに従って並べ替えれば実行時のjobnet通りの順序になっています。ので、job_execution_id で並び替えます。

直前のwhere部分でSQLのorder byを使うように修正するのは、この一点のためだけに DAO::JobExecution の修正が大きく必要になってしまうため避けてArray#sort_byで並び替えるようにしました。

aamine commented 4 years ago

直接話したように、IDの順序に頼るのは危険。1トランザクションでinsertした場合、その順序でinsertされる保証はない。

ragi256 commented 4 years ago

job_execution テーブルに実行時のjobnetに書かれている実行順序を保存するカラムを追加して、あらかじめbricolage側で採番した物を降っておき、insert時に含めておくことにします

restore時にはその順序カラムに従ってソートして復元します