@@ -119,33 +119,41 @@ public function start_run(string $source_system, migration_config_dto $config):
119119 throw new \RuntimeException ("Another migration is already running for source: {$ source_system }" );
120120 }
121121
122- $ run_state = $ this ->state_manager ->create_run ($ run_id , $ source_system , $ source_version , $ config );
122+ try
123+ {
124+ $ run_state = $ this ->state_manager ->create_run ($ run_id , $ source_system , $ source_version , $ config );
123125
124- // Resolve ordered steps
125- $ requested_steps = !empty ($ config ->selected_steps ) ? $ config ->selected_steps : $ provider ->get_supported_steps ();
126- $ ordered_steps = $ this ->step_registry ->resolve_order ($ requested_steps , $ source_system );
126+ // Resolve ordered steps
127+ $ requested_steps = !empty ($ config ->selected_steps ) ? $ config ->selected_steps : $ provider ->get_supported_steps ();
128+ $ ordered_steps = $ this ->step_registry ->resolve_order ($ requested_steps , $ source_system );
127129
128- $ steps_init = [];
129- foreach ($ ordered_steps as $ order => $ step_name )
130- {
131- $ total = $ provider ->get_total_records ($ step_name , $ config );
132- $ max_id = $ provider ->get_max_source_id ($ step_name , $ config );
133- $ steps_init [] = [
134- 'step_name ' => $ step_name ,
135- 'step_order ' => $ order + 1 ,
136- 'total_records ' => $ total ,
137- 'max_source_id ' => $ max_id ,
138- ];
139- }
130+ $ steps_init = [];
131+ foreach ($ ordered_steps as $ order => $ step_name )
132+ {
133+ $ total = $ provider ->get_total_records ($ step_name , $ config );
134+ $ max_id = $ provider ->get_max_source_id ($ step_name , $ config );
135+ $ steps_init [] = [
136+ 'step_name ' => $ step_name ,
137+ 'step_order ' => $ order + 1 ,
138+ 'total_records ' => $ total ,
139+ 'max_source_id ' => $ max_id ,
140+ ];
141+ }
140142
141- $ this ->state_manager ->init_steps ($ run_id , $ steps_init );
142- $ this ->state_manager ->update_run_status ($ run_id , 'ready ' , $ ordered_steps [0 ] ?? '' );
143+ $ this ->state_manager ->init_steps ($ run_id , $ steps_init );
144+ $ this ->state_manager ->update_run_status ($ run_id , 'ready ' , $ ordered_steps [0 ] ?? '' );
143145
144- // Release initial creation lock so it is not held idly before batches start
145- $ this ->lock_manager ->release ($ lock_name , $ run_id );
146+ // Release initial creation lock so it is not held idly before batches start
147+ $ this ->lock_manager ->release ($ lock_name , $ run_id );
146148
147- $ run_state = $ this ->state_manager ->get_run ($ run_id );
148- return $ run_state ;
149+ $ run_state = $ this ->state_manager ->get_run ($ run_id );
150+ return $ run_state ;
151+ }
152+ catch (\Throwable $ e )
153+ {
154+ $ this ->lock_manager ->release ($ lock_name , $ run_id );
155+ throw $ e ;
156+ }
149157 }
150158
151159 /**
0 commit comments