@@ -278,6 +278,15 @@ let rec name_of_atomic = function
278
278
| Best_effort atomic ->
279
279
Printf. sprintf " Best_effort (%s)" (name_of_atomic atomic)
280
280
281
+ let rec atomic_expires_after = function
282
+ | Serial (_ , _ , ops ) ->
283
+ List. map atomic_expires_after ops |> List. fold_left ( +. ) 0.
284
+ | Parallel (_ , _ , ops ) ->
285
+ List. map atomic_expires_after ops |> List. fold_left Float. max 0.
286
+ | _ ->
287
+ (* 20 minutes, in seconds *)
288
+ 1200.
289
+
281
290
type vm_migrate_op = {
282
291
vmm_id : Vm .id
283
292
; vmm_vdi_map : (string * string ) list
@@ -1848,7 +1857,7 @@ let with_tracing ~name ~task f =
1848
1857
warn " Failed to start tracing: %s" (Printexc. to_string e) ;
1849
1858
f ()
1850
1859
1851
- let rec perform_atomic ~progress_callback ?subtask : _ ? result (op : atomic )
1860
+ let rec perform_atomic ~progress_callback ?result (op : atomic )
1852
1861
(t : Xenops_task.task_handle ) : unit =
1853
1862
let module B = (val get_backend () : S ) in
1854
1863
with_tracing ~name: (name_of_atomic op) ~task: t @@ fun () ->
@@ -2341,16 +2350,17 @@ and queue_atomics_and_wait ~progress_callback ~max_parallel_atoms dbg id ops =
2341
2350
let atom_id =
2342
2351
Printf. sprintf " %s.chunk=%d.atom=%d" id chunk_idx atom_idx
2343
2352
in
2344
- queue_atomic_int ~progress_callback dbg atom_id op
2353
+ ( queue_atomic_int ~progress_callback dbg atom_id op, op)
2345
2354
)
2346
2355
ops
2347
2356
in
2348
2357
let timeout_start = Unix. gettimeofday () in
2349
2358
List. map
2350
- (fun task ->
2359
+ (fun ( task , op ) ->
2351
2360
let task_id = Xenops_task. id_of_handle task in
2361
+ let expiration = atomic_expires_after op in
2352
2362
let completion =
2353
- event_wait updates task ~from ~timeout_start 1200.0
2363
+ event_wait updates task ~from ~timeout_start expiration
2354
2364
(is_task task_id) task_ended
2355
2365
in
2356
2366
(task_id, task, completion)
@@ -2386,7 +2396,7 @@ let perform_atomics atomics t =
2386
2396
progress_callback progress (weight /. total_weight) t
2387
2397
in
2388
2398
debug " Performing: %s" (string_of_atomic x) ;
2389
- perform_atomic ~subtask: (string_of_atomic x) ~ progress_callback x t ;
2399
+ perform_atomic ~progress_callback x t ;
2390
2400
progress_callback 1. ;
2391
2401
progress +. (weight /. total_weight)
2392
2402
)
@@ -2520,8 +2530,7 @@ and trigger_cleanup_after_failure_atom op t =
2520
2530
| VM_import_metadata _ ->
2521
2531
()
2522
2532
2523
- and perform_exn ?subtask ?result (op : operation ) (t : Xenops_task.task_handle )
2524
- : unit =
2533
+ and perform_exn ?result (op : operation ) (t : Xenops_task.task_handle ) : unit =
2525
2534
let module B = (val get_backend () : S ) in
2526
2535
with_tracing ~name: (name_of_operation op) ~task: t @@ fun () ->
2527
2536
match op with
@@ -2648,9 +2657,7 @@ and perform_exn ?subtask ?result (op : operation) (t : Xenops_task.task_handle)
2648
2657
(id, vm.Vm. memory_dynamic_min, vm.Vm. memory_dynamic_min)
2649
2658
in
2650
2659
let (_ : unit ) =
2651
- perform_atomic ~subtask: (string_of_atomic atomic)
2652
- ~progress_callback: (fun _ -> () )
2653
- atomic t
2660
+ perform_atomic ~progress_callback: (fun _ -> () ) atomic t
2654
2661
in
2655
2662
(* Waiting here is not essential but adds a degree of safety and
2656
2663
reducess unnecessary memory copying. *)
@@ -3162,7 +3169,7 @@ and perform_exn ?subtask ?result (op : operation) (t : Xenops_task.task_handle)
3162
3169
VUSB_DB. signal id
3163
3170
| Atomic op ->
3164
3171
let progress_callback = progress_callback 0. 1. t in
3165
- perform_atomic ~progress_callback ?subtask ? result op t
3172
+ perform_atomic ~progress_callback ?result op t
3166
3173
3167
3174
and verify_power_state op =
3168
3175
let module B = (val get_backend () : S ) in
@@ -3191,7 +3198,7 @@ and perform ?subtask ?result (op : operation) (t : Xenops_task.task_handle) :
3191
3198
unit =
3192
3199
let one op =
3193
3200
verify_power_state op ;
3194
- try perform_exn ?subtask ? result op t
3201
+ try perform_exn ?result op t
3195
3202
with e ->
3196
3203
Backtrace. is_important e ;
3197
3204
info " Caught %s executing %s: triggering cleanup actions"
0 commit comments