gossip: save sender for kept messages (#3738)

This commit is contained in:
Weiliang Li
2019-10-09 00:16:24 +09:00
committed by André Silva
parent 6cebbbf8b2
commit 520009973f
@@ -89,6 +89,7 @@ struct MessageEntry<B: BlockT> {
message_hash: B::Hash,
topic: B::Hash,
message: ConsensusMessage,
sender: Option<PeerId>,
}
/// Consensus message destination.
@@ -322,12 +323,14 @@ impl<B: BlockT> ConsensusGossip<B> {
message_hash: B::Hash,
topic: B::Hash,
message: ConsensusMessage,
sender: Option<PeerId>,
) {
if self.known_messages.insert(message_hash.clone(), ()).is_none() {
self.messages.push(MessageEntry {
message_hash,
topic,
message,
sender,
});
}
}
@@ -343,7 +346,7 @@ impl<B: BlockT> ConsensusGossip<B> {
message: ConsensusMessage,
) {
let message_hash = HashFor::<B>::hash(&message.data[..]);
self.register_message_hashed(message_hash, topic, message);
self.register_message_hashed(message_hash, topic, message, None);
}
/// Call when a peer has been disconnected to stop tracking gossip status.
@@ -429,7 +432,7 @@ impl<B: BlockT> ConsensusGossip<B> {
{
tx.unbounded_send(TopicNotification {
message: entry.message.data.clone(),
sender: None,
sender: entry.sender.clone(),
})
.expect("receiver known to be live; qed");
}
@@ -498,7 +501,7 @@ impl<B: BlockT> ConsensusGossip<B> {
}
}
if keep {
self.register_message_hashed(message_hash, topic, message);
self.register_message_hashed(message_hash, topic, message, Some(who.clone()));
}
} else {
trace!(target:"gossip", "Ignored statement from unregistered peer {}", who);
@@ -553,7 +556,7 @@ impl<B: BlockT> ConsensusGossip<B> {
force: bool,
) {
let message_hash = HashFor::<B>::hash(&message.data);
self.register_message_hashed(message_hash, topic, message.clone());
self.register_message_hashed(message_hash, topic, message.clone(), None);
let intent = if force { MessageIntent::ForcedBroadcast } else { MessageIntent::Broadcast };
propagate(protocol, iter::once((&message_hash, &topic, &message)), intent, &mut self.peers, &self.validators);
}
@@ -618,6 +621,7 @@ mod tests {
message_hash: $hash,
topic: $topic,
message: ConsensusMessage { data: $m, engine_id: [0, 0, 0, 0]},
sender: None,
});
}
}