Closed ragi256 closed 4 years ago
DBから引き出したqueueの順序が保たれていなかったため、restoreによって再処理されるjobnetのjobの順序がおかしくなっていました。job_execution_id で並び替えることで修正します。
job_execution_id
実行ごとにinsertされるjob_executionは、その実行時におけるjobnetファイルの記述内容の順序通りにinsertされているはずなので、job_execution_idに従って並べ替えれば実行時のjobnet通りの順序になっています。ので、job_execution_id で並び替えます。
直前のwhere部分でSQLのorder byを使うように修正するのは、この一点のためだけに DAO::JobExecution の修正が大きく必要になってしまうため避けてArray#sort_byで並び替えるようにしました。
where
DAO::JobExecution
直接話したように、IDの順序に頼るのは危険。1トランザクションでinsertした場合、その順序でinsertされる保証はない。
job_execution テーブルに実行時のjobnetに書かれている実行順序を保存するカラムを追加して、あらかじめbricolage側で採番した物を降っておき、insert時に含めておくことにします
restore時にはその順序カラムに従ってソートして復元します
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で並び替えるようにしました。