a8n: Move "default branch" check to execution of CampaignJob
Created by: mrnugget
Current state when creating a new CampaignPlan ("Preview changes"):
- We open a transaction
- For each repo the
scopeQueryyields we create aCampaignJob - For each
CampaignJobwe askgitserverfor its default branch - If
gitservercannot determine a default branch the transaction is rolled back - Otherwise: transaction is committed
That means the transaction is open for the duration of time it takes to
ask gitserver for all default branches.
That's not a problem per se, but it is bad UX since it might take a
while until the user sees something after hitting the "Preview changes" button.
I propose that we move the determination of a CampaignJobs BaseRef
and Rev out of the transaction and set those when actually running the
job here.
That would require making rev and base_ref nullable fields in the
database and since we have a database unique constraint on
(campaign_plan_id, repo_id, rev) we have to find out how that works
with NULL fields.
The upsides:
- We don't hammer
gitserverwith possibly hundreds of requests in a tight loop - One request failing won't fail the whole
CampaignPlanbut instead result in a single erroredCampaignJob - The user will get faster feedback when previewing changes because the transaction will be much faster since it's not bound to
gitserveranymore