summaryrefslogtreecommitdiffstats
path: root/storage/innobase/row
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/row')
-rw-r--r--storage/innobase/row/row0ftsort.cc3
-rw-r--r--storage/innobase/row/row0import.cc13
-rw-r--r--storage/innobase/row/row0ins.cc21
-rw-r--r--storage/innobase/row/row0merge.cc36
-rw-r--r--storage/innobase/row/row0purge.cc1
-rw-r--r--storage/innobase/row/row0sel.cc1
-rw-r--r--storage/innobase/row/row0undo.cc2
-rw-r--r--storage/innobase/row/row0upd.cc25
8 files changed, 51 insertions, 51 deletions
diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc
index 17a2f034..9d85e2b1 100644
--- a/storage/innobase/row/row0ftsort.cc
+++ b/storage/innobase/row/row0ftsort.cc
@@ -1630,9 +1630,6 @@ row_fts_merge_insert(
/* We should set the flags2 with aux_table_name here,
in order to get the correct aux table names. */
index->table->flags2 |= DICT_TF2_FTS_AUX_HEX_NAME;
- DBUG_EXECUTE_IF("innodb_test_wrong_fts_aux_table_name",
- index->table->flags2 &= ~DICT_TF2_FTS_AUX_HEX_NAME
- & ((1U << DICT_TF2_BITS) - 1););
fts_table.type = FTS_INDEX_TABLE;
fts_table.index_id = index->id;
fts_table.table_id = table->id;
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index d2609fdb..2516e24e 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -117,7 +117,6 @@ struct row_import {
row_import() UNIV_NOTHROW
:
m_table(NULL),
- m_version(0),
m_hostname(NULL),
m_table_name(NULL),
m_autoinc(0),
@@ -196,8 +195,6 @@ struct row_import {
dict_table_t* m_table; /*!< Table instance */
- ulint m_version; /*!< Version of config file */
-
byte* m_hostname; /*!< Hostname where the
tablespace was exported */
byte* m_table_name; /*!< Exporting instance table
@@ -2992,17 +2989,13 @@ row_import_read_meta_data(
return(DB_IO_ERROR);
}
- cfg.m_version = mach_read_from_4(row);
-
/* Check the version number. */
- switch (cfg.m_version) {
+ switch (mach_read_from_4(row)) {
case IB_EXPORT_CFG_VERSION_V1:
-
return(row_import_read_v1(file, thd, &cfg));
default:
- ib_errf(thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- "Unsupported meta-data version number (" ULINTPF "), "
- "file ignored", cfg.m_version);
+ ib_senderrf(thd, IB_LOG_LEVEL_ERROR, ER_NOT_SUPPORTED_YET,
+ "meta-data version");
}
return(DB_ERROR);
diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc
index bdee0ed1..9c3c5d22 100644
--- a/storage/innobase/row/row0ins.cc
+++ b/storage/innobase/row/row0ins.cc
@@ -2638,14 +2638,17 @@ row_ins_clust_index_entry_low(
ut_ad(!dict_index_is_online_ddl(index));
ut_ad(!index->table->persistent_autoinc);
ut_ad(!index->is_instant());
+ ut_ad(!entry->info_bits);
mtr.set_log_mode(MTR_LOG_NO_REDO);
} else {
index->set_modified(mtr);
- if (UNIV_UNLIKELY(entry->is_metadata())) {
+ if (UNIV_UNLIKELY(entry->info_bits != 0)) {
+ ut_ad(entry->is_metadata());
ut_ad(index->is_instant());
ut_ad(!dict_index_is_online_ddl(index));
ut_ad(mode == BTR_MODIFY_TREE);
+ ut_ad(flags == BTR_NO_LOCKING_FLAG);
} else {
if (mode == BTR_MODIFY_LEAF
&& dict_index_is_online_ddl(index)) {
@@ -2787,11 +2790,6 @@ avoid_bulk:
skip_bulk_insert:
if (UNIV_UNLIKELY(entry->info_bits != 0)) {
- ut_ad(entry->is_metadata());
- ut_ad(flags == BTR_NO_LOCKING_FLAG);
- ut_ad(index->is_instant());
- ut_ad(!dict_index_is_online_ddl(index));
-
const rec_t* rec = btr_pcur_get_rec(&pcur);
if (rec_get_info_bits(rec, page_rec_is_comp(rec))
@@ -2895,9 +2893,20 @@ do_insert:
}
}
+ if (err == DB_SUCCESS && entry->info_bits) {
+ if (buf_block_t* root
+ = btr_root_block_get(index, RW_X_LATCH, &mtr,
+ &err)) {
+ btr_set_instant(root, *index, &mtr);
+ } else {
+ ut_ad("cannot find root page" == 0);
+ }
+ }
+
mtr.commit();
if (big_rec) {
+ ut_ad(err == DB_SUCCESS);
/* Online table rebuild could read (and
ignore) the incomplete record at this point.
If online rebuild is in progress, the
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index 5df93fe6..188d8ba5 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -120,7 +120,7 @@ public:
ut_ad(mtr_started == scan_mtr->is_active());
DBUG_EXECUTE_IF("row_merge_instrument_log_check_flush",
- log_sys.set_check_flush_or_checkpoint(););
+ log_sys.set_check_for_checkpoint(););
for (idx_tuple_vec::iterator it = m_dtuple_vec.begin();
it != m_dtuple_vec.end();
@@ -128,7 +128,7 @@ public:
dtuple = *it;
ut_ad(dtuple);
- if (log_sys.check_flush_or_checkpoint()) {
+ if (log_sys.check_for_checkpoint()) {
if (mtr_started) {
if (!btr_pcur_move_to_prev_on_page(pcur)) {
error = DB_CORRUPTION;
@@ -2235,6 +2235,8 @@ end_of_index:
goto err_exit;
}
+ buf_page_make_young_if_needed(&block->page);
+
page_cur_set_before_first(block, cur);
if (!page_cur_move_to_next(cur)
|| page_cur_is_after_last(cur)) {
@@ -3545,17 +3547,6 @@ row_merge_sort(
of file marker). Thus, it must be at least one block. */
ut_ad(file->offset > 0);
- /* These thd_progress* calls will crash on sol10-64 when innodb_plugin
- is used. MDEV-9356: innodb.innodb_bug53290 fails (crashes) on
- sol10-64 in buildbot.
- */
-#ifndef __sun__
- /* Progress report only for "normal" indexes. */
- if (dup && !(dup->index->type & DICT_FTS)) {
- thd_progress_init(trx->mysql_thd, 1);
- }
-#endif /* __sun__ */
-
if (global_system_variables.log_warnings > 2) {
sql_print_information("InnoDB: Online DDL : merge-sorting"
" has estimated " ULINTPF " runs",
@@ -3564,15 +3555,6 @@ row_merge_sort(
/* Merge the runs until we have one big run */
do {
- /* Report progress of merge sort to MySQL for
- show processlist progress field */
- /* Progress report only for "normal" indexes. */
-#ifndef __sun__
- if (dup && !(dup->index->type & DICT_FTS)) {
- thd_progress_report(trx->mysql_thd, file->offset - num_runs, file->offset);
- }
-#endif /* __sun__ */
-
error = row_merge(trx, dup, file, block, tmpfd,
&num_runs, run_offset, stage,
crypt_block, space);
@@ -3596,13 +3578,6 @@ row_merge_sort(
ut_free(run_offset);
- /* Progress report only for "normal" indexes. */
-#ifndef __sun__
- if (dup && !(dup->index->type & DICT_FTS)) {
- thd_progress_end(trx->mysql_thd);
- }
-#endif /* __sun__ */
-
DBUG_RETURN(error);
}
@@ -4436,13 +4411,14 @@ row_merge_file_create(
merge_file->fd = row_merge_file_create_low(path);
merge_file->offset = 0;
merge_file->n_rec = 0;
-
+#ifdef HAVE_FCNTL_DIRECT
if (merge_file->fd != OS_FILE_CLOSED) {
if (srv_disable_sort_file_cache) {
os_file_set_nocache(merge_file->fd,
"row0merge.cc", "sort");
}
}
+#endif
return(merge_file->fd);
}
diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc
index 4756cc37..d83ab861 100644
--- a/storage/innobase/row/row0purge.cc
+++ b/storage/innobase/row/row0purge.cc
@@ -822,7 +822,6 @@ skip_secondaries:
buf_page_get(page_id_t(rseg.space->id,
page_no),
0, RW_X_LATCH, &mtr)) {
- block->page.set_accessed();
buf_page_make_young_if_needed(&block->page);
byte* data_field = block->page.frame
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index 6c76dd91..33f4d81f 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -1222,6 +1222,7 @@ re_scan:
if (!cur_block) {
goto func_end;
}
+ buf_page_make_young_if_needed(&cur_block->page);
} else {
mtr->start();
goto func_end;
diff --git a/storage/innobase/row/row0undo.cc b/storage/innobase/row/row0undo.cc
index 8a1041c8..f14673c1 100644
--- a/storage/innobase/row/row0undo.cc
+++ b/storage/innobase/row/row0undo.cc
@@ -318,6 +318,8 @@ static buf_block_t* row_undo_rec_get(undo_node_t* node)
return nullptr;
}
+ buf_page_make_young_if_needed(&undo_page->page);
+
uint16_t offset = undo->top_offset;
buf_block_t* prev_page = undo_page;
diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc
index bec53841..a39574d2 100644
--- a/storage/innobase/row/row0upd.cc
+++ b/storage/innobase/row/row0upd.cc
@@ -2158,6 +2158,25 @@ row_upd_clust_rec_by_insert_inherit_func(
return(inherit);
}
+/** Mark 'disowned' BLOBs as 'owned' and 'inherited' again,
+after resuming from a lock wait.
+@param entry clustered index entry */
+static ATTRIBUTE_COLD void row_upd_reown_inherited_fields(dtuple_t *entry)
+{
+ for (ulint i= 0; i < entry->n_fields; i++)
+ {
+ const dfield_t *dfield= dtuple_get_nth_field(entry, i);
+ if (dfield_is_ext(dfield))
+ {
+ byte *blob_len= static_cast<byte*>(dfield->data) +
+ dfield->len - (BTR_EXTERN_FIELD_REF_SIZE - BTR_EXTERN_LEN);
+ ut_ad(*blob_len & BTR_EXTERN_OWNER_FLAG);
+ *blob_len= byte((*blob_len & ~BTR_EXTERN_OWNER_FLAG) |
+ BTR_EXTERN_INHERITED_FLAG);
+ }
+ }
+}
+
/***********************************************************//**
Marks the clustered index record deleted and inserts the updated version
of the record to the index. This function should be used when the ordering
@@ -2236,12 +2255,16 @@ row_upd_clust_rec_by_insert(
/* If the clustered index record is already delete
marked, then we are here after a DB_LOCK_WAIT.
Skip delete marking clustered index and disowning
- its blobs. */
+ its blobs. Mark the BLOBs in the index entry
+ (which we copied from the already "disowned" rec)
+ as "owned", like it was on the previous call of
+ row_upd_clust_rec_by_insert(). */
ut_ad(row_get_rec_trx_id(rec, index, offsets)
== trx->id);
ut_ad(!trx_undo_roll_ptr_is_insert(
row_get_rec_roll_ptr(rec, index,
offsets)));
+ row_upd_reown_inherited_fields(entry);
goto check_fk;
}