From 255792c9e9c26d2909d9e7c6b920cc9aeeff5631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Chirico=20Indreb=C3=B8?= Date: Thu, 20 Jun 2024 11:01:23 +0200 Subject: [PATCH] Move missionwise localisation inside semaphore --- backend/api/EventHandlers/MissionEventHandler.cs | 7 +++++-- backend/api/Services/MissionSchedulingService.cs | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/api/EventHandlers/MissionEventHandler.cs b/backend/api/EventHandlers/MissionEventHandler.cs index 5b56b14a5..336e57d18 100644 --- a/backend/api/EventHandlers/MissionEventHandler.cs +++ b/backend/api/EventHandlers/MissionEventHandler.cs @@ -74,16 +74,17 @@ private async void OnMissionRunCreated(object? sender, MissionRunCreatedEventArg bool isFirstMissionInQueue = false; + _scheduleLocalizationSemaphore.WaitOne(); if (!await LocalizationService.RobotIsLocalized(missionRun.Robot.Id)) { isFirstMissionInQueue = true; if (missionRun.Robot.RobotCapabilities != null && !missionRun.Robot.RobotCapabilities.Contains(RobotCapabilitiesEnum.localize)) { await RobotService.UpdateCurrentArea(missionRun.Robot.Id, missionRun.Area); + _logger.LogInformation("{Message}", $"Set robot with ID {missionRun.Robot.Id} to localised for mission run with ID {missionRun.Id}"); } else { - _scheduleLocalizationSemaphore.WaitOne(); if (await MissionService.PendingLocalizationMissionRunExists(missionRun.Robot.Id) || await MissionService.OngoingLocalizationMissionRunExists(missionRun.Robot.Id)) { @@ -102,6 +103,7 @@ private async void OnMissionRunCreated(object? sender, MissionRunCreatedEventArg missionRun.Status = MissionStatus.Aborted; missionRun.StatusReason = "Aborted: Robot was not available"; await MissionService.Update(missionRun); + _scheduleLocalizationSemaphore.Release(); return; } catch (Exception ex) when ( @@ -115,11 +117,12 @@ or IsarCommunicationException missionRun.Status = MissionStatus.Aborted; missionRun.StatusReason = "Aborted: Robot was not correctly localized"; await MissionService.Update(missionRun); + _scheduleLocalizationSemaphore.Release(); return; } - finally { _scheduleLocalizationSemaphore.Release(); } } } + _scheduleLocalizationSemaphore.Release(); await CancelReturnToHomeOnNewMissionSchedule(missionRun); diff --git a/backend/api/Services/MissionSchedulingService.cs b/backend/api/Services/MissionSchedulingService.cs index 1d3a52a9b..aacedb644 100644 --- a/backend/api/Services/MissionSchedulingService.cs +++ b/backend/api/Services/MissionSchedulingService.cs @@ -71,6 +71,7 @@ public async Task StartNextMissionRunIfSystemIsAvailable(string robotId, bool is await robotService.UpdateCurrentArea(robot.Id, null); } if (missionRun == null) { return; } // The robot is already home + isFirstMissionInQueue = false; } if (!await TheSystemIsAvailableToRunAMission(robot.Id, missionRun.Id))