@@ -13,7 +13,7 @@ DECLARE
1313 v_run_failed boolean ;
1414 v_step_failed boolean ;
1515 v_step_skipped boolean ;
16- v_when_failed text ;
16+ v_when_exhausted text ;
1717 v_task_exhausted boolean ; -- True if task has exhausted retries
1818begin
1919
@@ -62,11 +62,11 @@ flow_info AS (
6262 FROM pgflow .runs r
6363 WHERE r .run_id = fail_task .run_id
6464),
65- config AS (
65+ config AS (
6666 SELECT
6767 COALESCE(s .opt_max_attempts , f .opt_max_attempts ) AS opt_max_attempts,
6868 COALESCE(s .opt_base_delay , f .opt_base_delay ) AS opt_base_delay,
69- s .when_failed
69+ s .when_exhausted
7070 FROM pgflow .steps s
7171 JOIN pgflow .flows f ON f .flow_slug = s .flow_slug
7272 JOIN flow_info fi ON fi .flow_slug = s .flow_slug
@@ -94,53 +94,53 @@ fail_or_retry_task as (
9494 AND task .status = ' started'
9595 RETURNING *
9696),
97- -- Determine if task exhausted retries and get when_failed mode
98- task_status AS (
99- SELECT
100- (select status from fail_or_retry_task) AS new_task_status,
101- (select when_failed from config) AS when_failed_mode ,
97+ -- Determine if task exhausted retries and get when_exhausted mode
98+ task_status AS (
99+ SELECT
100+ (select status from fail_or_retry_task) AS new_task_status,
101+ (select when_exhausted from config) AS when_exhausted_mode ,
102102 -- Task is exhausted when it's failed (no more retries)
103103 ((select status from fail_or_retry_task) = ' failed' ) AS is_exhausted
104104),
105105maybe_fail_step AS (
106106 UPDATE pgflow .step_states
107107 SET
108- -- Status logic:
109- -- - If task not exhausted (retrying): keep current status
110- -- - If exhausted AND when_failed ='fail': set to 'failed'
111- -- - If exhausted AND when_failed IN ('skip', 'skip-cascade'): set to 'skipped'
112- status = CASE
113- WHEN NOT (select is_exhausted from task_status) THEN pgflow .step_states .status
114- WHEN (select when_failed_mode from task_status) = ' fail' THEN ' failed'
115- ELSE ' skipped' -- skip or skip-cascade
116- END,
108+ -- Status logic:
109+ -- - If task not exhausted (retrying): keep current status
110+ -- - If exhausted AND when_exhausted ='fail': set to 'failed'
111+ -- - If exhausted AND when_exhausted IN ('skip', 'skip-cascade'): set to 'skipped'
112+ status = CASE
113+ WHEN NOT (select is_exhausted from task_status) THEN pgflow .step_states .status
114+ WHEN (select when_exhausted_mode from task_status) = ' fail' THEN ' failed'
115+ ELSE ' skipped' -- skip or skip-cascade
116+ END,
117117 failed_at = CASE
118- WHEN (select is_exhausted from task_status) AND (select when_failed_mode from task_status) = ' fail' THEN now()
119- ELSE NULL
120- END,
118+ WHEN (select is_exhausted from task_status) AND (select when_exhausted_mode from task_status) = ' fail' THEN now()
119+ ELSE NULL
120+ END,
121121 error_message = CASE
122122 WHEN (select is_exhausted from task_status) THEN fail_task .error_message
123123 ELSE NULL
124124 END,
125125 skip_reason = CASE
126- WHEN (select is_exhausted from task_status) AND (select when_failed_mode from task_status) IN (' skip' , ' skip-cascade' ) THEN ' handler_failed'
126+ WHEN (select is_exhausted from task_status) AND (select when_exhausted_mode from task_status) IN (' skip' , ' skip-cascade' ) THEN ' handler_failed'
127127 ELSE pgflow .step_states .skip_reason
128128 END,
129129 skipped_at = CASE
130- WHEN (select is_exhausted from task_status) AND (select when_failed_mode from task_status) IN (' skip' , ' skip-cascade' ) THEN now()
130+ WHEN (select is_exhausted from task_status) AND (select when_exhausted_mode from task_status) IN (' skip' , ' skip-cascade' ) THEN now()
131131 ELSE pgflow .step_states .skipped_at
132132 END,
133133 -- Clear remaining_tasks when skipping (required by remaining_tasks_state_consistency constraint)
134134 remaining_tasks = CASE
135- WHEN (select is_exhausted from task_status) AND (select when_failed_mode from task_status) IN (' skip' , ' skip-cascade' ) THEN NULL
135+ WHEN (select is_exhausted from task_status) AND (select when_exhausted_mode from task_status) IN (' skip' , ' skip-cascade' ) THEN NULL
136136 ELSE pgflow .step_states .remaining_tasks
137137 END
138138 FROM fail_or_retry_task
139139 WHERE pgflow .step_states .run_id = fail_task .run_id
140140 AND pgflow .step_states .step_slug = fail_task .step_slug
141141 RETURNING pgflow .step_states .*
142142)
143- -- Update run status: only fail when when_failed ='fail' and step was failed
143+ -- Update run status: only fail when when_exhausted ='fail' and step was failed
144144UPDATE pgflow .runs
145145SET status = CASE
146146 WHEN (select status from maybe_fail_step) = ' failed' THEN ' failed'
@@ -158,9 +158,9 @@ SET status = CASE
158158WHERE pgflow .runs .run_id = fail_task .run_id
159159RETURNING (status = ' failed' ) INTO v_run_failed;
160160
161- -- Capture when_failed mode and check if step was skipped for later processing
162- SELECT s .when_failed INTO v_when_failed
163- FROM pgflow .steps s
161+ -- Capture when_exhausted mode and check if step was skipped for later processing
162+ SELECT s .when_exhausted INTO v_when_exhausted
163+ FROM pgflow .steps s
164164JOIN pgflow .runs r ON r .flow_slug = s .flow_slug
165165WHERE r .run_id = fail_task .run_id
166166 AND s .step_slug = fail_task .step_slug ;
@@ -193,8 +193,8 @@ IF v_step_failed THEN
193193 );
194194END IF;
195195
196- -- Handle step skipping (when_failed = 'skip' or 'skip-cascade')
197- IF v_step_skipped THEN
196+ -- Handle step skipping (when_exhausted = 'skip' or 'skip-cascade')
197+ IF v_step_skipped THEN
198198 -- Send broadcast event for step skipped
199199 PERFORM realtime .send (
200200 jsonb_build_object(
@@ -211,8 +211,8 @@ IF v_step_skipped THEN
211211 false
212212 );
213213
214- -- For skip-cascade: cascade skip to all downstream dependents
215- IF v_when_failed = ' skip-cascade' THEN
214+ -- For skip-cascade: cascade skip to all downstream dependents
215+ IF v_when_exhausted = ' skip-cascade' THEN
216216 PERFORM pgflow ._cascade_force_skip_steps (fail_task .run_id , fail_task .step_slug , ' handler_failed' );
217217 END IF;
218218
0 commit comments