diff --git a/coriolis/conductor/rpc/client.py b/coriolis/conductor/rpc/client.py index e8d539c2..9a2a12b0 100644 --- a/coriolis/conductor/rpc/client.py +++ b/coriolis/conductor/rpc/client.py @@ -294,7 +294,10 @@ def add_task_progress_update( def update_task_progress_update( self, ctxt, task_id, progress_update_index, new_current_step, new_total_steps=None, new_message=None): - self._cast( + # Must use synchronous RPC: EventManager advances last_perc only after + # this returns; fire-and-forget can lose the final update while state + # has already moved on, preventing any retry. + return self._call( ctxt, 'update_task_progress_update', task_id=task_id, progress_update_index=progress_update_index, new_current_step=new_current_step, diff --git a/coriolis/tests/conductor/rpc/test_client.py b/coriolis/tests/conductor/rpc/test_client.py index 2fc6084b..11d27100 100644 --- a/coriolis/tests/conductor/rpc/test_client.py +++ b/coriolis/tests/conductor/rpc/test_client.py @@ -291,8 +291,7 @@ def test_update_task_progress_update(self): "new_total_steps": None, "new_message": None } - self._test(self.client.update_task_progress_update, args, - rpc_op='_cast') + self._test(self.client.update_task_progress_update, args) def test_create_transfer_schedule(self): args = {