From 8caed829b461b015141d2dcd57d9b3457ba0f7f0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 21 Mar 2018 15:40:25 -0500 Subject: [PATCH] Fixes an issue where we were using a non-overwriting insert which wasn't updating the sequence number which was causing all vote traffic to be reflected. --- rai/core_test/block.cpp | 2 +- rai/core_test/ledger.cpp | 3 +++ rai/node/node.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/rai/core_test/block.cpp b/rai/core_test/block.cpp index bbc55f0e..34d58194 100644 --- a/rai/core_test/block.cpp +++ b/rai/core_test/block.cpp @@ -341,7 +341,7 @@ TEST (state_block, serialization) rai::vectorstream stream (bytes); block1.serialize (stream); } - ASSERT_EQ (0x5, bytes [215]); // Ensure work is serialized big-endian + ASSERT_EQ (0x5, bytes[215]); // Ensure work is serialized big-endian ASSERT_EQ (rai::state_block::size, bytes.size ()); bool error1; rai::bufferstream stream (bytes.data (), bytes.size ()); diff --git a/rai/core_test/ledger.cpp b/rai/core_test/ledger.cpp index 2a8f069c..547d70c9 100644 --- a/rai/core_test/ledger.cpp +++ b/rai/core_test/ledger.cpp @@ -842,15 +842,18 @@ TEST (votes, add_existing) auto votes1 (node1.active.roots.find (send1->root ())->election); auto vote1 (std::make_shared (rai::test_genesis_key.pub, rai::test_genesis_key.prv, 1, send1)); votes1->vote (vote1); + ASSERT_EQ (1, votes1->last_votes[rai::test_genesis_key.pub].second); rai::keypair key2; auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0)); auto vote2 (std::make_shared (rai::test_genesis_key.pub, rai::test_genesis_key.prv, 2, send2)); // Pretend we've waited the timeout votes1->last_votes[rai::test_genesis_key.pub].first = std::chrono::steady_clock::now () - std::chrono::seconds (20); votes1->vote (vote2); + ASSERT_EQ (2, votes1->last_votes[rai::test_genesis_key.pub].second); // Also resend the old vote, and see if we respect the sequence number votes1->last_votes[rai::test_genesis_key.pub].first = std::chrono::steady_clock::now () - std::chrono::seconds (20); votes1->vote (vote1); + ASSERT_EQ (2, votes1->last_votes[rai::test_genesis_key.pub].second); ASSERT_EQ (2, votes1->votes.rep_votes.size ()); ASSERT_NE (votes1->votes.rep_votes.end (), votes1->votes.rep_votes.find (rai::test_genesis_key.pub)); ASSERT_EQ (*send2, *votes1->votes.rep_votes[rai::test_genesis_key.pub]); diff --git a/rai/node/node.cpp b/rai/node/node.cpp index f069868b..9dc4b827 100644 --- a/rai/node/node.cpp +++ b/rai/node/node.cpp @@ -2946,7 +2946,7 @@ bool rai::election::vote (std::shared_ptr vote_a) } if (should_process) { - last_votes.insert (std::make_pair (vote_a->account, std::make_pair (std::chrono::steady_clock::now (), vote_a->sequence))); + last_votes[vote_a->account] = std::make_pair (std::chrono::steady_clock::now (), vote_a->sequence); node.network.republish_vote (vote_a); votes.vote (vote_a); confirm_if_quorum (transaction);