diff --git a/api/registration.ml b/api/registration.ml index 46d3d24f..4663d0f3 100644 --- a/api/registration.ml +++ b/api/registration.ml @@ -14,11 +14,13 @@ let local ~register = match worker with | None -> Service.fail "Missing worker argument!" | Some worker -> - let response, results = Service.Response.create Results.init_pointer in - let queue = register ~name ~capacity worker in - Results.queue_set results (Some queue); - Capability.dec_ref queue; - Service.return response + match register ~name ~capacity worker with + | Error `Name_taken -> Service.fail "Worker already registered!" + | Ok queue -> + let response, results = Service.Response.create Results.init_pointer in + Results.queue_set results (Some queue); + Capability.dec_ref queue; + Service.return response end module X = Raw.Client.Registration diff --git a/scheduler/cluster_scheduler.ml b/scheduler/cluster_scheduler.ml index 32e76ccf..63273922 100644 --- a/scheduler/cluster_scheduler.ml +++ b/scheduler/cluster_scheduler.ml @@ -97,14 +97,15 @@ module Pool_api = struct let register t ~name ~capacity worker = match Pool.register t.pool ~name ~capacity with - | Error `Name_taken -> - Fmt.failwith "Worker already registered!"; + | Error `Name_taken as e -> + Log.warn (fun f -> f "Worker %S already registered!" name); + e | Ok q -> Pool.set_active q true; Log.info (fun f -> f "Registered new worker %S" name); Hashtbl.add t.workers name worker; Lwt_condition.broadcast t.cond (); - Cluster_api.Queue.local + let queue = Cluster_api.Queue.local ~pop:(pop q) ~set_active:(Pool.set_active q) ~release:(fun () -> @@ -112,6 +113,8 @@ module Pool_api = struct Capability.dec_ref worker; Pool.release q ) + in + Ok queue let registration_service t = let register = register t in