summaryrefslogtreecommitdiffstats
path: root/wsrep-lib/src/transaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--wsrep-lib/src/transaction.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/wsrep-lib/src/transaction.cpp b/wsrep-lib/src/transaction.cpp
index 451e94dd..7d9e31e6 100644
--- a/wsrep-lib/src/transaction.cpp
+++ b/wsrep-lib/src/transaction.cpp
@@ -1400,10 +1400,19 @@ bool wsrep::transaction::abort_or_interrupt(
}
return true;
}
- else if (client_service_.interrupted(lock))
+
+ if (client_service_.interrupted(lock))
{
+ assert(state() != s_must_abort &&
+ state() != s_aborting &&
+ state() != s_aborted);
+
+ // Client was interrupted. Set the appropriate error and abort.
+ // For transactions in prepared state, it is OK to interrupt the
+ // statement, but transaction must remain in prepared state until
+ // commit or rollback.
client_state_.override_error(wsrep::e_interrupted_error);
- if (state() != s_must_abort)
+ if (state() != s_prepared)
{
state(lock, s_must_abort);
}