Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better error messages #1225

Merged
merged 9 commits into from
Oct 11, 2018
59 changes: 59 additions & 0 deletions rai/node/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,65 @@ void rai::message_header::ipv4_only_set (bool value_a)
// MTU - IP header - UDP header
const size_t rai::message_parser::max_safe_udp_message_size = 508;

std::string rai::message_parser::status_string ()
{
switch (status)
{
case rai::message_parser::parse_status::success:
{
return "success";
}
case rai::message_parser::parse_status::insufficient_work:
{
return "insufficient_work";
}
case rai::message_parser::parse_status::invalid_header:
{
return "invalid_header";
}
case rai::message_parser::parse_status::invalid_message_type:
{
return "invalid_message_type";
}
case rai::message_parser::parse_status::invalid_keepalive_message:
{
return "invalid_keepalive_message";
}
case rai::message_parser::parse_status::invalid_publish_message:
{
return "invalid_publish_message";
}
case rai::message_parser::parse_status::invalid_confirm_req_message:
{
return "invalid_confirm_req_message";
}
case rai::message_parser::parse_status::invalid_confirm_ack_message:
{
return "invalid_confirm_ack_message";
}
case rai::message_parser::parse_status::invalid_node_id_handshake_message:
{
return "invalid_node_id_handshake_message";
}
case rai::message_parser::parse_status::outdated_version:
{
return "outdated_version";
}
case rai::message_parser::parse_status::invalid_magic:
{
return "invalid_magic";
}
case rai::message_parser::parse_status::invalid_network:
{
return "invalid_network";
}
}

assert (false);

return "[unknown parse_status]";
}

rai::message_parser::message_parser (rai::message_visitor & visitor_a, rai::work_pool & pool_a) :
visitor (visitor_a),
pool (pool_a),
Expand Down
1 change: 1 addition & 0 deletions rai/node/common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ class message_parser
rai::message_visitor & visitor;
rai::work_pool & pool;
parse_status status;
std::string status_string ();
static const size_t max_safe_udp_message_size;
};
class keepalive : public message
Expand Down
118 changes: 42 additions & 76 deletions rai/node/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -607,84 +607,50 @@ void rai::network::receive_action (rai::udp_data * data_a)
{
node.stats.inc (rai::stat::type::error);

if (parser.status == rai::message_parser::parse_status::insufficient_work)
switch (parser.status)
{
if (node.config.logging.insufficient_work_logging ())
{
BOOST_LOG (node.log) << "Insufficient work in message";
}

// We've already increment error count, update detail only
node.stats.inc_detail_only (rai::stat::type::error, rai::stat::detail::insufficient_work);
}
else if (parser.status == rai::message_parser::parse_status::invalid_message_type)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid message type in message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_header)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid header in message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_keepalive_message)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid keepalive message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_publish_message)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid publish message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_confirm_req_message)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid confirm_req message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_confirm_ack_message)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid confirm_ack message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_node_id_handshake_message)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid node_id_handshake message";
}
}
else if (parser.status == rai::message_parser::parse_status::invalid_magic)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid magic in header";
}
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_magic);
}
else if (parser.status == rai::message_parser::parse_status::invalid_network)
{
if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Invalid network in header";
}
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_network);
case rai::message_parser::parse_status::insufficient_work:
// We've already increment error count, update detail only
node.stats.inc_detail_only (rai::stat::type::error, rai::stat::detail::insufficient_work);
break;
case rai::message_parser::parse_status::invalid_magic:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_magic);
break;
case rai::message_parser::parse_status::invalid_network:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_network);
break;
case rai::message_parser::parse_status::invalid_header:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_header);
break;
case rai::message_parser::parse_status::invalid_message_type:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_message_type);
break;
case rai::message_parser::parse_status::invalid_keepalive_message:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_keepalive_message);
break;
case rai::message_parser::parse_status::invalid_publish_message:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_publish_message);
break;
case rai::message_parser::parse_status::invalid_confirm_req_message:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_confirm_req_message);
break;
case rai::message_parser::parse_status::invalid_confirm_ack_message:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_confirm_ack_message);
break;
case rai::message_parser::parse_status::invalid_node_id_handshake_message:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::invalid_node_id_handshake_message);
break;
case rai::message_parser::parse_status::outdated_version:
node.stats.inc (rai::stat::type::udp, rai::stat::detail::outdated_version);
break;
case rai::message_parser::parse_status::success:
/* Already checked, unreachable */
break;
}
else

if (node.config.logging.network_logging ())
{
BOOST_LOG (node.log) << "Could not deserialize buffer";
BOOST_LOG (node.log) << "Could not parse message. Error: " << parser.status_string ();
}
}
else
Expand Down Expand Up @@ -1952,7 +1918,7 @@ void rai::gap_cache::vote (std::shared_ptr<rai::vote> vote_a)
{
if (!node_l->bootstrap_initiator.in_progress ())
{
BOOST_LOG (node_l->log) << boost::str (boost::format ("Missing confirmed block %1%") % hash.to_string ());
BOOST_LOG (node_l->log) << boost::str (boost::format ("Missing block %1% which has enough votes to warrant bootstrapping it") % hash.to_string ());
}
node_l->bootstrap_initiator.bootstrap ();
}
Expand Down
24 changes: 24 additions & 0 deletions rai/node/stats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,30 @@ std::string rai::stat::detail_to_string (uint32_t key)
case rai::stat::detail::invalid_network:
res = "invalid_network";
break;
case rai::stat::detail::invalid_header:
res = "invalid_header";
break;
case rai::stat::detail::invalid_message_type:
res = "invalid_message_type";
break;
case rai::stat::detail::invalid_keepalive_message:
res = "invalid_keepalive_message";
break;
case rai::stat::detail::invalid_publish_message:
res = "invalid_publish_message";
break;
case rai::stat::detail::invalid_confirm_req_message:
res = "invalid_confirm_req_message";
break;
case rai::stat::detail::invalid_confirm_ack_message:
res = "invalid_confirm_ack_message";
break;
case rai::stat::detail::invalid_node_id_handshake_message:
res = "invalid_node_id_handshake_message";
break;
case rai::stat::detail::outdated_version:
res = "outdated_version";
break;
}
return res;
}
Expand Down
8 changes: 8 additions & 0 deletions rai/node/stats.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,14 @@ class stat
overflow,
invalid_magic,
invalid_network,
invalid_header,
invalid_message_type,
invalid_keepalive_message,
invalid_publish_message,
invalid_confirm_req_message,
invalid_confirm_ack_message,
invalid_node_id_handshake_message,
outdated_version,

// peering
handshake,
Expand Down