From ae13d87aedd6d1ccc5fc8a10b5fe1deacc69c05a Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 17 May 2021 16:05:50 +0200 Subject: [PATCH] Use workers for module failure mirroring and fix mirror looping --- modules/status.go | 8 ++++---- notifications/module-mirror.go | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/status.go b/modules/status.go index fb7a93d..5552dfa 100644 --- a/modules/status.go +++ b/modules/status.go @@ -139,7 +139,7 @@ func (m *Module) setFailure(status uint8, id, title, msg string) { // Propagate failure status. if failureUpdateNotifyFuncReady.IsSet() { - m.newTask("failure status updater", func(context.Context, *Task) error { + m.RunWorker("failure status updater", func(context.Context) error { // Only use data in worker that won't change anymore. // Resolve previous failure state if available. @@ -151,7 +151,7 @@ func (m *Module) setFailure(status uint8, id, title, msg string) { failureUpdateNotifyFunc(status, id, title, msg) return nil - }).QueuePrioritized() + }) } } @@ -181,11 +181,11 @@ func (m *Module) Resolve(failureID string) { // Propagate failure status. if failureUpdateNotifyFuncReady.IsSet() { - m.newTask("failure status updater", func(context.Context, *Task) error { + m.RunWorker("failure status updater", func(context.Context) error { // Only use data in worker that won't change anymore. failureUpdateNotifyFunc(FailureNone, resolveFailureID, "", "") return nil - }).QueuePrioritized() + }) } } diff --git a/notifications/module-mirror.go b/notifications/module-mirror.go index 24f0741..3d557d3 100644 --- a/notifications/module-mirror.go +++ b/notifications/module-mirror.go @@ -70,7 +70,13 @@ func mirrorModuleStatus(moduleFailure uint8, id, title, msg string) { // The notification already exists. // Check if we should delete it. - if moduleFailure == modules.FailureNone { + if moduleFailure == modules.FailureNone && !n.Meta().IsDeleted() { + + // Remove belongsTo, as the deletion was already triggered by the module itself. + n.Lock() + n.belongsTo = nil + n.Unlock() + n.Delete() } @@ -92,6 +98,8 @@ func mirrorModuleStatus(moduleFailure uint8, id, title, msg string) { } switch moduleFailure { + case modules.FailureNone: + return case modules.FailureHint: n.Type = Info n.AvailableActions = nil