summaryrefslogtreecommitdiffstats
path: root/storage/innobase/row/row0ins.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/row/row0ins.cc')
-rw-r--r--storage/innobase/row/row0ins.cc21
1 files changed, 15 insertions, 6 deletions
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