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

[1.0.3] Optimize handling of invalid vote message #913

Merged
merged 2 commits into from
Oct 9, 2024

Conversation

heifner
Copy link
Member

@heifner heifner commented Oct 9, 2024

Small optimization of handling of errors for vote messages. Shortcut out of loop when connection is found.
Improve error message for invalid vote message.

@heifner heifner requested review from greg7mdp and linh2931 October 9, 2024 12:41
@heifner heifner added the OCI Work exclusive to OCI team label Oct 9, 2024
@heifner heifner added this to the Spring v1.0.3 milestone Oct 9, 2024
@@ -4025,19 +4025,25 @@ namespace eosio {
case vote_result_t::invalid_signature:
case vote_result_t::max_exceeded: // close peer immediately
fc_elog(vote_logger, "Exceeded max votes per connection for ${c}", ("c", connection_id));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not from your PR. But this logging only lists Exceeded max votes as the failure reason. It can be unknown_public_key or invalid_signature

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed it.

fc_elog(vote_logger, "Exceeded max votes per connection for ${c}", ("c", connection_id));
my_impl->connections.for_each_connection([connection_id](const connection_ptr& c) {
fc_elog(vote_logger, "Invalid vote(s), closing connection - ${c}", ("c", connection_id));
my_impl->connections.any_of_connections([connection_id](const connection_ptr& c) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe define a new API in connections_manager:

      template <typename F>
      void for_connection(uint32_t connection_id, F&& f) {
         any_of_connections([connection_id, f = std::forward<F>(f)](const connection_ptr& c) {
            if (c->connection_id == connection_id) {
               f();
               return true;
            }
            return false;
         });

@heifner heifner merged commit cc90288 into release/1.0 Oct 9, 2024
36 checks passed
@heifner heifner deleted the opt-vote-handling branch October 9, 2024 14:17
@ericpassmore
Copy link
Contributor

Note:start
category: System Stability
component: Internal
summary: Improve error handling of vote messages, improve log message and shortcut out of loop when connection is found.
Note:end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
OCI Work exclusive to OCI team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants