From 8db54f1ad55fad7396fb51850c7266352785ed6c Mon Sep 17 00:00:00 2001 From: Sauron Date: Fri, 2 Feb 2018 20:12:23 +0300 Subject: Prevent building WSREP without INNODB --- wsrep/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wsrep/CMakeLists.txt b/wsrep/CMakeLists.txt index 53c8e853078..ff2bdec4def 100644 --- a/wsrep/CMakeLists.txt +++ b/wsrep/CMakeLists.txt @@ -15,6 +15,10 @@ SET(WSREP_SOURCES wsrep_gtid.c wsrep_uuid.c wsrep_loader.c wsrep_dummy.c) +IF(NOT WITH_INNOBASE_STORAGE_ENGINE) + MESSAGE(WARNING "WSRep is enabled, but innodb is not. This configuration is not supported") +ENDIF() + ADD_CONVENIENCE_LIBRARY(wsrep ${WSREP_SOURCES}) DTRACE_INSTRUMENT(wsrep) -- cgit v1.2.1 From 5fe9b4a7ae914b916a84170ac614761795f50c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 14 Feb 2018 15:18:55 +0200 Subject: MDEV-14648 Restore fix for MySQL BUG#39053 - UNINSTALL PLUGIN does not allow the storage engine to cleanup open connections Also, allow the MariaDB 10.2 server to link InnoDB dynamically against ha_innodb.so (which is what mysql-test-run.pl expects to exist, instead of the default name ha_innobase.so). wsrep_load_data_split(): Instead of referring to innodb_hton_ptr, check the handlerton::db_type. This was recently broken by me in MDEV-11415. innodb_lock_schedule_algorithm: Define as a weak global symbol, so that WITH_WSREP will not depend on InnoDB being linked statically. I tested this manually. Notably, running a test that only does SET GLOBAL wsrep_on=1; with a static or dynamic InnoDB and ./mtr --mysqld=--loose-innodb-lock-schedule-algorithm=fcfs will crash with SIGSEGV at shutdown. With the default VATS combination the wsrep_on is properly refused for both the static and dynamic InnoDB. ha_close_connection(): Do invoke the method also for plugins for which UNINSTALL PLUGIN was deferred due to open connections. Thanks to @svoj for pointing this out. thd_to_trx(): Return a pointer, not a reference to a pointer. check_trx_exists(): Invoke thd_set_ha_data() for assigning a transaction. log_write_checkpoint_info(): Remove an unused DEBUG_SYNC point that would cause an assertion failure on shutdown after deferred UNINSTALL PLUGIN. This was tested as follows: cmake -DWITH_WSREP=1 -DPLUGIN_INNOBASE:STRING=DYNAMIC \ -DWITH_MARIABACKUP:BOOL=OFF ... make cd mysql-test ./mtr innodb.innodb_uninstall --- sql/handler.cc | 6 ++++-- sql/sql_load.cc | 22 ++++++++++++---------- sql/wsrep_var.cc | 5 ++++- storage/innobase/CMakeLists.txt | 1 + storage/innobase/handler/ha_innodb.cc | 32 ++++++++++++-------------------- storage/innobase/handler/ha_innodb.h | 7 +------ storage/innobase/lock/lock0lock.cc | 2 +- storage/innobase/log/log0log.cc | 4 +--- 8 files changed, 36 insertions(+), 43 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index 0e72e0276fa..dc45309ebad 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2009, 2016, MariaDB + Copyright (c) 2009, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -793,7 +793,9 @@ static my_bool closecon_handlerton(THD *thd, plugin_ref plugin, */ void ha_close_connection(THD* thd) { - plugin_foreach(thd, closecon_handlerton, MYSQL_STORAGE_ENGINE_PLUGIN, 0); + plugin_foreach_with_mask(thd, closecon_handlerton, + MYSQL_STORAGE_ENGINE_PLUGIN, + PLUGIN_IS_DELETED|PLUGIN_IS_READY, 0); } static my_bool kill_handlerton(THD *thd, plugin_ref plugin, diff --git a/sql/sql_load.cc b/sql/sql_load.cc index e15d4d2fec5..70a6787d63b 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -104,23 +104,25 @@ the transaction after every 10,000 inserted rows. */ static bool wsrep_load_data_split(THD *thd, const TABLE *table, const COPY_INFO &info) { - extern struct handlerton* innodb_hton_ptr; - DBUG_ENTER("wsrep_load_data_split"); - if (wsrep_load_data_splitting && wsrep_on(thd) - && info.records && !(info.records % 10000) - && thd->transaction.stmt.ha_list - && thd->transaction.stmt.ha_list->ht() == binlog_hton - && thd->transaction.stmt.ha_list->next() - && thd->transaction.stmt.ha_list->next()->ht() == innodb_hton_ptr - && !thd->transaction.stmt.ha_list->next()->next()) + if (!wsrep_load_data_splitting || !wsrep_on(thd) + || !info.records || (info.records % 10000) + || !thd->transaction.stmt.ha_list + || thd->transaction.stmt.ha_list->ht() != binlog_hton + || !thd->transaction.stmt.ha_list->next() + || thd->transaction.stmt.ha_list->next()->next()) + DBUG_RETURN(false); + + if (handlerton* hton= thd->transaction.stmt.ha_list->next()->ht()) { + if (hton->db_type != DB_TYPE_INNODB) + DBUG_RETURN(false); WSREP_DEBUG("intermediate transaction commit in LOAD DATA"); if (wsrep_run_wsrep_commit(thd, true) != WSREP_TRX_OK) DBUG_RETURN(true); if (binlog_hton->commit(binlog_hton, thd, true)) DBUG_RETURN(true); wsrep_post_commit(thd, true); - innodb_hton_ptr->commit(innodb_hton_ptr, thd, true); + hton->commit(hton, thd, true); table->file->extra(HA_EXTRA_FAKE_START_STMT); } diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc index a6122a7b1bc..b9eb546bf76 100644 --- a/sql/wsrep_var.cc +++ b/sql/wsrep_var.cc @@ -42,7 +42,10 @@ int wsrep_init_vars() return 0; } -extern ulong innodb_lock_schedule_algorithm; +/* This is intentionally declared as a weak global symbol, so that +linking will succeed even if the server is built with a dynamically +linked InnoDB. */ +ulong innodb_lock_schedule_algorithm __attribute__((weak)); bool wsrep_on_update (sys_var *self, THD* thd, enum_var_type var_type) { diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 1547fa84d7b..db320118b96 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -151,6 +151,7 @@ SET(INNOBASE_SOURCES ut/ut0timer.cc) MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE + MODULE_OUTPUT_NAME ha_innodb DEFAULT RECOMPILE_FOR_EMBEDDED LINK_LIBRARIES ${ZLIB_LIBRARY} diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index d256f42f2f6..0fe53236fb5 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -154,12 +154,9 @@ innodb_check_deprecated(void); #ifdef WITH_WSREP #include "dict0priv.h" -#include "../storage/innobase/include/ut0byte.h" +#include "ut0byte.h" #include -class binlog_trx_data; -extern handlerton *binlog_hton; - extern MYSQL_PLUGIN_IMPORT MYSQL_BIN_LOG mysql_bin_log; static inline wsrep_ws_handle_t* @@ -1961,14 +1958,11 @@ thd_innodb_tmpdir( } /** Obtain the InnoDB transaction of a MySQL thread. -@param[in,out] thd MySQL thread handler. +@param[in,out] thd thread handle @return reference to transaction pointer */ -MY_ATTRIBUTE((warn_unused_result)) -trx_t*& -thd_to_trx( - THD* thd) +static trx_t* thd_to_trx(THD* thd) { - return(*(trx_t**) thd_ha_data(thd, innodb_hton_ptr)); + return *reinterpret_cast(thd_ha_data(thd, innodb_hton_ptr)); } #ifdef WITH_WSREP @@ -2877,20 +2871,19 @@ check_trx_exists( /*=============*/ THD* thd) /*!< in: user thread handle */ { - trx_t*& trx = thd_to_trx(thd); - - if (trx == NULL) { + if (trx_t* trx = thd_to_trx(thd)) { + ut_a(trx->magic_n == TRX_MAGIC_N); + innobase_trx_init(thd, trx); + return trx; + } else { trx = innobase_trx_allocate(thd); /* User trx can be forced to rollback, so we unset the disable flag. */ ut_ad(trx->in_innodb & TRX_FORCE_ROLLBACK_DISABLE); trx->in_innodb &= TRX_FORCE_ROLLBACK_MASK; - } else { - ut_a(trx->magic_n == TRX_MAGIC_N); - innobase_trx_init(thd, trx); + thd_set_ha_data(thd, innodb_hton_ptr, trx); + return trx; } - - return(trx); } /************************************************************************* @@ -2900,8 +2893,7 @@ innobase_get_trx() { THD *thd=current_thd; if (likely(thd != 0)) { - trx_t*& trx = thd_to_trx(thd); - return(trx); + return thd_to_trx(thd); } else { return(NULL); } diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index 4a35f4eae78..9dccfa38016 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2013, 2017, MariaDB Corporation. +Copyright (c) 2013, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -911,11 +911,6 @@ innodb_base_col_setup_for_stored( create_table_info_t::normalize_table_name_low(norm_name, name, FALSE) #endif /* _WIN32 */ -/** Obtain the InnoDB transaction of a MySQL thread. -@param[in,out] thd MySQL thread handler. -@return reference to transaction pointer */ -trx_t*& thd_to_trx(THD* thd); - /** Converts an InnoDB error code to a MySQL error code. Also tells to MySQL about a possible transaction rollback inside InnoDB caused by a lock wait timeout or a deadlock. diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index d74ac76745d..7f73b35e6e0 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -54,7 +54,7 @@ Created 5/7/1996 Heikki Tuuri #endif /* WITH_WSREP */ /** Lock scheduling algorithm */ -ulong innodb_lock_schedule_algorithm = INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS; +ulong innodb_lock_schedule_algorithm; /** The value of innodb_deadlock_detect */ my_bool innobase_deadlock_detect; diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index 01f3ff1034c..5db77872679 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -2,7 +2,7 @@ Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Google Inc. -Copyright (c) 2014, 2017, MariaDB Corporation. +Copyright (c) 2014, 2018, MariaDB Corporation. Portions of this file contain modifications contributed and copyrighted by Google, Inc. Those modifications are gratefully acknowledged and are described @@ -1584,8 +1584,6 @@ log_write_checkpoint_info(bool sync, lsn_t end_lsn) rw_lock_s_lock(&log_sys->checkpoint_lock); rw_lock_s_unlock(&log_sys->checkpoint_lock); - DEBUG_SYNC_C("checkpoint_completed"); - DBUG_EXECUTE_IF( "crash_after_checkpoint", DBUG_SUICIDE();); -- cgit v1.2.1 From 7baea2efa2093cd84b9c972fa1707e6235779e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 15 Feb 2018 09:46:02 +0200 Subject: MDEV-14905 Fulltext index modification committed during shutdown If CREATE TABLE...FULLTEXT INDEX was initiated right before shutdown, then the function fts_load_stopword() could commit modifications after shutdown was initiated, causing an assertion failure in the function trx_purge_add_update_undo_to_history(). Mark as internal all the read/write transactions that modify fulltext indexes, so that they will be ignored by the assertion that guards against transaction commits after shutdown has been initiated. fts_optimize_free(): Invoke trx_commit_for_mysql() just in case, because in fts_optimize_create() we started the transaction as internal, and fts_free_for_backgruond() would assert that the flag is clear. Transaction commit would clear the flag. --- storage/innobase/fts/fts0fts.cc | 8 +++++++- storage/innobase/fts/fts0opt.cc | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 2002374ce83..dd74270e84a 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -2699,6 +2699,7 @@ retry: fts_table.parent = table->name.m_name; trx = trx_allocate_for_background(); + trx_start_internal(trx); trx->op_info = "update the next FTS document id"; @@ -2819,6 +2820,7 @@ fts_update_sync_doc_id( if (!trx) { trx = trx_allocate_for_background(); + trx_start_internal(trx); trx->op_info = "setting last FTS document id"; local_trx = TRUE; @@ -3056,6 +3058,8 @@ fts_commit_table( fts_cache_t* cache = ftt->table->fts->cache; trx_t* trx = trx_allocate_for_background(); + trx_start_internal(trx); + rows = ftt->rows; ftt->fts_trx->trx = trx; @@ -3792,6 +3796,7 @@ fts_doc_fetch_by_doc_id( trx_t* trx = trx_allocate_for_background(); que_t* graph; + trx_start_internal(trx); trx->op_info = "fetching indexed FTS document"; /* The FTS index can be supplied by caller directly with @@ -4138,6 +4143,7 @@ fts_sync_begin( sync->start_time = ut_time(); sync->trx = trx_allocate_for_background(); + trx_start_internal(sync->trx); if (fts_enable_diag_print) { ib::info() << "FTS SYNC for table " << sync->table->name @@ -5008,7 +5014,6 @@ fts_get_rows_count( char table_name[MAX_FULL_NAME_LEN]; trx = trx_allocate_for_background(); - trx->op_info = "fetching FT table rows count"; info = pars_info_create(); @@ -7350,6 +7355,7 @@ fts_load_stopword( if (!trx) { trx = trx_allocate_for_background(); + trx_start_internal(trx); trx->op_info = "upload FTS stopword"; new_trx = TRUE; } diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index d7e434320a3..3a05f1f013a 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, MariaDB Corporation. All Rights reserved. +Copyright (c) 2016, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -989,6 +989,7 @@ fts_table_fetch_doc_ids( if (!trx) { trx = trx_allocate_for_background(); + trx_start_internal(trx); alloc_bk_trx = TRUE; } @@ -1619,6 +1620,7 @@ fts_optimize_create( optim->table = table; optim->trx = trx_allocate_for_background(); + trx_start_internal(optim->trx); optim->fts_common_table.parent = table->name.m_name; optim->fts_common_table.table_id = table->id; @@ -1741,6 +1743,7 @@ fts_optimize_free( { mem_heap_t* heap = static_cast(optim->self_heap->arg); + trx_commit_for_mysql(optim->trx); trx_free_for_background(optim->trx); fts_doc_ids_free(optim->to_delete); -- cgit v1.2.1 From 27ea2963fce74f9f597f63eab0df63e395efcc50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 15 Feb 2018 09:50:03 +0200 Subject: Dead code removal: sess_t The session object is not really needed for anything. We can directly create and free the dummy purge_sys->query->trx. --- storage/innobase/CMakeLists.txt | 1 - storage/innobase/dict/dict0crea.cc | 3 +- storage/innobase/include/pars0opt.h | 3 +- storage/innobase/include/pars0pars.h | 3 +- storage/innobase/include/pars0sym.h | 3 +- storage/innobase/include/que0que.h | 3 +- storage/innobase/include/que0que.ic | 2 -- storage/innobase/include/trx0purge.h | 5 +-- storage/innobase/include/trx0trx.h | 7 +--- storage/innobase/include/usr0sess.h | 69 ------------------------------------ storage/innobase/include/usr0types.h | 31 ---------------- storage/innobase/lock/lock0lock.cc | 1 - storage/innobase/lock/lock0prdt.cc | 1 - storage/innobase/que/que0que.cc | 3 +- storage/innobase/row/row0ins.cc | 1 - storage/innobase/srv/srv0srv.cc | 3 +- storage/innobase/srv/srv0start.cc | 1 - storage/innobase/trx/trx0purge.cc | 26 ++++++-------- storage/innobase/trx/trx0roll.cc | 1 - storage/innobase/trx/trx0sys.cc | 7 ---- storage/innobase/trx/trx0trx.cc | 6 ---- storage/innobase/usr/usr0sess.cc | 58 ------------------------------ storage/innobase/ut/ut0new.cc | 1 - 23 files changed, 20 insertions(+), 219 deletions(-) delete mode 100644 storage/innobase/include/usr0sess.h delete mode 100644 storage/innobase/include/usr0types.h delete mode 100644 storage/innobase/usr/usr0sess.cc diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index db320118b96..0033cdbae35 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -137,7 +137,6 @@ SET(INNOBASE_SOURCES trx/trx0sys.cc trx/trx0trx.cc trx/trx0undo.cc - usr/usr0sess.cc ut/ut0crc32.cc ut/ut0dbg.cc ut/ut0list.cc diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index 8a06cd1db2c..c1ee4f3bc4e 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -38,7 +38,6 @@ Created 1/8/1996 Heikki Tuuri #include "row0mysql.h" #include "pars0pars.h" #include "trx0roll.h" -#include "usr0sess.h" #include "ut0vec.h" #include "dict0priv.h" #include "fts0priv.h" diff --git a/storage/innobase/include/pars0opt.h b/storage/innobase/include/pars0opt.h index 13ea38cc385..d9debcf325e 100644 --- a/storage/innobase/include/pars0opt.h +++ b/storage/innobase/include/pars0opt.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -29,7 +29,6 @@ Created 12/21/1997 Heikki Tuuri #include "univ.i" #include "que0types.h" -#include "usr0types.h" #include "pars0sym.h" #include "dict0types.h" #include "row0sel.h" diff --git a/storage/innobase/include/pars0pars.h b/storage/innobase/include/pars0pars.h index dad7953424c..37498c1c638 100644 --- a/storage/innobase/include/pars0pars.h +++ b/storage/innobase/include/pars0pars.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -29,7 +29,6 @@ Created 11/19/1996 Heikki Tuuri #include "univ.i" #include "que0types.h" -#include "usr0types.h" #include "pars0types.h" #include "row0types.h" #include "trx0types.h" diff --git a/storage/innobase/include/pars0sym.h b/storage/innobase/include/pars0sym.h index 4e511719639..920087b96c2 100644 --- a/storage/innobase/include/pars0sym.h +++ b/storage/innobase/include/pars0sym.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -29,7 +29,6 @@ Created 12/15/1997 Heikki Tuuri #include "univ.i" #include "que0types.h" -#include "usr0types.h" #include "dict0types.h" #include "pars0types.h" #include "row0types.h" diff --git a/storage/innobase/include/que0que.h b/storage/innobase/include/que0que.h index 13be7291f00..f01b596a52e 100644 --- a/storage/innobase/include/que0que.h +++ b/storage/innobase/include/que0que.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -33,7 +33,6 @@ Created 5/27/1996 Heikki Tuuri #include "trx0trx.h" #include "trx0roll.h" #include "srv0srv.h" -#include "usr0types.h" #include "que0types.h" #include "row0types.h" #include "pars0types.h" diff --git a/storage/innobase/include/que0que.ic b/storage/innobase/include/que0que.ic index ec61081cfe2..545d5288298 100644 --- a/storage/innobase/include/que0que.ic +++ b/storage/innobase/include/que0que.ic @@ -23,8 +23,6 @@ Query graph Created 5/27/1996 Heikki Tuuri *******************************************************/ -#include "usr0sess.h" - /***********************************************************************//** Gets the trx of a query thread. */ UNIV_INLINE diff --git a/storage/innobase/include/trx0purge.h b/storage/innobase/include/trx0purge.h index c9f5edb1432..e605e7a67a6 100644 --- a/storage/innobase/include/trx0purge.h +++ b/storage/innobase/include/trx0purge.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. All Rights Reserved. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -33,7 +33,6 @@ Created 3/26/1996 Heikki Tuuri #include "trx0sys.h" #include "que0types.h" #include "page0page.h" -#include "usr0sess.h" #include "fil0fil.h" #include "read0types.h" @@ -494,8 +493,6 @@ public: /** Destruct the purge system. */ ~purge_sys_t(); - sess_t* sess; /*!< System session running the purge - query */ rw_lock_t latch; /*!< The latch protecting the purge view. A purge operation must acquire an x-latch here for the instant at which diff --git a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h index b2d4952318c..674eee572ed 100644 --- a/storage/innobase/include/trx0trx.h +++ b/storage/innobase/include/trx0trx.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2017, MariaDB Corporation. +Copyright (c) 2015, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -38,7 +38,6 @@ Created 3/26/1996 Heikki Tuuri #include "lock0types.h" #include "log0log.h" -#include "usr0types.h" #include "que0types.h" #include "mem0mem.h" #include "trx0xa.h" @@ -55,9 +54,6 @@ class ReadView; // Forward declaration class FlushObserver; -/** Dummy session used currently in MySQL interface */ -extern sess_t* trx_dummy_sess; - /** Set flush observer for the transaction @param[in/out] trx transaction struct @param[in] observer flush observer */ @@ -1139,7 +1135,6 @@ struct trx_t { ulint error_key_num; /*!< if the index creation fails to a duplicate key error, a mysql key number of that index is stored here */ - sess_t* sess; /*!< session of the trx, NULL if none */ que_t* graph; /*!< query currently run in the session, or NULL if none; NOTE that the query belongs to the session, and it can diff --git a/storage/innobase/include/usr0sess.h b/storage/innobase/include/usr0sess.h deleted file mode 100644 index 8e9497a85c5..00000000000 --- a/storage/innobase/include/usr0sess.h +++ /dev/null @@ -1,69 +0,0 @@ -/***************************************************************************** - -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA - -*****************************************************************************/ - -/**************************************************//** -@file include/usr0sess.h -Sessions - -Created 6/25/1996 Heikki Tuuri -*******************************************************/ - -#ifndef usr0sess_h -#define usr0sess_h - -#include "univ.i" -#include "ut0byte.h" -#include "trx0types.h" -#include "srv0srv.h" -#include "trx0types.h" -#include "usr0types.h" -#include "que0types.h" -#include "data0data.h" -#include "rem0rec.h" - -/*********************************************************************//** -Opens a session. -@return own: session object */ -sess_t* -sess_open(void); -/*============*/ -/*********************************************************************//** -Closes a session, freeing the memory occupied by it. */ -void -sess_close( -/*=======*/ - sess_t* sess); /* in, own: session object */ - -/* The session handle. This data structure is only used by purge and is -not really necessary. We should get rid of it. */ -struct sess_t{ - ulint state; /*!< state of the session */ - trx_t* trx; /*!< transaction object permanently - assigned for the session: the - transaction instance designated by the - trx id changes, but the memory - structure is preserved */ -}; - -/* Session states */ -#define SESS_ACTIVE 1 -#define SESS_ERROR 2 /* session contains an error message - which has not yet been communicated - to the client */ -#endif diff --git a/storage/innobase/include/usr0types.h b/storage/innobase/include/usr0types.h deleted file mode 100644 index 6ba937cacc8..00000000000 --- a/storage/innobase/include/usr0types.h +++ /dev/null @@ -1,31 +0,0 @@ -/***************************************************************************** - -Copyright (c) 1996, 2009, Oracle and/or its affiliates. All Rights Reserved. - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA - -*****************************************************************************/ - -/**************************************************//** -@file include/usr0types.h -Users and sessions global types - -Created 6/25/1996 Heikki Tuuri -*******************************************************/ - -#ifndef usr0types_h -#define usr0types_h - -struct sess_t; - -#endif diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 7f73b35e6e0..67a40e7639f 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -35,7 +35,6 @@ Created 5/7/1996 Heikki Tuuri #include "lock0lock.h" #include "lock0priv.h" #include "dict0mem.h" -#include "usr0sess.h" #include "trx0purge.h" #include "trx0sys.h" #include "srv0mon.h" diff --git a/storage/innobase/lock/lock0prdt.cc b/storage/innobase/lock/lock0prdt.cc index dc2c6e2d15e..0e79dd5b460 100644 --- a/storage/innobase/lock/lock0prdt.cc +++ b/storage/innobase/lock/lock0prdt.cc @@ -29,7 +29,6 @@ Created 9/7/2013 Jimmy Yang #include "lock0priv.h" #include "lock0prdt.h" #include "ha_prototypes.h" -#include "usr0sess.h" #include "trx0purge.h" #include "dict0mem.h" #include "dict0boot.h" diff --git a/storage/innobase/que/que0que.cc b/storage/innobase/que/que0que.cc index 839f7ca0100..87d37e347f1 100644 --- a/storage/innobase/que/que0que.cc +++ b/storage/innobase/que/que0que.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -27,7 +27,6 @@ Created 5/27/1996 Heikki Tuuri #include "ha_prototypes.h" #include "que0que.h" -#include "usr0sess.h" #include "trx0trx.h" #include "trx0roll.h" #include "row0undo.h" diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index a81594bb0b7..98e94e06464 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -45,7 +45,6 @@ Created 4/20/1996 Heikki Tuuri #include "log0log.h" #include "eval0eval.h" #include "data0data.h" -#include "usr0sess.h" #include "buf0lru.h" #include "fts0fts.h" #include "fts0types.h" diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 9989a24c708..06c01725247 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -3,7 +3,7 @@ Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2009, Percona Inc. -Copyright (c) 2013, 2017, MariaDB Corporation. +Copyright (c) 2013, 2018, MariaDB Corporation. Portions of this file contain modifications contributed and copyrighted by Google, Inc. Those modifications are gratefully acknowledged and are described @@ -70,7 +70,6 @@ Created 10/8/1995 Heikki Tuuri #include "sync0sync.h" #include "trx0i_s.h" #include "trx0purge.h" -#include "usr0sess.h" #include "ut0crc32.h" #include "btr0defragment.h" #include "ut0mem.h" diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index d3b7fb6bf94..8c2d0dc8871 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -88,7 +88,6 @@ Created 2/16/1996 Heikki Tuuri #include "dict0load.h" #include "dict0stats_bg.h" #include "que0que.h" -#include "usr0sess.h" #include "lock0lock.h" #include "trx0roll.h" #include "trx0purge.h" diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index a1f16df2304..16ee1d2e8e8 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -165,21 +165,15 @@ TrxUndoRsegsIterator::set_next() /** Build a purge 'query' graph. The actual purge is performed by executing this query graph. -@param[in,out] sess the purge session @return own: the query graph */ static que_t* -trx_purge_graph_build(sess_t* sess) +purge_graph_build() { ut_a(srv_n_purge_threads > 0); - /* A purge transaction is not a real transaction, we use a transaction - here only because the query threads code requires it. It is otherwise - quite unnecessary. We should get rid of it eventually. */ - trx_t* trx = sess->trx; - ut_ad(trx->sess == sess); - - trx->id = 0; + trx_t* trx = trx_allocate_for_background(); + ut_ad(!trx->id); trx->start_time = ut_time(); trx->state = TRX_STATE_ACTIVE; trx->op_info = "purge trx"; @@ -199,9 +193,9 @@ trx_purge_graph_build(sess_t* sess) /** Construct the purge system. */ purge_sys_t::purge_sys_t() - : sess(sess_open()), latch(), event(os_event_create(0)), + : latch(), event(os_event_create(0)), n_stop(0), running(false), state(PURGE_STATE_INIT), - query(trx_purge_graph_build(sess)), + query(purge_graph_build()), view(), n_submitted(0), n_completed(0), iter(), limit(), #ifdef UNIV_DEBUG @@ -221,10 +215,12 @@ purge_sys_t::~purge_sys_t() { ut_ad(this == purge_sys); + trx_t* trx = query->trx; que_graph_free(query); - ut_a(sess->trx->id == 0); - sess->trx->state = TRX_STATE_NOT_STARTED; - sess_close(sess); + ut_ad(!trx->id); + ut_ad(trx->state == TRX_STATE_ACTIVE); + trx->state = TRX_STATE_NOT_STARTED; + trx_free_for_background(trx); view.close(); rw_lock_free(&latch); /* rw_lock_free() already called latch.~rw_lock_t(); tame the diff --git a/storage/innobase/trx/trx0roll.cc b/storage/innobase/trx/trx0roll.cc index ab500cfbfad..5c2258f25be 100644 --- a/storage/innobase/trx/trx0roll.cc +++ b/storage/innobase/trx/trx0roll.cc @@ -47,7 +47,6 @@ Created 3/26/1996 Heikki Tuuri #include "trx0sys.h" #include "trx0trx.h" #include "trx0undo.h" -#include "usr0sess.h" #include "ha_prototypes.h" /** This many pages must be undone before a truncate is tried within diff --git a/storage/innobase/trx/trx0sys.cc b/storage/innobase/trx/trx0sys.cc index 393dff8c026..f7404e8a303 100644 --- a/storage/innobase/trx/trx0sys.cc +++ b/storage/innobase/trx/trx0sys.cc @@ -500,8 +500,6 @@ trx_sys_init_at_db_start() mtr.commit(); ut_d(trx_sys->rw_max_trx_id = trx_sys->max_trx_id); - trx_dummy_sess = sess_open(); - trx_lists_init_at_db_start(); /* This mutex is not strictly required, it is here only to satisfy @@ -928,11 +926,6 @@ trx_sys_close(void) " shutdown: " << size << " read views open"; } - if (trx_dummy_sess) { - sess_close(trx_dummy_sess); - trx_dummy_sess = NULL; - } - /* Only prepared transactions may be left in the system. Free them. */ ut_a(UT_LIST_GET_LEN(trx_sys->rw_trx_list) == trx_sys->n_prepared_trx || !srv_was_started diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 19614184507..c6e2bd88d62 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -51,7 +51,6 @@ Created 3/26/1996 Heikki Tuuri #include "trx0rseg.h" #include "trx0undo.h" #include "trx0xa.h" -#include "usr0sess.h" #include "ut0new.h" #include "ut0pool.h" #include "ut0vec.h" @@ -70,9 +69,6 @@ typedef std::set< std::less, ut_allocator > table_id_set; -/** Dummy session used currently in MySQL interface */ -sess_t* trx_dummy_sess = NULL; - /** Constructor */ TrxVersion::TrxVersion(trx_t* trx) : @@ -518,8 +514,6 @@ trx_allocate_for_background(void) trx = trx_create_low(); - trx->sess = trx_dummy_sess; - return(trx); } diff --git a/storage/innobase/usr/usr0sess.cc b/storage/innobase/usr/usr0sess.cc deleted file mode 100644 index 55ce9500e5c..00000000000 --- a/storage/innobase/usr/usr0sess.cc +++ /dev/null @@ -1,58 +0,0 @@ -/***************************************************************************** - -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA - -*****************************************************************************/ - -/**************************************************//** -@file usr/usr0sess.cc -Sessions - -Created 6/25/1996 Heikki Tuuri -*******************************************************/ - -#include "usr0sess.h" -#include "trx0trx.h" - -/*********************************************************************//** -Opens a session. -@return own: session object */ -sess_t* -sess_open(void) -/*===========*/ -{ - sess_t* sess; - - sess = static_cast(ut_zalloc_nokey(sizeof(*sess))); - - sess->state = SESS_ACTIVE; - - sess->trx = trx_allocate_for_background(); - sess->trx->sess = sess; - - return(sess); -} - -/*********************************************************************//** -Closes a session, freeing the memory occupied by it. */ -void -sess_close( -/*=======*/ - sess_t* sess) /*!< in, own: session object */ -{ - trx_free_for_background(sess->trx); - ut_free(sess); -} diff --git a/storage/innobase/ut/ut0new.cc b/storage/innobase/ut/ut0new.cc index bf5515f4de0..052db2fe7bd 100644 --- a/storage/innobase/ut/ut0new.cc +++ b/storage/innobase/ut/ut0new.cc @@ -167,7 +167,6 @@ ut_new_boot() "trx0sys", "trx0trx", "trx0undo", - "usr0sess", "ut0list", "ut0mem", "ut0mutex", -- cgit v1.2.1