mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-31 18:24:25 +03:00
Ensure that client_service::will_replay() is called.
Modified tests to verify that client_service::will_replay() is called whenever it is determined that the transaction must replay. Added a test to verify behavior when provider::commit_order_enter() returns BF abort error. Moved call to client_service::will_replay() into transaction::state() to ensure that it is always called when shift to s_must_replay happens.
This commit is contained in:
@ -249,6 +249,46 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(
|
||||
BOOST_REQUIRE(cc.current_error());
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE_TEMPLATE(
|
||||
transaction_1pc_bf_during_commit_order_enter, T,
|
||||
replicating_fixtures, T)
|
||||
{
|
||||
wsrep::mock_client& cc(T::cc);
|
||||
const wsrep::transaction& tc(T::tc);
|
||||
auto& sc(T::sc);
|
||||
|
||||
// Start a new transaction with ID 1
|
||||
cc.start_transaction(wsrep::transaction_id(1));
|
||||
BOOST_REQUIRE(tc.active());
|
||||
BOOST_REQUIRE(tc.id() == wsrep::transaction_id(1));
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_executing);
|
||||
|
||||
sc.provider().commit_order_enter_result_ = wsrep::provider::error_bf_abort;
|
||||
|
||||
// Run before commit
|
||||
BOOST_REQUIRE(cc.before_commit());
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.will_replay_called() == true);
|
||||
BOOST_REQUIRE(tc.certified() == true);
|
||||
BOOST_REQUIRE(tc.ordered() == true);
|
||||
|
||||
sc.provider().commit_order_enter_result_ = wsrep::provider::success;
|
||||
|
||||
// Rollback sequence
|
||||
BOOST_REQUIRE(cc.before_rollback() == 0);
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.after_rollback() == 0);
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
|
||||
// Replay from after_statement()
|
||||
cc.after_statement();
|
||||
BOOST_REQUIRE(cc.replays() > 0);
|
||||
BOOST_REQUIRE(tc.active() == false);
|
||||
BOOST_REQUIRE(tc.ordered() == false);
|
||||
BOOST_REQUIRE(tc.certified() == false);
|
||||
BOOST_REQUIRE(not cc.current_error());
|
||||
}
|
||||
|
||||
//
|
||||
// Test a 1PC transaction for which prepare data fails
|
||||
//
|
||||
@ -341,6 +381,7 @@ BOOST_FIXTURE_TEST_CASE(
|
||||
|
||||
BOOST_REQUIRE(cc.before_commit());
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.will_replay_called() == true);
|
||||
BOOST_REQUIRE(cc.after_statement() == 0);
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_committed);
|
||||
BOOST_REQUIRE(cc.current_error() == wsrep::e_success);
|
||||
@ -361,6 +402,7 @@ BOOST_FIXTURE_TEST_CASE(
|
||||
|
||||
BOOST_REQUIRE(cc.before_commit());
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.will_replay_called() == true);
|
||||
BOOST_REQUIRE(cc.after_statement() );
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_aborted);
|
||||
BOOST_REQUIRE(cc.current_error() == wsrep::e_deadlock_error);
|
||||
@ -391,6 +433,7 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(
|
||||
// Run before commit
|
||||
BOOST_REQUIRE(cc.before_commit());
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.will_replay_called() == true);
|
||||
BOOST_REQUIRE(tc.certified() == false);
|
||||
BOOST_REQUIRE(tc.ordered() == true);
|
||||
|
||||
@ -755,6 +798,7 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(
|
||||
// Run before commit
|
||||
BOOST_REQUIRE(cc.before_commit());
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.will_replay_called() == true);
|
||||
BOOST_REQUIRE(tc.certified() == true);
|
||||
BOOST_REQUIRE(tc.ordered() == true);
|
||||
|
||||
@ -1268,6 +1312,7 @@ BOOST_FIXTURE_TEST_CASE(transaction_row_streaming_bf_abort_committing,
|
||||
BOOST_REQUIRE(cc.before_rollback() == 0);
|
||||
BOOST_REQUIRE(cc.after_rollback() == 0);
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_must_replay);
|
||||
BOOST_REQUIRE(cc.will_replay_called() == true);
|
||||
BOOST_REQUIRE(cc.after_statement() == 0);
|
||||
BOOST_REQUIRE(tc.state() == wsrep::transaction::s_committed);
|
||||
BOOST_REQUIRE(sc.provider().fragments() == 2);
|
||||
|
Reference in New Issue
Block a user