From ef89a2015126c8c1f117a14a6493bf2fded82361 Mon Sep 17 00:00:00 2001 From: Luca Moser <moser.luca@gmail.com> Date: Tue, 9 Jun 2020 17:50:01 +0200 Subject: [PATCH] fixes comm-layer msg loss (#459) --- packages/binary/messagelayer/tangle/tangle.go | 9 +++++++++ plugins/messagelayer/plugin.go | 1 + 2 files changed, 10 insertions(+) diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go index 9a5f0215..26158982 100644 --- a/packages/binary/messagelayer/tangle/tangle.go +++ b/packages/binary/messagelayer/tangle/tangle.go @@ -274,16 +274,25 @@ func (tangle *Tangle) MonitorMissingMessages(shutdownSignal <-chan struct{}) { select { case <-reCheckInterval.C: var toDelete []message.Id + var toUnmark []message.Id tangle.missingMessageStorage.ForEach(func(key []byte, cachedObject objectstorage.CachedObject) bool { defer cachedObject.Release() missingMessage := cachedObject.Get().(*MissingMessage) + if tangle.messageStorage.Contains(missingMessage.messageId.Bytes()) { + toUnmark = append(toUnmark, missingMessage.MessageId()) + return true + } + // check whether message is missing since over our max time delta if time.Since(missingMessage.MissingSince()) >= MaxMissingTimeBeforeCleanup { toDelete = append(toDelete, missingMessage.MessageId()) } return true }) + for _, msgID := range toUnmark { + tangle.missingMessageStorage.DeleteIfPresent(msgID.Bytes()) + } for _, msgID := range toDelete { // delete the future cone of the missing message tangle.Events.MessageUnsolidifiable.Trigger(msgID) diff --git a/plugins/messagelayer/plugin.go b/plugins/messagelayer/plugin.go index 5e7cd7d8..8fa819b1 100644 --- a/plugins/messagelayer/plugin.go +++ b/plugins/messagelayer/plugin.go @@ -73,6 +73,7 @@ func configure(*node.Plugin) { } func run(*node.Plugin) { + if err := daemon.BackgroundWorker("Tangle[MissingMessagesMonitor]", func(shutdownSignal <-chan struct{}) { Tangle.MonitorMissingMessages(shutdownSignal) }, shutdown.PriorityMissingMessagesMonitoring); err != nil { -- GitLab