summaryrefslogtreecommitdiff
path: root/storage/innobase/log
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-09-07 22:09:28 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2018-09-07 22:09:28 +0300
commit4901f31c13f91e130f077f2f77b32c40b0036e32 (patch)
tree586f0ffeba0748e75064899d22d8179897d0df7f /storage/innobase/log
parentc3a80175b1978ced6c2a89a92707d24149aee9e9 (diff)
parent59950df533ab7231c77a59ec3e27cef855318939 (diff)
downloadmariadb-git-4901f31c13f91e130f077f2f77b32c40b0036e32.tar.gz
Merge 10.2 into 10.3
Diffstat (limited to 'storage/innobase/log')
-rw-r--r--storage/innobase/log/log0recv.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc
index f5c3f1ecb23..fe42de2b7a2 100644
--- a/storage/innobase/log/log0recv.cc
+++ b/storage/innobase/log/log0recv.cc
@@ -169,6 +169,35 @@ typedef std::map<
static recv_spaces_t recv_spaces;
+/** States of recv_addr_t */
+enum recv_addr_state {
+ /** not yet processed */
+ RECV_NOT_PROCESSED,
+ /** page is being read */
+ RECV_BEING_READ,
+ /** log records are being applied on the page */
+ RECV_BEING_PROCESSED,
+ /** log records have been applied on the page */
+ RECV_PROCESSED,
+ /** log records have been discarded because the tablespace
+ does not exist */
+ RECV_DISCARDED
+};
+
+/** Hashed page file address struct */
+struct recv_addr_t{
+ /** recovery state of the page */
+ recv_addr_state state;
+ /** tablespace identifier */
+ unsigned space:32;
+ /** page number */
+ unsigned page_no:32;
+ /** list of log records for this page */
+ UT_LIST_BASE_NODE_T(recv_t) rec_list;
+ /** hash node in the hash bucket chain */
+ hash_node_t addr_hash;
+};
+
/** Report optimized DDL operation (without redo log),
corresponding to MLOG_INDEX_LOAD.
@param[in] space_id tablespace identifier
@@ -1174,6 +1203,7 @@ parse_log:
redo log been written with something
older than InnoDB Plugin 1.0.4. */
ut_ad(offs == FIL_PAGE_TYPE
+ || srv_is_undo_tablespace(space_id)
|| offs == IBUF_TREE_SEG_HEADER
+ IBUF_HEADER + FSEG_HDR_OFFSET
|| offs == PAGE_BTR_IBUF_FREE_LIST
@@ -1199,6 +1229,7 @@ parse_log:
ut_ad(0
/* fil_crypt_rotate_page() writes this */
|| offs == FIL_PAGE_SPACE_ID
+ || srv_is_undo_tablespace(space_id)
|| offs == IBUF_TREE_SEG_HEADER
+ IBUF_HEADER + FSEG_HDR_SPACE
|| offs == IBUF_TREE_SEG_HEADER