diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go index 9a5f02151a769ded0328f7fe9cfc8da269c76261..26158982caca8548f07f2ec2b69d35856150a053 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 5e7cd7d83db0699cfccdd144c5bd7f20d80939ba..8fa819b1510e98701a0755ca7fe7387f0f3ec899 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 {