From 5da88aa5c5dedf03cf54b4878419658e00b16799 Mon Sep 17 00:00:00 2001 From: Savinda Senevirathne Date: Wed, 12 May 2021 14:55:09 +0530 Subject: [PATCH] Ignoring messages greater than 1MB from peer duplicate message check. (#307) --- src/p2p/peer_session_handler.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/p2p/peer_session_handler.cpp b/src/p2p/peer_session_handler.cpp index 1626e888..a601ae1a 100644 --- a/src/p2p/peer_session_handler.cpp +++ b/src/p2p/peer_session_handler.cpp @@ -18,6 +18,9 @@ namespace p2pmsg = msg::fbuf::p2pmsg; namespace p2p { + // Max size of messages which are subjected to duplicate message check. + constexpr size_t MAX_SIZE_FOR_DUP_CHECK = 1 * 1024 * 1024; // 1 MB + // The set of recent peer message hashes used for duplicate detection. util::rollover_hashset recent_peermsg_hashes(200); @@ -72,14 +75,17 @@ namespace p2p */ int handle_peer_message(p2p::peer_comm_session &session, std::string_view message) { + const size_t message_size = message.size(); // Adding message size to peer message characters(bytes) per minute counter. - session.increment_metric(comm::SESSION_THRESHOLDS::MAX_RAWBYTES_PER_MINUTE, message.size()); + session.increment_metric(comm::SESSION_THRESHOLDS::MAX_RAWBYTES_PER_MINUTE, message_size); const peer_message_info mi = p2pmsg::get_peer_message_info(message, &session); if (!mi.p2p_msg) // Message buffer will be null if peer message was too old. return 0; - if (!recent_peermsg_hashes.try_emplace(crypto::get_hash(message))) + // Messages larger than the duplicate message threshold is ignored from the duplicate message check + // due to the overhead in hash generation for larger messages. + if (message_size <= MAX_SIZE_FOR_DUP_CHECK && !recent_peermsg_hashes.try_emplace(crypto::get_hash(message))) { session.increment_metric(comm::SESSION_THRESHOLDS::MAX_DUPMSGS_PER_MINUTE, 1); LOG_DEBUG << "Duplicate peer message. type:" << mi.type << " from:" << session.display_name();