Important Fixes, New mechanics, and many more
Some checks failed
CI / validate (push) Failing after 9m21s
Some checks failed
CI / validate (push) Failing after 9m21s
This commit is contained in:
63
supabase/migrations/0006_retry_job_compatibility.sql
Normal file
63
supabase/migrations/0006_retry_job_compatibility.sql
Normal file
@@ -0,0 +1,63 @@
|
||||
-- Replace the first retry implementation for installations that already ran
|
||||
-- migration 0005 against the one-job-per-round queue constraint.
|
||||
create or replace function public.stage_two_retry_failed_round(
|
||||
p_round_id uuid,
|
||||
p_owner_id uuid
|
||||
) returns uuid language plpgsql security definer set search_path = '' as $$
|
||||
declare
|
||||
v_round public.rounds%rowtype;
|
||||
v_job public.ai_jobs%rowtype;
|
||||
begin
|
||||
select * into v_round from public.rounds where id = p_round_id for update;
|
||||
if not found then raise exception 'round not found'; end if;
|
||||
if v_round.status <> 'failed'::public.round_status then raise exception 'round is not failed'; end if;
|
||||
if not exists (
|
||||
select 1 from public.campaigns
|
||||
where id = v_round.campaign_id and owner_id = p_owner_id and status = 'active'
|
||||
) then raise exception 'only the campaign owner can retry a failed round'; end if;
|
||||
if exists (
|
||||
select 1 from public.rounds
|
||||
where campaign_id = v_round.campaign_id
|
||||
and id <> p_round_id
|
||||
and status in ('open'::public.round_status, 'queued'::public.round_status, 'resolving'::public.round_status)
|
||||
) then raise exception 'campaign already has an active round'; end if;
|
||||
|
||||
select * into v_job
|
||||
from public.ai_jobs
|
||||
where job_type = 'resolve-round' and entity_id = p_round_id
|
||||
for update;
|
||||
if not found or v_job.status <> 'failed' then raise exception 'failed round job not found'; end if;
|
||||
|
||||
insert into public.audit_entries(
|
||||
campaign_id, actor_id, action, entity_type, entity_id, before_state, after_state
|
||||
) values (
|
||||
v_round.campaign_id, p_owner_id, 'retry_failed_round', 'round', p_round_id,
|
||||
jsonb_build_object('roundError', v_round.error, 'jobError', v_job.error, 'attempts', v_job.attempts),
|
||||
jsonb_build_object('status', 'queued')
|
||||
);
|
||||
|
||||
update public.ai_jobs
|
||||
set status = 'queued', attempts = 0, claimed_by = null, lease_expires_at = null,
|
||||
available_at = now(), error = null, updated_at = now()
|
||||
where id = v_job.id;
|
||||
|
||||
update public.rounds
|
||||
set status = 'queued'::public.round_status, error = null, queued_at = now(),
|
||||
resolved_at = null, forced_by = p_owner_id
|
||||
where id = p_round_id;
|
||||
|
||||
return v_job.id;
|
||||
end;
|
||||
$$;
|
||||
|
||||
create or replace function public.dng_schema_version()
|
||||
returns integer language sql stable security definer set search_path = '' as $$
|
||||
select 6;
|
||||
$$;
|
||||
|
||||
revoke all on function public.stage_two_retry_failed_round(uuid, uuid) from public, anon, authenticated;
|
||||
revoke all on function public.dng_schema_version() from public, anon, authenticated;
|
||||
grant execute on function public.stage_two_retry_failed_round(uuid, uuid) to service_role;
|
||||
grant execute on function public.dng_schema_version() to service_role;
|
||||
|
||||
notify pgrst, 'reload schema';
|
||||
Reference in New Issue
Block a user