mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge branch '10.6' into 10.9
This commit is contained in:
@@ -110,7 +110,7 @@ static handlerton *installed_htons[128];
|
||||
#define BITMAP_STACKBUF_SIZE (128/8)
|
||||
|
||||
KEY_CREATE_INFO default_key_create_info=
|
||||
{ HA_KEY_ALG_UNDEF, 0, 0, {NullS, 0}, {NullS, 0}, true, false };
|
||||
{ HA_KEY_ALG_UNDEF, 0, 0, {NullS, 0}, {NullS, 0}, false };
|
||||
|
||||
/* number of entries in handlertons[] */
|
||||
ulong total_ha= 0;
|
||||
@@ -362,9 +362,6 @@ handlerton *ha_checktype(THD *thd, handlerton *hton, bool no_substitute)
|
||||
|
||||
if (no_substitute)
|
||||
return NULL;
|
||||
#ifdef WITH_WSREP
|
||||
(void)wsrep_after_rollback(thd, false);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
return ha_default_handlerton(thd);
|
||||
} /* ha_checktype */
|
||||
@@ -627,6 +624,7 @@ const char *hton_no_exts[]= { 0 };
|
||||
int ha_initialize_handlerton(st_plugin_int *plugin)
|
||||
{
|
||||
handlerton *hton;
|
||||
int ret= 0;
|
||||
DBUG_ENTER("ha_initialize_handlerton");
|
||||
DBUG_PRINT("plugin", ("initialize plugin: '%s'", plugin->name.str));
|
||||
|
||||
@@ -636,6 +634,7 @@ int ha_initialize_handlerton(st_plugin_int *plugin)
|
||||
{
|
||||
sql_print_error("Unable to allocate memory for plugin '%s' handlerton.",
|
||||
plugin->name.str);
|
||||
ret= 1;
|
||||
goto err_no_hton_memory;
|
||||
}
|
||||
|
||||
@@ -646,12 +645,15 @@ int ha_initialize_handlerton(st_plugin_int *plugin)
|
||||
hton->slot= HA_SLOT_UNDEF;
|
||||
/* Historical Requirement */
|
||||
plugin->data= hton; // shortcut for the future
|
||||
if (plugin->plugin->init && plugin->plugin->init(hton))
|
||||
{
|
||||
sql_print_error("Plugin '%s' init function returned error.",
|
||||
plugin->name.str);
|
||||
/* [remove after merge] notes on merge conflict (MDEV-31400):
|
||||
10.6-10.11: 13ba00ff4933cfc1712676f323587504e453d1b5
|
||||
11.0-11.2: 42f8be10f18163c4025710cf6a212e82bddb2f62
|
||||
The 10.11->11.0 conflict is trivial, but the reference commit also
|
||||
contains different non-conflict changes needs to be applied to 11.0
|
||||
(and beyond).
|
||||
*/
|
||||
if (plugin->plugin->init && (ret= plugin->plugin->init(hton)))
|
||||
goto err;
|
||||
}
|
||||
|
||||
// hton_ext_based_table_discovery() works only when discovery
|
||||
// is supported and the engine if file-based.
|
||||
@@ -689,6 +691,7 @@ int ha_initialize_handlerton(st_plugin_int *plugin)
|
||||
if (idx == (int) DB_TYPE_DEFAULT)
|
||||
{
|
||||
sql_print_warning("Too many storage engines!");
|
||||
ret= 1;
|
||||
goto err_deinit;
|
||||
}
|
||||
if (hton->db_type != DB_TYPE_UNKNOWN)
|
||||
@@ -716,6 +719,7 @@ int ha_initialize_handlerton(st_plugin_int *plugin)
|
||||
{
|
||||
sql_print_error("Too many plugins loaded. Limit is %lu. "
|
||||
"Failed on '%s'", (ulong) MAX_HA, plugin->name.str);
|
||||
ret= 1;
|
||||
goto err_deinit;
|
||||
}
|
||||
hton->slot= total_ha++;
|
||||
@@ -765,7 +769,7 @@ int ha_initialize_handlerton(st_plugin_int *plugin)
|
||||
resolve_sysvar_table_options(hton);
|
||||
update_discovery_counters(hton, 1);
|
||||
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(ret);
|
||||
|
||||
err_deinit:
|
||||
/*
|
||||
@@ -783,7 +787,7 @@ err:
|
||||
my_free(hton);
|
||||
err_no_hton_memory:
|
||||
plugin->data= NULL;
|
||||
DBUG_RETURN(1);
|
||||
DBUG_RETURN(ret);
|
||||
}
|
||||
|
||||
int ha_init()
|
||||
@@ -1750,10 +1754,7 @@ int ha_commit_trans(THD *thd, bool all)
|
||||
DEBUG_SYNC(thd, "ha_commit_trans_after_acquire_commit_lock");
|
||||
}
|
||||
|
||||
if (rw_trans &&
|
||||
opt_readonly &&
|
||||
!(thd->security_ctx->master_access & PRIV_IGNORE_READ_ONLY) &&
|
||||
!thd->slave_thread)
|
||||
if (rw_trans && thd->is_read_only_ctx())
|
||||
{
|
||||
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
|
||||
goto err;
|
||||
@@ -2167,17 +2168,26 @@ int ha_rollback_trans(THD *thd, bool all)
|
||||
attempt. Otherwise those following transactions can run too early, and
|
||||
possibly cause replication to fail. See comments in retry_event_group().
|
||||
|
||||
(This concerns rollbacks due to temporary errors where the transaction
|
||||
will be retried afterwards. For non-recoverable errors, following
|
||||
transactions will not start but just be skipped as the worker threads
|
||||
perform the error stop).
|
||||
|
||||
There were several bugs with this in the past that were very hard to
|
||||
track down (MDEV-7458, MDEV-8302). So we add here an assertion for
|
||||
rollback without signalling following transactions. And in release
|
||||
builds, we explicitly do the signalling before rolling back.
|
||||
*/
|
||||
DBUG_ASSERT(
|
||||
!(thd->rgi_slave && thd->rgi_slave->did_mark_start_commit) ||
|
||||
!(thd->rgi_slave &&
|
||||
!thd->rgi_slave->worker_error &&
|
||||
thd->rgi_slave->did_mark_start_commit) ||
|
||||
(thd->transaction->xid_state.is_explicit_XA() ||
|
||||
(thd->rgi_slave->gtid_ev_flags2 & Gtid_log_event::FL_PREPARED_XA)));
|
||||
|
||||
if (thd->rgi_slave && thd->rgi_slave->did_mark_start_commit)
|
||||
if (thd->rgi_slave &&
|
||||
!thd->rgi_slave->worker_error &&
|
||||
thd->rgi_slave->did_mark_start_commit)
|
||||
thd->rgi_slave->unmark_start_commit();
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user