summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2023-03-17 14:23:03 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2023-03-17 14:23:03 +0200
commit7343a2ceb67e4e408e24f3b28a714e106ffe804a (patch)
tree3a74ce23105a1d1a22a0df935b2a5b85988f683f /storage
parentc50f849d6459c944490fd0e633e7ef455e308051 (diff)
parentdf08731b5879514cca7adaee007d1c7613982491 (diff)
downloadmariadb-git-7343a2ceb67e4e408e24f3b28a714e106ffe804a.tar.gz
Merge 10.10 into 10.11
Diffstat (limited to 'storage')
-rw-r--r--storage/innobase/handler/ha_innodb.cc29
-rw-r--r--storage/innobase/handler/i_s.cc9
-rw-r--r--storage/innobase/trx/trx0roll.cc6
3 files changed, 33 insertions, 11 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 9db4bd1842b..0825d527dfc 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -4455,6 +4455,25 @@ innobase_commit_ordered(
DBUG_VOID_RETURN;
}
+/** Mark the end of a statement.
+@param trx transaction
+@return whether an error occurred */
+static bool end_of_statement(trx_t *trx)
+{
+ trx_mark_sql_stat_end(trx);
+ if (UNIV_LIKELY(trx->error_state == DB_SUCCESS))
+ return false;
+
+ trx_savept_t savept;
+ savept.least_undo_no= 0;
+ trx->rollback(&savept);
+ /* MariaDB will roll back the entire transaction. */
+ trx->bulk_insert= false;
+ trx->last_sql_stat_start.least_undo_no= 0;
+ trx->savepoints_discard();
+ return true;
+}
+
/*****************************************************************//**
Commits a transaction in an InnoDB database or marks an SQL statement
ended.
@@ -4531,10 +4550,7 @@ innobase_commit(
/* Store the current undo_no of the transaction so that we
know where to roll back if we have to roll back the next
SQL statement */
-
- trx_mark_sql_stat_end(trx);
- if (UNIV_UNLIKELY(trx->error_state != DB_SUCCESS)) {
- trx_rollback_for_mysql(trx);
+ if (UNIV_UNLIKELY(end_of_statement(trx))) {
DBUG_RETURN(1);
}
}
@@ -16954,10 +16970,7 @@ innobase_xa_prepare(
/* Store the current undo_no of the transaction so that we
know where to roll back if we have to roll back the next
SQL statement */
-
- trx_mark_sql_stat_end(trx);
- if (UNIV_UNLIKELY(trx->error_state != DB_SUCCESS)) {
- trx_rollback_for_mysql(trx);
+ if (UNIV_UNLIKELY(end_of_statement(trx))) {
return 1;
}
}
diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc
index 9510a4a8bfc..3b537afef40 100644
--- a/storage/innobase/handler/i_s.cc
+++ b/storage/innobase/handler/i_s.cc
@@ -6142,8 +6142,13 @@ static int i_s_sys_tablespaces_fill(THD *thd, const fil_space_t &s, TABLE *t)
OK(f->store(name.data(), name.size(), system_charset_info));
f->set_notnull();
}
- else
- f->set_notnull();
+ else if (srv_is_undo_tablespace(s.id))
+ {
+ char name[15];
+ snprintf(name, sizeof name, "innodb_undo%03u",
+ (s.id - srv_undo_space_id_start + 1));
+ OK(f->store(name, strlen(name), system_charset_info));
+ } else f->set_notnull();
}
fields[SYS_TABLESPACES_NAME]->set_null();
diff --git a/storage/innobase/trx/trx0roll.cc b/storage/innobase/trx/trx0roll.cc
index 45dc78b4440..99cf1364192 100644
--- a/storage/innobase/trx/trx0roll.cc
+++ b/storage/innobase/trx/trx0roll.cc
@@ -557,9 +557,13 @@ trx_release_savepoint_for_mysql(
if (savep != NULL) {
trx_roll_savepoint_free(trx, savep);
+ return DB_SUCCESS;
+ } else if (trx->last_sql_stat_start.least_undo_no == 0) {
+ /* Bulk insert could have discarded savepoints */
+ return DB_SUCCESS;
}
- return(savep != NULL ? DB_SUCCESS : DB_NO_SAVEPOINT);
+ return DB_NO_SAVEPOINT;
}
/*******************************************************************//**