mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Merge 10.4 into 10.5
This commit is contained in:
commit
10d544aa7b
40 changed files with 771 additions and 275 deletions
|
|
@ -3834,8 +3834,10 @@ static int innodb_init(void* p)
|
|||
innobase_hton->show_status = innobase_show_status;
|
||||
innobase_hton->notify_tabledef_changed= innodb_notify_tabledef_changed;
|
||||
innobase_hton->flags =
|
||||
HTON_SUPPORTS_EXTENDED_KEYS | HTON_SUPPORTS_FOREIGN_KEYS
|
||||
| HTON_NATIVE_SYS_VERSIONING | HTON_WSREP_REPLICATION;
|
||||
HTON_SUPPORTS_EXTENDED_KEYS | HTON_SUPPORTS_FOREIGN_KEYS |
|
||||
HTON_NATIVE_SYS_VERSIONING |
|
||||
HTON_WSREP_REPLICATION |
|
||||
HTON_REQUIRES_CLOSE_AFTER_TRUNCATE;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
innobase_hton->abort_transaction=wsrep_abort_transaction;
|
||||
|
|
@ -15375,10 +15377,6 @@ ha_innobase::extra(
|
|||
case HA_EXTRA_END_ALTER_COPY:
|
||||
m_prebuilt->table->skip_alter_undo = 0;
|
||||
break;
|
||||
case HA_EXTRA_FAKE_START_STMT:
|
||||
trx_register_for_2pc(m_prebuilt->trx);
|
||||
m_prebuilt->sql_stat_start = true;
|
||||
break;
|
||||
default:/* Do nothing */
|
||||
;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4158,6 +4158,18 @@ lock_check_dict_lock(
|
|||
and release possible other transactions waiting because of these locks. */
|
||||
void lock_release(trx_t* trx)
|
||||
{
|
||||
#ifdef UNIV_DEBUG
|
||||
std::set<table_id_t> to_evict;
|
||||
if (innodb_evict_tables_on_commit_debug && !trx->is_recovered)
|
||||
# if 1 /* if dict_stats_exec_sql() were not playing dirty tricks */
|
||||
if (!mutex_own(&dict_sys.mutex))
|
||||
# else /* this would be more proper way to do it */
|
||||
if (!trx->dict_operation_lock_mode && !trx->dict_operation)
|
||||
# endif
|
||||
for (const auto& p : trx->mod_tables)
|
||||
if (!p.first->is_temporary())
|
||||
to_evict.emplace(p.first->id);
|
||||
#endif
|
||||
ulint count = 0;
|
||||
trx_id_t max_trx_id = trx_sys.get_max_trx_id();
|
||||
|
||||
|
|
@ -4206,6 +4218,25 @@ void lock_release(trx_t* trx)
|
|||
}
|
||||
|
||||
lock_mutex_exit();
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
if (to_evict.empty()) {
|
||||
return;
|
||||
}
|
||||
mutex_enter(&dict_sys.mutex);
|
||||
lock_mutex_enter();
|
||||
for (table_id_t id : to_evict) {
|
||||
if (dict_table_t *table = dict_table_open_on_id(
|
||||
id, TRUE, DICT_TABLE_OP_OPEN_ONLY_IF_CACHED)) {
|
||||
if (!table->get_ref_count()
|
||||
&& !UT_LIST_GET_LEN(table->locks)) {
|
||||
dict_sys.remove(table, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
lock_mutex_exit();
|
||||
mutex_exit(&dict_sys.mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* True if a lock mode is S or X */
|
||||
|
|
|
|||
|
|
@ -1245,16 +1245,6 @@ trx_update_mod_tables_timestamp(
|
|||
const time_t now = time(NULL);
|
||||
|
||||
trx_mod_tables_t::const_iterator end = trx->mod_tables.end();
|
||||
#ifdef UNIV_DEBUG
|
||||
const bool preserve_tables = !innodb_evict_tables_on_commit_debug
|
||||
|| trx->is_recovered /* avoid trouble with XA recovery */
|
||||
# if 1 /* if dict_stats_exec_sql() were not playing dirty tricks */
|
||||
|| mutex_own(&dict_sys.mutex)
|
||||
# else /* this would be more proper way to do it */
|
||||
|| trx->dict_operation_lock_mode || trx->dict_operation
|
||||
# endif
|
||||
;
|
||||
#endif
|
||||
|
||||
for (trx_mod_tables_t::const_iterator it = trx->mod_tables.begin();
|
||||
it != end;
|
||||
|
|
@ -1270,26 +1260,6 @@ trx_update_mod_tables_timestamp(
|
|||
intrusive. */
|
||||
dict_table_t* table = it->first;
|
||||
table->update_time = now;
|
||||
#ifdef UNIV_DEBUG
|
||||
if (preserve_tables || table->get_ref_count()
|
||||
|| UT_LIST_GET_LEN(table->locks)) {
|
||||
/* do not evict when committing DDL operations
|
||||
or if some other transaction is holding the
|
||||
table handle */
|
||||
continue;
|
||||
}
|
||||
/* recheck while holding the mutex that blocks
|
||||
table->acquire() */
|
||||
mutex_enter(&dict_sys.mutex);
|
||||
mutex_enter(&lock_sys.mutex);
|
||||
const bool do_evict = !table->get_ref_count()
|
||||
&& !UT_LIST_GET_LEN(table->locks);
|
||||
mutex_exit(&lock_sys.mutex);
|
||||
if (do_evict) {
|
||||
dict_sys.remove(table, true);
|
||||
}
|
||||
mutex_exit(&dict_sys.mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
trx->mod_tables.clear();
|
||||
|
|
@ -1375,16 +1345,9 @@ inline void trx_t::commit_in_memory(const mtr_t *mtr)
|
|||
so that there will be no race condition in lock_release(). */
|
||||
while (UNIV_UNLIKELY(is_referenced()))
|
||||
ut_delay(srv_spin_wait_delay);
|
||||
release_locks();
|
||||
id= 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ut_ad(read_only || !rsegs.m_redo.rseg);
|
||||
release_locks();
|
||||
}
|
||||
|
||||
DEBUG_SYNC_C("after_trx_committed_in_memory");
|
||||
|
||||
if (read_only || !rsegs.m_redo.rseg)
|
||||
{
|
||||
|
|
@ -1397,6 +1360,10 @@ inline void trx_t::commit_in_memory(const mtr_t *mtr)
|
|||
is_recovered= false;
|
||||
}
|
||||
|
||||
release_locks();
|
||||
id= 0;
|
||||
DEBUG_SYNC_C("after_trx_committed_in_memory");
|
||||
|
||||
while (dict_table_t *table= UT_LIST_GET_FIRST(lock.evicted_tables))
|
||||
{
|
||||
UT_LIST_REMOVE(lock.evicted_tables, table);
|
||||
|
|
|
|||
|
|
@ -1464,6 +1464,7 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
|
|||
}
|
||||
if (maria_is_crashed(info))
|
||||
{
|
||||
tprint(tracef, "\n");
|
||||
eprint(tracef, "Table '%s' is crashed, skipping it. Please repair it with"
|
||||
" aria_chk -r", share->open_file_name.str);
|
||||
recovery_found_crashed_tables++;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ void eprint(FILE *trace_file __attribute__ ((unused)),
|
|||
fputc('\n', trace_file);
|
||||
if (trace_file != stderr)
|
||||
{
|
||||
va_start(args, format);
|
||||
my_printv_error(HA_ERR_INITIALIZATION, format, MYF(0), args);
|
||||
}
|
||||
va_end(args);
|
||||
|
|
|
|||
|
|
@ -550,9 +550,6 @@ static const char *mrn_inspect_extra_function(enum ha_extra_function operation)
|
|||
case HA_EXTRA_END_ALTER_COPY:
|
||||
inspected = "HA_EXTRA_END_ALTER_COPY";
|
||||
break;
|
||||
case HA_EXTRA_FAKE_START_STMT:
|
||||
inspected = "HA_EXTRA_FAKE_START_STMT";
|
||||
break;
|
||||
#ifdef MRN_HAVE_HA_EXTRA_EXPORT
|
||||
case HA_EXTRA_EXPORT:
|
||||
inspected = "HA_EXTRA_EXPORT";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue