mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 15:15:34 +02:00
Implement MySQL framework to support consistent read views in
cursors for InnoDB. The idea of the patch is that if MySQL requests a consistent read view, we open one when open a cursor, set is as the active view to a transaction when fetch from the cursor, and close together with cursor close. This patch is associated to bugs #11813, #11832, and #11833. Contains after review fixes.
This commit is contained in:
parent
adf5fdcd74
commit
6fd13aaa3c
8 changed files with 294 additions and 13 deletions
|
|
@ -69,6 +69,35 @@ read_view_print(
|
|||
/*============*/
|
||||
read_view_t* view); /* in: read view */
|
||||
|
||||
/*************************************************************************
|
||||
Create a consistent cursor view for mysql to be used in cursors. In this
|
||||
consistent read view modifications done by the creating transaction or future
|
||||
transactions are not visible. */
|
||||
|
||||
cursor_view_t*
|
||||
read_cursor_view_create_for_mysql(
|
||||
/*==============================*/
|
||||
trx_t* cr_trx);/* in: trx where cursor view is created */
|
||||
|
||||
/*************************************************************************
|
||||
Close a given consistent cursor view for and restore global read view
|
||||
back to a transaction. */
|
||||
|
||||
void
|
||||
read_cursor_view_close_for_mysql(
|
||||
/*=============================*/
|
||||
trx_t* trx, /* in: trx */
|
||||
cursor_view_t* curview); /* in: cursor view to be closed */
|
||||
/*************************************************************************
|
||||
This function sets a given consistent cursor view to a transaction
|
||||
read view if given consistent cursor view is not null. Otherwice, function
|
||||
restores a global read view to a transaction read view. */
|
||||
|
||||
void
|
||||
read_cursor_set_for_mysql(
|
||||
/*======================*/
|
||||
trx_t* trx, /* in: transaction where cursor is set */
|
||||
cursor_view_t* curview);/* in: consistent cursor view to be set */
|
||||
|
||||
/* Read view lists the trx ids of those transactions for which a consistent
|
||||
read should not see the modifications to the database. */
|
||||
|
|
@ -100,6 +129,17 @@ struct read_view_struct{
|
|||
/* List of read views in trx_sys */
|
||||
};
|
||||
|
||||
/* Implement InnoDB framework to support consistent read views in
|
||||
cursors. This struct holds both heap where consistent read view
|
||||
is allocated and pointer to a read view. */
|
||||
|
||||
struct cursor_view_struct{
|
||||
mem_heap_t* heap;
|
||||
/* Memory heap for the cursor view */
|
||||
read_view_t* read_view;
|
||||
/* Consistent read view of the cursor*/
|
||||
};
|
||||
|
||||
#ifndef UNIV_NONINL
|
||||
#include "read0read.ic"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10,5 +10,6 @@ Created 2/16/1997 Heikki Tuuri
|
|||
#define read0types_h
|
||||
|
||||
typedef struct read_view_struct read_view_t;
|
||||
typedef struct cursor_view_struct cursor_view_t;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -602,8 +602,19 @@ struct trx_struct{
|
|||
UT_LIST_BASE_NODE_T(lock_t)
|
||||
trx_locks; /* locks reserved by the transaction */
|
||||
/*------------------------------*/
|
||||
mem_heap_t* read_view_heap; /* memory heap for the read view */
|
||||
read_view_t* read_view; /* consistent read view or NULL */
|
||||
mem_heap_t* global_read_view_heap;
|
||||
/* memory heap for the global read
|
||||
view */
|
||||
read_view_t* global_read_view;
|
||||
/* consistent read view used in the
|
||||
transaction is stored here if
|
||||
transaction is using a consistent
|
||||
read view associated to a cursor */
|
||||
read_view_t* read_view; /* consistent read view used in the
|
||||
transaction or NULL, this read view
|
||||
can be normal read view associated
|
||||
to a transaction or read view
|
||||
associated to a cursor */
|
||||
/*------------------------------*/
|
||||
UT_LIST_BASE_NODE_T(trx_named_savept_t)
|
||||
trx_savepoints; /* savepoints set with SAVEPOINT ...,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue