diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2016-08-12 11:17:45 +0300 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2016-09-02 13:22:28 +0300 |
commit | 2e814d4702d71a04388386a9f591d14a35980bfe (patch) | |
tree | f3f9b48d116a3738c5e71f3a360ca61f16cfb632 /storage/innobase/include/trx0roll.h | |
parent | 848d211c5c4df00b819cd84d7530cf7d29bb0524 (diff) | |
download | mariadb-git-2e814d4702d71a04388386a9f591d14a35980bfe.tar.gz |
Merge InnoDB 5.7 from mysql-5.7.9.
Contains also
MDEV-10547: Test multi_update_innodb fails with InnoDB 5.7
The failure happened because 5.7 has changed the signature of
the bool handler::primary_key_is_clustered() const
virtual function ("const" was added). InnoDB was using the old
signature which caused the function not to be used.
MDEV-10550: Parallel replication lock waits/deadlock handling does not work with InnoDB 5.7
Fixed mutexing problem on lock_trx_handle_wait. Note that
rpl_parallel and rpl_optimistic_parallel tests still
fail.
MDEV-10156 : Group commit tests fail on 10.2 InnoDB (branch bb-10.2-jan)
Reason: incorrect merge
MDEV-10550: Parallel replication can't sync with master in InnoDB 5.7 (branch bb-10.2-jan)
Reason: incorrect merge
Diffstat (limited to 'storage/innobase/include/trx0roll.h')
-rw-r--r-- | storage/innobase/include/trx0roll.h | 123 |
1 files changed, 34 insertions, 89 deletions
diff --git a/storage/innobase/include/trx0roll.h b/storage/innobase/include/trx0roll.h index 98a667b2ec1..ec4c7d57e5d 100644 --- a/storage/innobase/include/trx0roll.h +++ b/storage/innobase/include/trx0roll.h @@ -39,76 +39,49 @@ Determines if this transaction is rolling back an incomplete transaction in crash recovery. @return TRUE if trx is an incomplete transaction that is being rolled back in crash recovery */ -UNIV_INTERN ibool trx_is_recv( /*========*/ const trx_t* trx); /*!< in: transaction */ /*******************************************************************//** Returns a transaction savepoint taken at this point in time. -@return savepoint */ -UNIV_INTERN +@return savepoint */ trx_savept_t trx_savept_take( /*============*/ trx_t* trx); /*!< in: transaction */ -/*******************************************************************//** -Frees an undo number array. */ -UNIV_INTERN -void -trx_undo_arr_free( -/*==============*/ - trx_undo_arr_t* arr); /*!< in: undo number array */ -/*******************************************************************//** -Returns pointer to nth element in an undo number array. -@return pointer to the nth element */ -UNIV_INLINE -trx_undo_inf_t* -trx_undo_arr_get_nth_info( -/*======================*/ - trx_undo_arr_t* arr, /*!< in: undo number array */ - ulint n); /*!< in: position */ /********************************************************************//** Pops the topmost record when the two undo logs of a transaction are seen -as a single stack of records ordered by their undo numbers. Inserts the -undo number of the popped undo record to the array of currently processed -undo numbers in the transaction. When the query thread finishes processing -of this undo record, it must be released with trx_undo_rec_release. +as a single stack of records ordered by their undo numbers. +@return undo log record copied to heap, NULL if none left, or if the +undo number of the top record would be less than the limit */ +trx_undo_rec_t* +trx_roll_pop_top_rec_of_trx_low( +/*============================*/ + trx_t* trx, /*!< in/out: transaction */ + trx_undo_ptr_t* undo_ptr, /*!< in: rollback segment to look + for next undo log record. */ + undo_no_t limit, /*!< in: least undo number we need */ + roll_ptr_t* roll_ptr, /*!< out: roll pointer to undo record */ + mem_heap_t* heap); /*!< in/out: memory heap where copied */ + +/********************************************************************//** +Get next undo log record from redo and noredo rollback segments. @return undo log record copied to heap, NULL if none left, or if the undo number of the top record would be less than the limit */ -UNIV_INTERN trx_undo_rec_t* trx_roll_pop_top_rec_of_trx( /*========================*/ - trx_t* trx, /*!< in: transaction */ - undo_no_t limit, /*!< in: least undo number we need */ - roll_ptr_t* roll_ptr,/*!< out: roll pointer to undo record */ - mem_heap_t* heap); /*!< in: memory heap where copied */ -/********************************************************************//** -Reserves an undo log record for a query thread to undo. This should be -called if the query thread gets the undo log record not using the pop -function above. -@return TRUE if succeeded */ -UNIV_INTERN -ibool -trx_undo_rec_reserve( -/*=================*/ - trx_t* trx, /*!< in/out: transaction */ - undo_no_t undo_no);/*!< in: undo number of the record */ -/*******************************************************************//** -Releases a reserved undo record. */ -UNIV_INTERN -void -trx_undo_rec_release( -/*=================*/ - trx_t* trx, /*!< in/out: transaction */ - undo_no_t undo_no);/*!< in: undo number */ + trx_t* trx, /*!< in: transaction */ + undo_no_t limit, /*!< in: least undo number we need */ + roll_ptr_t* roll_ptr, /*!< out: roll pointer to undo record */ + mem_heap_t* heap); /*!< in: memory heap where copied */ + /*******************************************************************//** Rollback or clean up any incomplete transactions which were encountered in crash recovery. If the transaction already was committed, then we clean up a possible insert undo log. If the transaction was not yet committed, then we roll it back. */ -UNIV_INTERN void trx_rollback_or_clean_recovered( /*============================*/ @@ -120,8 +93,8 @@ encountered in crash recovery. If the transaction already was committed, then we clean up a possible insert undo log. If the transaction was not yet committed, then we roll it back. Note: this is done in a background thread. -@return a dummy parameter */ -extern "C" UNIV_INTERN +@return a dummy parameter */ +extern "C" os_thread_ret_t DECLARE_THREAD(trx_rollback_or_clean_all_recovered)( /*================================================*/ @@ -130,24 +103,21 @@ DECLARE_THREAD(trx_rollback_or_clean_all_recovered)( os_thread_create */ /*********************************************************************//** Creates a rollback command node struct. -@return own: rollback node struct */ -UNIV_INTERN +@return own: rollback node struct */ roll_node_t* roll_node_create( /*=============*/ mem_heap_t* heap); /*!< in: mem heap where created */ /***********************************************************//** Performs an execution step for a rollback command node in a query graph. -@return query thread to run next, or NULL */ -UNIV_INTERN +@return query thread to run next, or NULL */ que_thr_t* trx_rollback_step( /*==============*/ que_thr_t* thr); /*!< in: query thread */ /*******************************************************************//** Rollback a transaction used in MySQL. -@return error code or DB_SUCCESS */ -UNIV_INTERN +@return error code or DB_SUCCESS */ dberr_t trx_rollback_for_mysql( /*===================*/ @@ -155,8 +125,7 @@ trx_rollback_for_mysql( MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Rollback the latest SQL statement for MySQL. -@return error code or DB_SUCCESS */ -UNIV_INTERN +@return error code or DB_SUCCESS */ dberr_t trx_rollback_last_sql_stat_for_mysql( /*=================================*/ @@ -164,8 +133,7 @@ trx_rollback_last_sql_stat_for_mysql( MY_ATTRIBUTE((nonnull)); /*******************************************************************//** Rollback a transaction to a given savepoint or do a complete rollback. -@return error code or DB_SUCCESS */ -UNIV_INTERN +@return error code or DB_SUCCESS */ dberr_t trx_rollback_to_savepoint( /*======================*/ @@ -183,13 +151,12 @@ the row, these locks are naturally released in the rollback. Savepoints which were set after this savepoint are deleted. @return if no savepoint of the name found then DB_NO_SAVEPOINT, otherwise DB_SUCCESS */ -UNIV_INTERN dberr_t trx_rollback_to_savepoint_for_mysql( /*================================*/ trx_t* trx, /*!< in: transaction handle */ const char* savepoint_name, /*!< in: savepoint name */ - ib_int64_t* mysql_binlog_cache_pos) /*!< out: the MySQL binlog cache + int64_t* mysql_binlog_cache_pos) /*!< out: the MySQL binlog cache position corresponding to this savepoint; MySQL needs this information to remove the @@ -201,14 +168,13 @@ Creates a named savepoint. If the transaction is not yet started, starts it. If there is already a savepoint of the same name, this call erases that old savepoint and replaces it with a new. Savepoints are deleted in a transaction commit or rollback. -@return always DB_SUCCESS */ -UNIV_INTERN +@return always DB_SUCCESS */ dberr_t trx_savepoint_for_mysql( /*====================*/ trx_t* trx, /*!< in: transaction handle */ const char* savepoint_name, /*!< in: savepoint name */ - ib_int64_t binlog_cache_pos) /*!< in: MySQL binlog cache + int64_t binlog_cache_pos) /*!< in: MySQL binlog cache position corresponding to this connection at the time of the savepoint */ @@ -218,7 +184,6 @@ Releases a named savepoint. Savepoints which were set after this savepoint are deleted. @return if no savepoint of the name found then DB_NO_SAVEPOINT, otherwise DB_SUCCESS */ -UNIV_INTERN dberr_t trx_release_savepoint_for_mysql( /*============================*/ @@ -227,7 +192,6 @@ trx_release_savepoint_for_mysql( MY_ATTRIBUTE((nonnull, warn_unused_result)); /*******************************************************************//** Frees savepoint structs starting from savep. */ -UNIV_INTERN void trx_roll_savepoints_free( /*=====================*/ @@ -235,39 +199,20 @@ trx_roll_savepoints_free( trx_named_savept_t* savep); /*!< in: free all savepoints > this one; if this is NULL, free all savepoints of trx */ - -/** A cell of trx_undo_arr_t; used during a rollback and a purge */ -struct trx_undo_inf_t{ - ibool in_use; /*!< true if cell is being used */ - trx_id_t trx_no; /*!< transaction number: not defined during - a rollback */ - undo_no_t undo_no;/*!< undo number of an undo record */ -}; - -/** During a rollback and a purge, undo numbers of undo records currently being -processed are stored in this array */ - -struct trx_undo_arr_t{ - ulint n_cells; /*!< number of cells in the array */ - ulint n_used; /*!< number of cells in use */ - trx_undo_inf_t* infos; /*!< the array of undo infos */ - mem_heap_t* heap; /*!< memory heap from which allocated */ -}; - /** Rollback node states */ enum roll_node_state { ROLL_NODE_NONE = 0, /*!< Unknown state */ ROLL_NODE_SEND, /*!< about to send a rollback signal to the transaction */ ROLL_NODE_WAIT /*!< rollback signal sent to the - transaction, waiting for completion */ + transaction, waiting for completion */ }; /** Rollback command node in a query graph */ struct roll_node_t{ que_common_t common; /*!< node type: QUE_NODE_ROLLBACK */ enum roll_node_state state; /*!< node execution state */ - ibool partial;/*!< TRUE if we want a partial + bool partial;/*!< TRUE if we want a partial rollback */ trx_savept_t savept; /*!< savepoint to which to roll back, in the case of a @@ -280,7 +225,7 @@ struct trx_named_savept_t{ char* name; /*!< savepoint name */ trx_savept_t savept; /*!< the undo number corresponding to the savepoint */ - ib_int64_t mysql_binlog_cache_pos; + int64_t mysql_binlog_cache_pos; /*!< the MySQL binlog cache position corresponding to this savepoint, not defined if the MySQL binlogging is not |