diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go index d6d844c03eb2432f3dcb2349c68e14e0ae62e478..d750ecbd59f1fd63af673b32456681aaef36e2b9 100644 --- a/packages/binary/messagelayer/tangle/tangle.go +++ b/packages/binary/messagelayer/tangle/tangle.go @@ -5,24 +5,15 @@ import ( "runtime" "time" - "github.com/iotaledger/hive.go/kvstore" - "github.com/iotaledger/hive.go/types" - "github.com/iotaledger/goshimmer/packages/binary/messagelayer/message" "github.com/iotaledger/goshimmer/packages/binary/storageprefix" - "github.com/iotaledger/hive.go/async" + "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hive.go/types" ) const ( - // MaxMissingTimeBeforeCleanup is the max. amount of time a message can be marked as missing - // before it is ultimately un-marked as missing. - MaxMissingTimeBeforeCleanup = 30 * time.Second - // MissingCheckInterval is the interval on which it is checked whether a missing - // message is still missing. - MissingCheckInterval = 5 * time.Second - cacheTime = 20 * time.Second ) @@ -271,46 +262,6 @@ func (tangle *Tangle) checkMessageSolidityAndPropagate(cachedMessage *message.Ca } } -// MonitorMissingMessages continuously monitors for missing messages and eventually deletes them if they -// don't become available in a certain time frame. -func (tangle *Tangle) MonitorMissingMessages(shutdownSignal <-chan struct{}) { - reCheckInterval := time.NewTicker(MissingCheckInterval) - defer reCheckInterval.Stop() - for { - 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) - // TODO: obvious race condition between receiving the message and it getting deleted here - tangle.deleteFutureCone(msgID) - } - case <-shutdownSignal: - return - } - } -} - // deletes the given approver association for the given approvee to its approver. func (tangle *Tangle) deleteApprover(approvedMessageId message.Id, approvingMessage message.Id) { idToDelete := make([]byte, message.IdLength+message.IdLength) diff --git a/plugins/messagelayer/plugin.go b/plugins/messagelayer/plugin.go index 2286db7e2b0b0c4da55d953d8bc9fe719174f65a..504f1977c9c2dad2e03aae58d1cac2b386ff47db 100644 --- a/plugins/messagelayer/plugin.go +++ b/plugins/messagelayer/plugin.go @@ -129,13 +129,6 @@ 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 { - log.Panicf("Failed to start as daemon: %s", err) - } - if err := daemon.BackgroundWorker("Tangle", func(shutdownSignal <-chan struct{}) { <-shutdownSignal messageFactory.Shutdown() @@ -144,5 +137,4 @@ func run(*node.Plugin) { }, shutdown.PriorityTangle); err != nil { log.Panicf("Failed to start as daemon: %s", err) } - }