Skip to content
Snippets Groups Projects
Unverified Commit 008b77ff authored by Hans Moog's avatar Hans Moog Committed by GitHub
Browse files

Refactor: Go through new Dataflow and cleanup + revisit (#945)


* Refactor: cleaned up some code

* Fix: fixed a logical bug with invalid messages still having Metadata

Co-authored-by: default avatarHans Moog <hm@mkjc.net>
parent 09724735
No related branches found
No related tags found
No related merge requests found
......@@ -55,28 +55,22 @@ func NewMessageStore(store kvstore.KVStore) (result *MessageStore) {
// StoreMessage stores a new message to the message store.
func (m *MessageStore) StoreMessage(msg *Message) {
var msgIsNew bool
var cachedMsgMetadataObject objectstorage.CachedObject
// retrieve MessageID
messageID := msg.ID()
// store message
cachedMsg := m.messageStorage.ComputeIfAbsent(msg.ObjectStorageKey(), func(key []byte) objectstorage.StorableObject {
msgIsNew = true
// store the message metadata
cachedMsgMetadataObject = m.messageMetadataStorage.Store(NewMessageMetadata(messageID))
msg.Persist()
msg.SetModified()
return msg
})
if !msgIsNew {
cachedMsg.Release()
// store Messages only once by using the existence of the Metadata as a guard
storedMetadata, stored := m.messageMetadataStorage.StoreIfAbsent(NewMessageMetadata(messageID))
if !stored {
return
}
cachedMessage := &CachedMessage{CachedObject: cachedMsg}
cachedMsgMetadata := &CachedMessageMetadata{CachedObject: cachedMsgMetadataObject}
// create typed version of the stored MessageMetadata
cachedMsgMetadata := &CachedMessageMetadata{CachedObject: storedMetadata}
defer cachedMsgMetadata.Release()
// store Message
cachedMessage := &CachedMessage{CachedObject: m.messageStorage.Store(msg)}
defer cachedMessage.Release()
// TODO: approval switch: we probably need to introduce approver types
// store approvers
......@@ -88,16 +82,15 @@ func (m *MessageStore) StoreMessage(msg *Message) {
if m.missingMessageStorage.DeleteIfPresent(messageID[:]) {
m.Events.MissingMessageReceived.Trigger(&CachedMessageEvent{
Message: cachedMessage,
MessageMetadata: cachedMsgMetadata})
MessageMetadata: cachedMsgMetadata,
})
}
// messages are stored, trigger MessageStored event to move on next check
m.Events.MessageStored.Trigger(&CachedMessageEvent{
Message: cachedMessage,
MessageMetadata: cachedMsgMetadata})
cachedMessage.Release()
cachedMsgMetadata.Release()
MessageMetadata: cachedMsgMetadata,
})
}
// Message retrieves a message from the message store.
......
......@@ -67,7 +67,6 @@ func (t *Tangle) isMessageSolid(msg *Message, msgMetadata *MessageMetadata) bool
// builds up a stack from the given message and tries to solidify into the present.
// missing messages which are needed for a message to become solid are marked as missing.
func (t *Tangle) checkMessageSolidityAndPropagate(cachedMessage *CachedMessage, cachedMsgMetadata *CachedMessageMetadata) {
popElementsFromStack := func(stack *list.List) (*CachedMessage, *CachedMessageMetadata) {
currentSolidificationEntry := stack.Front()
currentCachedMsg := currentSolidificationEntry.Value.([2]interface{})[0]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment