bricolages / bricolage

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

Fix bug when bricolage uses different subsys between jobnet and job #122

Closed ragi256 closed 4 years ago

ragi256 commented 4 years ago

DAOを実装した際にjobnetとjobのsubsystemが混同しており、うまくjob_executionの指定ができていませんでした。jobnet内で別subsystemのjobを利用している場合、jobのsubsystemを利用するのが正しいため修正します。

修正前の状態では job_executionの存在しない初回は起動したものの、DB内部のレコードをqueueとして利用する2回目からはジョブが失敗するようになりました。

例1: 別subsystemのjobを使っている

subsys1/dummy.jobnet が下記のように記述されているとき

dummy
-> subsys2/job

実行後のjob_executionsはこのように、jobとjobnetで異なるsubsystemとなる(dummy.job省略)

select
  job_execution_id as je_id
  , status
  , lock
  , jobnets.subsystem as jn_subsys
  , jobnet_name as jn_name
  , jobs.subsystem as job_subsys
  , job_name as job_name
from
  job_executions
  left join jobs using(job_id)
  left join jobnets using(jobnet_id)
;

 je_id |  status   | lock | jn_subsys    | jn_name    | job_subsys   | job_name 
-------+-----------+------+--------------+------------+--------------+---------------
     1 | succeeded | f    | subsys1      | jobnet     | subsys2      | job

例2: 別subsystemのjobnetを使っている

subsys/dummy.jobnet が下記のように記述されているとき

dummy
-> *subsys2/jobnet # subsys2/jobnet の中身は job とする

実行後のjob_executionsはこのように、展開先の同じsubsystemとなる(dummy.job省略)

select
  job_execution_id as je_id
  , status
  , lock
  , jobnets.subsystem as jn_subsys
  , jobnet_name as jn_name
  , jobs.subsystem as job_subsys
  , job_name as job_name
from
  job_executions
  left join jobs using(job_id)
  left join jobnets using(jobnet_id)
;

 je_id |  status   | lock | jn_subsys    | jn_name    | job_subsys   | job_name
-------+-----------+------+--------------+------------+--------------+--------------
     1 | succeeded | f    | subsys2      | jobnet     | subsys2      | job
ragi256 commented 4 years ago

そもそものDB設計で大きく修正が必要となったため、合わせて job_execution テーブルに関しても変更されるためcloseします