summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-01-18 12:59:50 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2022-01-18 12:59:50 +0200
commit1abc476f0b4fe60cb268fc68cefd9b5a479983ac (patch)
tree7540839c197bf5867685cf4de0ae7c68f0267640
parent343f695c7f660eca6bb97bb09bad317387f59b8f (diff)
parente44439ab7354c5dff20707325694839e9346fb27 (diff)
downloadmariadb-git-1abc476f0b4fe60cb268fc68cefd9b5a479983ac.tar.gz
Merge 10.5 into 10.6st-10.6-merge
-rw-r--r--plugin/type_mysql_json/type.cc2
-rw-r--r--storage/example/ha_example.cc2
-rw-r--r--storage/innobase/buf/buf0buf.cc3
-rw-r--r--storage/innobase/buf/buf0flu.cc7
-rw-r--r--storage/innobase/include/mtr0types.h16
-rw-r--r--storage/innobase/log/log0recv.cc6
-rw-r--r--storage/oqgraph/ha_oqgraph.cc2
-rw-r--r--storage/oqgraph/mysql-test/oqgraph/invalid_operations.result11
-rw-r--r--storage/oqgraph/mysql-test/oqgraph/invalid_operations.test13
-rw-r--r--storage/spider/ha_spider.cc268
-rw-r--r--storage/spider/ha_spider.h5
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/mdev_27240.result16
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_27240.cnf2
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_27240.test28
-rw-r--r--storage/spider/spd_include.h17
-rw-r--r--storage/spider/spd_table.cc90
-rw-r--r--storage/spider/spd_table.h10
17 files changed, 205 insertions, 293 deletions
diff --git a/plugin/type_mysql_json/type.cc b/plugin/type_mysql_json/type.cc
index 61507a24d92..65e62f60720 100644
--- a/plugin/type_mysql_json/type.cc
+++ b/plugin/type_mysql_json/type.cc
@@ -211,6 +211,6 @@ maria_declare_plugin(type_mysql_json)
NULL,
NULL,
"0.1",
- MariaDB_PLUGIN_MATURITY_ALPHA
+ MariaDB_PLUGIN_MATURITY_BETA
}
maria_declare_plugin_end;
diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc
index 30484a41087..eaa3e51ca67 100644
--- a/storage/example/ha_example.cc
+++ b/storage/example/ha_example.cc
@@ -262,7 +262,7 @@ static int example_init_func(void *p)
example_hton->table_options= example_table_option_list;
example_hton->field_options= example_field_option_list;
example_hton->tablefile_extensions= ha_example_exts;
- example_hton->drop_table= [](handlerton *, const char*) { return 0; };
+ example_hton->drop_table= [](handlerton *, const char*) { return -1; };
DBUG_RETURN(0);
}
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index 93934dd2b5b..c5673e99497 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -1316,6 +1316,9 @@ inline bool buf_pool_t::realloc(buf_block_t *block)
new_block = buf_LRU_get_free_only();
if (new_block == NULL) {
+ mysql_mutex_lock(&buf_pool.flush_list_mutex);
+ page_cleaner_wakeup();
+ mysql_mutex_unlock(&buf_pool.flush_list_mutex);
return(false); /* free list was not enough */
}
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index dec0292a088..61c81bd589a 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2013, 2021, MariaDB Corporation.
+Copyright (c) 2013, 2022, MariaDB Corporation.
Copyright (c) 2013, 2014, Fusion-io
This program is free software; you can redistribute it and/or modify it under
@@ -1797,11 +1797,6 @@ static void buf_flush_wait(lsn_t lsn)
my_cond_wait(&buf_pool.done_flush_list,
&buf_pool.flush_list_mutex.m_mutex);
}
-
- /* Wait for the checkpoint. */
- while (buf_flush_sync_lsn)
- my_cond_wait(&buf_pool.done_flush_list,
- &buf_pool.flush_list_mutex.m_mutex);
}
/** Wait until all persistent pages are flushed up to a limit.
diff --git a/storage/innobase/include/mtr0types.h b/storage/innobase/include/mtr0types.h
index 829464f8cf4..9ee7810fa7b 100644
--- a/storage/innobase/include/mtr0types.h
+++ b/storage/innobase/include/mtr0types.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2021, MariaDB Corporation.
+Copyright (c) 2017, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -112,13 +112,9 @@ If same_page=1 is set in a record that follows a same_page=0 record
in a mini-transaction, the tablespace identifier and page number
fields will be omitted.
-(For some file-oriented records (if same_page=1 for the first records
-of a mini-transaction), we will write tablespace identifier using the
-same 1-to-5-byte encoding. TBD: describe the exact format of
-file-oriented records. With MDEV-14425, we could write file-level log
-records to a separate file, not interleaved with page-level redo log
-at all. We could reserve the file ib_logfile0 for checkpoint information
-and for file-level redo log records.)
+For FILE_ records (if same_page=1 for the first record
+of a mini-transaction), we will write a tablespace identifier and
+a page number (always 0) using the same 1-to-5-byte encoding.
For FREE_PAGE or INIT_PAGE, if same_page=1, the record will be treated
as corrupted (or reserved for future extension). The type code must
@@ -301,18 +297,14 @@ enum mfile_type_t
FILE_RENAME = 0xa0,
/** Modify a file. Followed by tablespace ID and the file name. */
FILE_MODIFY = 0xb0,
-#if 1 /* MDEV-14425 FIXME: Remove this! */
/** End-of-checkpoint marker. Followed by 2 dummy bytes of page identifier,
8 bytes of LSN, and padded with a NUL; @see SIZE_OF_FILE_CHECKPOINT. */
FILE_CHECKPOINT = 0xf0
-#endif
};
-#if 1 /* MDEV-14425 FIXME: Remove this! */
/** Size of a FILE_CHECKPOINT record, including the trailing byte to
terminate the mini-transaction. */
constexpr byte SIZE_OF_FILE_CHECKPOINT= 3/*type,page_id*/ + 8/*LSN*/ + 1;
-#endif
#ifndef UNIV_INNOCHECKSUM
/** Types for the mlock objects to store in the mtr_t::m_memo */
diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc
index b910f9075e3..71b9a034482 100644
--- a/storage/innobase/log/log0recv.cc
+++ b/storage/innobase/log/log0recv.cc
@@ -2212,9 +2212,7 @@ eom_found:
#endif
uint32_t space_id= 0, page_no= 0, last_offset= 0;
-#if 1 /* MDEV-14425 FIXME: remove this */
bool got_page_op= false;
-#endif
for (l= log; l < end; l+= rlen)
{
const byte *const recs= l;
@@ -2484,11 +2482,9 @@ same_page:
pages.erase(i);
}
}
-#if 1 /* MDEV-14425 FIXME: this must be in the checkpoint file only! */
else if (rlen)
{
switch (b & 0xf0) {
-# if 1 /* MDEV-14425 FIXME: Remove this! */
case FILE_CHECKPOINT:
if (space_id == 0 && page_no == 0 && rlen == 8)
{
@@ -2519,7 +2515,6 @@ same_page:
}
continue;
}
-# endif
/* fall through */
default:
if (!srv_force_recovery)
@@ -2598,7 +2593,6 @@ same_page:
return true;
}
}
-#endif
else
goto malformed;
}
diff --git a/storage/oqgraph/ha_oqgraph.cc b/storage/oqgraph/ha_oqgraph.cc
index 39d10699d32..9bc4b3339dd 100644
--- a/storage/oqgraph/ha_oqgraph.cc
+++ b/storage/oqgraph/ha_oqgraph.cc
@@ -194,7 +194,7 @@ static int oqgraph_init(void *p)
hton->discover_table_structure= oqgraph_discover_table_structure;
hton->close_connection = oqgraph_close_connection;
- hton->drop_table= [](handlerton *, const char*) { return 0; };
+ hton->drop_table= [](handlerton *, const char*) { return -1; };
oqgraph_init_done= TRUE;
return 0;
diff --git a/storage/oqgraph/mysql-test/oqgraph/invalid_operations.result b/storage/oqgraph/mysql-test/oqgraph/invalid_operations.result
index 49639c278d0..930d65afc53 100644
--- a/storage/oqgraph/mysql-test/oqgraph/invalid_operations.result
+++ b/storage/oqgraph/mysql-test/oqgraph/invalid_operations.result
@@ -30,3 +30,14 @@ update graph set origid=123;
ERROR HY000: Table 'graph' is read only
DROP TABLE graph_base;
DROP TABLE graph;
+#
+# End of 10.0 tests
+#
+#
+# MDEV-25373 DROP TABLE doesn't raise error while dropping non-existing table in MariaDB 10.5.9 when OQGraph SE is loaded to the server
+#
+drop table foobar;
+ERROR 42S02: Unknown table 'test.foobar'
+#
+# End of 10.5 tests
+#
diff --git a/storage/oqgraph/mysql-test/oqgraph/invalid_operations.test b/storage/oqgraph/mysql-test/oqgraph/invalid_operations.test
index cab99ec5018..24351cc9998 100644
--- a/storage/oqgraph/mysql-test/oqgraph/invalid_operations.test
+++ b/storage/oqgraph/mysql-test/oqgraph/invalid_operations.test
@@ -48,3 +48,16 @@ update graph set origid=123;
DROP TABLE graph_base;
DROP TABLE graph;
+--echo #
+--echo # End of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-25373 DROP TABLE doesn't raise error while dropping non-existing table in MariaDB 10.5.9 when OQGraph SE is loaded to the server
+--echo #
+--error 1051
+drop table foobar;
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc
index faf5dc5c159..f51e67559b7 100644
--- a/storage/spider/ha_spider.cc
+++ b/storage/spider/ha_spider.cc
@@ -1,5 +1,5 @@
/* Copyright (C) 2008-2019 Kentoku Shiba
- Copyright (C) 2019 MariaDB corp
+ Copyright (C) 2019-2022 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -88,8 +88,7 @@ ha_spider::ha_spider(
#endif
search_link_query_id = 0;
#ifdef WITH_PARTITION_STORAGE_ENGINE
- partition_handler_share = NULL;
- pt_handler_share_owner = FALSE;
+ partition_handler = NULL;
#endif
#ifdef HA_MRR_USE_DEFAULT_IMPL
multi_range_keys = NULL;
@@ -192,8 +191,7 @@ ha_spider::ha_spider(
#endif
search_link_query_id = 0;
#ifdef WITH_PARTITION_STORAGE_ENGINE
- partition_handler_share = NULL;
- pt_handler_share_owner = FALSE;
+ partition_handler = NULL;
#endif
#ifdef HA_MRR_USE_DEFAULT_IMPL
multi_range_keys = NULL;
@@ -280,12 +278,7 @@ ha_spider::~ha_spider()
DBUG_ENTER("ha_spider::~ha_spider");
DBUG_PRINT("info",("spider this=%p", this));
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (pt_handler_share_owner)
- {
- spider_free(spider_current_trx, partition_handler_share, MYF(0));
- pt_handler_share_owner = FALSE;
- }
- partition_handler_share = NULL;
+ partition_handler = NULL;
#endif
if (wide_handler_owner)
{
@@ -342,14 +335,9 @@ int ha_spider::open(
SPIDER_WIDE_SHARE *wide_share;
#ifdef WITH_PARTITION_STORAGE_ENGINE
uint part_num;
- bool pt_handler_share_alloc = FALSE;
- bool pt_handler_mutex = FALSE;
- ha_spider **pt_handler_share_handlers = NULL;
+ bool partition_handler_alloc = FALSE;
+ ha_spider **wide_handler_handlers = NULL;
ha_partition *clone_source;
- ha_spider *pt_handler_share_key;
-#ifdef SPIDER_HAS_HASH_VALUE_TYPE
- my_hash_value_type hash_value;
-#endif
#endif
DBUG_ENTER("ha_spider::open");
DBUG_PRINT("info",("spider this=%p", this));
@@ -360,18 +348,14 @@ int ha_spider::open(
table->file->get_no_parts("", &part_num);
if (part_num)
{
- pt_handler_share_handlers =
+ wide_handler_handlers =
(ha_spider **) ((ha_partition *) table->file)->get_child_handlers();
- spider = pt_handler_share_handlers[0];
- owner = pt_handler_share_handlers[part_num - 1];
+ spider = wide_handler_handlers[0];
+ owner = wide_handler_handlers[part_num - 1];
clone_source = ((ha_partition *) table->file)->get_clone_source();
if (clone_source)
{
- pt_handler_share_key = (ha_spider *)
- clone_source->get_child_handlers()[0];
is_clone = TRUE;
- } else {
- pt_handler_share_key = spider;
}
} else {
#endif
@@ -379,7 +363,6 @@ int ha_spider::open(
owner = this;
#ifdef WITH_PARTITION_STORAGE_ENGINE
clone_source = NULL;
- pt_handler_share_key = this;
}
#endif
if (!spider->wide_handler)
@@ -392,6 +375,7 @@ int ha_spider::open(
uchar *rnd_read_bitmap;
uchar *rnd_write_bitmap;
if (!(wide_handler = (SPIDER_WIDE_HANDLER *)
+#ifdef WITH_PARTITION_STORAGE_ENGINE
spider_bulk_malloc(spider_current_trx, 16, MYF(MY_WME | MY_ZEROFILL),
&wide_handler, sizeof(SPIDER_WIDE_HANDLER),
&searched_bitmap,
@@ -408,7 +392,29 @@ int ha_spider::open(
(uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
&rnd_write_bitmap,
(uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
- NullS))
+ &partition_handler,
+ (uint) sizeof(SPIDER_PARTITION_HANDLER),
+ NullS)
+#else
+ spider_bulk_malloc(spider_current_trx, 16, MYF(MY_WME | MY_ZEROFILL),
+ &wide_handler, sizeof(SPIDER_WIDE_HANDLER),
+ &searched_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ &ft_discard_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ &position_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ &idx_read_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ &idx_write_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ &rnd_read_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ &rnd_write_bitmap,
+ (uint) sizeof(uchar) * no_bytes_in_map(table->read_set),
+ NullS)
+#endif
+ )
) {
error_num = HA_ERR_OUT_OF_MEM;
goto error_wide_handler_alloc;
@@ -422,6 +428,9 @@ int ha_spider::open(
wide_handler->idx_write_bitmap = idx_write_bitmap;
wide_handler->rnd_read_bitmap = rnd_read_bitmap;
wide_handler->rnd_write_bitmap = rnd_write_bitmap;
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ wide_handler->partition_handler = partition_handler;
+#endif
wide_handler->owner = owner;
if (table_share->tmp_table == NO_TMP_TABLE)
wide_handler->top_share = table->s;
@@ -431,81 +440,37 @@ int ha_spider::open(
memset(wide_handler->searched_bitmap, 0,
no_bytes_in_map(table->read_set));
wide_handler_alloc = TRUE;
- } else {
- wide_handler = spider->wide_handler;
- }
+
if (!share && !spider_get_share(name, table, thd, this, &error_num))
goto error_get_share;
wide_share = share->wide_share;
+
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ DBUG_PRINT("info",("spider create partition_handler"));
+ DBUG_PRINT("info",("spider table=%p", table));
+ partition_handler->table = table;
+ partition_handler->no_parts = part_num;
+ partition_handler->owner = owner;
+ partition_handler->parallel_search_query_id = 0;
+ spider->partition_handler = partition_handler;
+ owner->partition_handler = partition_handler;
+ partition_handler->handlers = wide_handler_handlers;
+ partition_handler_alloc = TRUE;
+ } else {
+ wide_handler = spider->wide_handler;
+ partition_handler = wide_handler->partition_handler;
+
+ if (!share && !spider_get_share(name, table, thd, this, &error_num))
+ goto error_get_share;
+
+ wide_share= share->wide_share;
+ }
if (wide_handler_alloc)
{
thr_lock_data_init(&wide_share->lock, &wide_handler->lock, NULL);
}
-#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (!wide_handler->partition_handler_share)
- {
- pt_handler_mutex = TRUE;
- pthread_mutex_lock(&wide_share->pt_handler_mutex);
-#ifdef SPIDER_HAS_HASH_VALUE_TYPE
- hash_value = my_calc_hash(&wide_share->pt_handler_hash,
- (uchar*) pt_handler_share_key, sizeof(ha_spider *));
- if (!(partition_handler_share = (SPIDER_PARTITION_HANDLER_SHARE*)
- my_hash_search_using_hash_value(&wide_share->pt_handler_hash,
- hash_value, (uchar*) pt_handler_share_key, sizeof(ha_spider *))))
-#else
- if (!(partition_handler_share = (SPIDER_PARTITION_HANDLER_SHARE*)
- my_hash_search(&wide_share->pt_handler_hash,
- (uchar*) pt_handler_share_key, sizeof(ha_spider *))))
-#endif
- {
- if (!(partition_handler_share = (SPIDER_PARTITION_HANDLER_SHARE *)
- spider_bulk_malloc(spider_current_trx, 15, MYF(MY_WME | MY_ZEROFILL),
- &partition_handler_share, sizeof(SPIDER_PARTITION_HANDLER_SHARE),
- NullS))
- ) {
- error_num = HA_ERR_OUT_OF_MEM;
- goto error_partition_handler_share_alloc;
- }
- DBUG_PRINT("info",("spider create partition_handler_share"));
- DBUG_PRINT("info",("spider table=%p", table));
- partition_handler_share->table = table;
- partition_handler_share->table_hash_value = hash_value;
- partition_handler_share->no_parts = part_num;
- partition_handler_share->owner = owner;
- partition_handler_share->parallel_search_query_id = 0;
- spider->partition_handler_share = partition_handler_share;
- owner->partition_handler_share = partition_handler_share;
- owner->pt_handler_share_owner = TRUE;
- partition_handler_share->handlers = pt_handler_share_handlers;
- uint old_elements = wide_share->pt_handler_hash.array.max_element;
-#ifdef HASH_UPDATE_WITH_HASH_VALUE
- if (my_hash_insert_with_hash_value(&wide_share->pt_handler_hash,
- hash_value, (uchar*) partition_handler_share))
-#else
- if (my_hash_insert(&wide_share->pt_handler_hash,
- (uchar*) partition_handler_share))
-#endif
- {
- error_num = HA_ERR_OUT_OF_MEM;
- goto error_hash_insert;
- }
- if (wide_share->pt_handler_hash.array.max_element > old_elements)
- {
- spider_alloc_calc_mem(spider_current_trx,
- wide_share->pt_handler_hash,
- (wide_share->pt_handler_hash.array.max_element -
- old_elements) *
- wide_share->pt_handler_hash.array.size_of_element);
- }
- }
- pthread_mutex_unlock(&wide_share->pt_handler_mutex);
- pt_handler_mutex = FALSE;
- pt_handler_share_alloc = TRUE;
- } else {
- partition_handler_share = wide_handler->partition_handler_share;
- }
#endif
init_sql_alloc_size =
spider_param_init_sql_alloc_size(thd, share->init_sql_alloc_size);
@@ -572,10 +537,10 @@ int ha_spider::open(
{
for (roop_count = 0; roop_count < (int) part_num; roop_count++)
{
- if (partition_handler_share->handlers[roop_count]->share == share)
+ if (partition_handler->handlers[roop_count]->share == share)
{
pt_clone_source_handler =
- partition_handler_share->handlers[roop_count];
+ partition_handler->handlers[roop_count];
break;
}
}
@@ -589,10 +554,10 @@ int ha_spider::open(
{
wide_handler->lock_mode =
pt_clone_source_handler->wide_handler->lock_mode;
- if (!partition_handler_share->clone_bitmap_init)
+ if (!partition_handler->clone_bitmap_init)
{
pt_clone_source_handler->set_select_column_mode();
- partition_handler_share->clone_bitmap_init = TRUE;
+ partition_handler->clone_bitmap_init = TRUE;
}
set_clone_searched_bitmap();
wide_handler->position_bitmap_init = FALSE;
@@ -623,31 +588,13 @@ error_reset:
error_init_blob_buff:
error_init_result_list:
#ifdef WITH_PARTITION_STORAGE_ENGINE
-error_hash_insert:
- if (pt_handler_share_alloc)
+ if (partition_handler_alloc)
{
wide_share = share->wide_share;
- if (!pt_handler_mutex)
- pthread_mutex_lock(&wide_share->pt_handler_mutex);
-#ifdef HASH_UPDATE_WITH_HASH_VALUE
- my_hash_delete_with_hash_value(&wide_share->pt_handler_hash,
- partition_handler_share->table_hash_value,
- (uchar*) partition_handler_share);
-#else
- my_hash_delete(&wide_share->pt_handler_hash,
- (uchar*) partition_handler_share);
-#endif
- pthread_mutex_unlock(&wide_share->pt_handler_mutex);
- pt_handler_mutex = FALSE;
- spider_free(spider_current_trx, partition_handler_share, MYF(0));
- spider->partition_handler_share = NULL;
- owner->partition_handler_share = NULL;
- owner->pt_handler_share_owner = FALSE;
+ spider->partition_handler = NULL;
+ owner->partition_handler = NULL;
}
-error_partition_handler_share_alloc:
- if (pt_handler_mutex)
- pthread_mutex_unlock(&wide_share->pt_handler_mutex);
- partition_handler_share = NULL;
+ partition_handler = NULL;
#endif
spider_free_share(share);
share = NULL;
@@ -661,9 +608,9 @@ error_get_share:
{
spider_free(spider_current_trx, wide_handler, MYF(0));
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (pt_handler_share_handlers)
+ if (wide_handler_handlers)
{
- pt_handler_share_handlers[0]->wide_handler = NULL;
+ wide_handler_handlers[0]->wide_handler = NULL;
}
#endif
spider->wide_handler = NULL;
@@ -679,7 +626,6 @@ int ha_spider::close()
{
int error_num = 0, roop_count, error_num2;
THD *thd = ha_thd();
- SPIDER_WIDE_SHARE *wide_share;
backup_error_status();
DBUG_ENTER("ha_spider::close");
DBUG_PRINT("info",("spider this=%p", this));
@@ -769,23 +715,7 @@ int ha_spider::close()
conn_keys = NULL;
}
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (pt_handler_share_owner)
- {
- wide_share = share->wide_share;
- pthread_mutex_lock(&wide_share->pt_handler_mutex);
-#ifdef HASH_UPDATE_WITH_HASH_VALUE
- my_hash_delete_with_hash_value(&wide_share->pt_handler_hash,
- partition_handler_share->table_hash_value,
- (uchar*) partition_handler_share);
-#else
- my_hash_delete(&wide_share->pt_handler_hash,
- (uchar*) partition_handler_share);
-#endif
- pthread_mutex_unlock(&wide_share->pt_handler_mutex);
- spider_free(spider_current_trx, partition_handler_share, MYF(0));
- pt_handler_share_owner = FALSE;
- }
- partition_handler_share = NULL;
+ partition_handler = NULL;
#endif
if (wide_handler_owner)
{
@@ -1169,14 +1099,14 @@ THR_LOCK_DATA **ha_spider::store_lock(
) {
wide_handler->lock_table_type = 1;
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
uint roop_count;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
if (unlikely((store_error_num =
- partition_handler_share->handlers[roop_count]->
+ partition_handler->handlers[roop_count]->
append_lock_tables_list())))
{
break;
@@ -1204,15 +1134,15 @@ THR_LOCK_DATA **ha_spider::store_lock(
) {
wide_handler->lock_table_type = 2;
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
uint roop_count;
for (roop_count = 0;
- roop_count < partition_handler_share->no_parts;
+ roop_count < partition_handler->no_parts;
++roop_count)
{
if (unlikely((store_error_num =
- partition_handler_share->handlers[roop_count]->
+ partition_handler->handlers[roop_count]->
append_lock_tables_list())))
{
break;
@@ -1333,14 +1263,14 @@ int ha_spider::external_lock(
/* lock/unlock tables */
#ifdef WITH_PARTITION_STORAGE_ENGINE
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
uint roop_count;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
if (unlikely((error_num =
- partition_handler_share->handlers[roop_count]->lock_tables())))
+ partition_handler->handlers[roop_count]->lock_tables())))
{
DBUG_RETURN(error_num);
}
@@ -1574,7 +1504,7 @@ int ha_spider::reset()
use_pre_action = FALSE;
pre_bitmap_checked = FALSE;
bulk_insert = FALSE;
- partition_handler_share->clone_bitmap_init = FALSE;
+ partition_handler->clone_bitmap_init = FALSE;
result_list.tmp_table_join = FALSE;
result_list.use_union = FALSE;
result_list.use_both_key = FALSE;
@@ -7489,7 +7419,7 @@ int ha_spider::rnd_next_internal(
) {
int error_num;
ha_spider *direct_limit_offset_spider =
- (ha_spider *) partition_handler_share->owner;
+ (ha_spider *) partition_handler->owner;
backup_error_status();
DBUG_ENTER("ha_spider::rnd_next_internal");
DBUG_PRINT("info",("spider this=%p", this));
@@ -7529,7 +7459,7 @@ int ha_spider::rnd_next_internal(
DBUG_RETURN(check_error_mode_eof(HA_ERR_END_OF_FILE));
}
if (
- partition_handler_share->handlers &&
+ partition_handler->handlers &&
direct_limit_offset_spider->direct_current_offset > 0
) {
longlong table_count = this->records();
@@ -12488,11 +12418,11 @@ int ha_spider::info_push(
break;
}
wide_handler->hs_pushed_strref_num++;
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
size_t roop_count;
- ha_spider **handlers = partition_handler_share->handlers;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ ha_spider **handlers = partition_handler->handlers;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
if ((error_num = handlers[roop_count]->push_back_hs_upds(
@@ -12512,11 +12442,11 @@ int ha_spider::info_push(
case INFO_KIND_HS_CLEAR_STRING_REF:
DBUG_PRINT("info",("spider INFO_KIND_HS_CLEAR_STRING_REF"));
wide_handler->hs_pushed_strref_num = 0;
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
size_t roop_count;
- ha_spider **handlers = partition_handler_share->handlers;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ ha_spider **handlers = partition_handler->handlers;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
if ((error_num = handlers[roop_count]->reset_hs_upds(
@@ -12580,11 +12510,11 @@ int ha_spider::info_push(
#ifdef HA_CAN_BULK_ACCESS
case INFO_KIND_BULK_ACCESS_BEGIN:
DBUG_PRINT("info",("spider INFO_KIND_BULK_ACCESS_BEGIN"));
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
size_t roop_count;
- ha_spider **handlers = partition_handler_share->handlers;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ ha_spider **handlers = partition_handler->handlers;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
if ((error_num = handlers[roop_count]->bulk_access_begin(info)))
@@ -12601,11 +12531,11 @@ int ha_spider::info_push(
break;
case INFO_KIND_BULK_ACCESS_CURRENT:
DBUG_PRINT("info",("spider INFO_KIND_BULK_ACCESS_CURRENT"));
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
size_t roop_count;
- ha_spider **handlers = partition_handler_share->handlers;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ ha_spider **handlers = partition_handler->handlers;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
if ((error_num = handlers[roop_count]->bulk_access_current(info)))
@@ -12622,11 +12552,11 @@ int ha_spider::info_push(
break;
case INFO_KIND_BULK_ACCESS_END:
DBUG_PRINT("info",("spider INFO_KIND_BULK_ACCESS_END"));
- if (partition_handler_share && partition_handler_share->handlers)
+ if (partition_handler && partition_handler->handlers)
{
size_t roop_count;
- ha_spider **handlers = partition_handler_share->handlers;
- for (roop_count = 0; roop_count < partition_handler_share->no_parts;
+ ha_spider **handlers = partition_handler->handlers;
+ for (roop_count = 0; roop_count < partition_handler->no_parts;
++roop_count)
{
handlers[roop_count]->bulk_access_end();
@@ -13123,7 +13053,7 @@ void ha_spider::check_distinct_key_query()
{
DBUG_ENTER( "ha_spider::check_distinct_key_query" );
- if ( result_list.direct_distinct && !partition_handler_share->handlers &&
+ if ( result_list.direct_distinct && !partition_handler->handlers &&
result_list.keyread && result_list.check_direct_order_limit )
{
// SELECT DISTINCT query using an index in a non-partitioned configuration
@@ -13923,9 +13853,9 @@ void ha_spider::check_pre_call(
}
if (
use_parallel &&
- thd->query_id != partition_handler_share->parallel_search_query_id
+ thd->query_id != partition_handler->parallel_search_query_id
) {
- partition_handler_share->parallel_search_query_id = thd->query_id;
+ partition_handler->parallel_search_query_id = thd->query_id;
++wide_handler->trx->parallel_search_count;
}
use_pre_call = use_parallel;
diff --git a/storage/spider/ha_spider.h b/storage/spider/ha_spider.h
index 5bc58397f28..3036f8d522a 100644
--- a/storage/spider/ha_spider.h
+++ b/storage/spider/ha_spider.h
@@ -1,5 +1,5 @@
/* Copyright (C) 2008-2019 Kentoku Shiba
- Copyright (C) 2019 MariaDB corp
+ Copyright (C) 2019-2022 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -92,8 +92,7 @@ public:
SPIDER_POSITION *pushed_pos;
SPIDER_POSITION pushed_pos_buf;
#ifdef WITH_PARTITION_STORAGE_ENGINE
- bool pt_handler_share_owner = FALSE;
- SPIDER_PARTITION_HANDLER_SHARE *partition_handler_share;
+ SPIDER_PARTITION_HANDLER *partition_handler;
#endif
bool wide_handler_owner = FALSE;
SPIDER_WIDE_HANDLER *wide_handler = NULL;
diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_27240.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_27240.result
new file mode 100644
index 00000000000..9dd247337ee
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_27240.result
@@ -0,0 +1,16 @@
+for master_1
+for child2
+for child3
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+CREATE TABLE tbl_a (a INT KEY) ENGINE=SPIDER;
+SELECT a.z FROM tbl_a AS a,tbl_a b WHERE a.z=b.z;
+ERROR 42S22: Unknown column 'a.z' in 'field list'
+ALTER TABLE tbl_a CHANGE c c INT;
+ERROR 42S22: Unknown column 'c' in 'tbl_a'
+LOCK TABLE tbl_a READ;
+ERROR HY000: Unable to connect to foreign data source: localhost
+DROP DATABASE auto_test_local;
+for master_1
+for child2
+for child3
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_27240.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_27240.cnf
new file mode 100644
index 00000000000..b0853e32654
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_27240.cnf
@@ -0,0 +1,2 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_27240.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_27240.test
new file mode 100644
index 00000000000..552ce3aa6de
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_27240.test
@@ -0,0 +1,28 @@
+--disable_warnings
+--disable_query_log
+--disable_result_log
+--source ../../t/test_init.inc
+--enable_result_log
+--enable_query_log
+--enable_warnings
+
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+
+CREATE TABLE tbl_a (a INT KEY) ENGINE=SPIDER;
+--error ER_BAD_FIELD_ERROR
+SELECT a.z FROM tbl_a AS a,tbl_a b WHERE a.z=b.z;
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE tbl_a CHANGE c c INT;
+--error ER_CONNECT_TO_FOREIGN_DATA_SOURCE
+LOCK TABLE tbl_a READ;
+
+DROP DATABASE auto_test_local;
+
+--disable_warnings
+--disable_query_log
+--disable_result_log
+--source ../../t/test_deinit.inc
+--enable_result_log
+--enable_query_log
+--enable_warnings
diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h
index b1be05c72b2..00389a71b09 100644
--- a/storage/spider/spd_include.h
+++ b/storage/spider/spd_include.h
@@ -1,5 +1,5 @@
/* Copyright (C) 2008-2020 Kentoku Shiba
- Copyright (C) 2019-2020 MariaDB corp
+ Copyright (C) 2019-2022 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -688,18 +688,15 @@ typedef struct st_spider_lgtm_tblhnd_share
} SPIDER_LGTM_TBLHND_SHARE;
#ifdef WITH_PARTITION_STORAGE_ENGINE
-typedef struct st_spider_patition_handler_share
+typedef struct st_spider_patition_handler
{
bool clone_bitmap_init;
-#ifdef SPIDER_HAS_HASH_VALUE_TYPE
- my_hash_value_type table_hash_value;
-#endif
query_id_t parallel_search_query_id;
uint no_parts;
TABLE *table;
ha_spider *owner;
ha_spider **handlers;
-} SPIDER_PARTITION_HANDLER_SHARE;
+} SPIDER_PARTITION_HANDLER;
#endif
typedef struct st_spider_wide_share
@@ -713,12 +710,6 @@ typedef struct st_spider_wide_share
THR_LOCK lock;
pthread_mutex_t sts_mutex;
pthread_mutex_t crd_mutex;
- pthread_mutex_t pt_handler_mutex;
- HASH pt_handler_hash;
- uint pt_handler_hash_id;
- const char *pt_handler_hash_func_name;
- const char *pt_handler_hash_file_name;
- ulong pt_handler_hash_line_no;
volatile bool sts_init;
volatile bool crd_init;
@@ -763,7 +754,7 @@ typedef struct st_spider_wide_handler
#endif
#endif
#ifdef WITH_PARTITION_STORAGE_ENGINE
- SPIDER_PARTITION_HANDLER_SHARE *partition_handler_share;
+ SPIDER_PARTITION_HANDLER *partition_handler;
#endif
#ifdef HANDLER_HAS_DIRECT_UPDATE_ROWS
List<Item> *direct_update_fields;
diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc
index a4b16bcb81a..04333d973a3 100644
--- a/storage/spider/spd_table.cc
+++ b/storage/spider/spd_table.cc
@@ -1,5 +1,5 @@
/* Copyright (C) 2008-2020 Kentoku Shiba
- Copyright (C) 2019-2020 MariaDB corp
+ Copyright (C) 2019-2022 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -184,7 +184,6 @@ PSI_mutex_key spd_key_mutex_share_auto_increment;
#ifdef WITH_PARTITION_STORAGE_ENGINE
PSI_mutex_key spd_key_mutex_wide_share_sts;
PSI_mutex_key spd_key_mutex_wide_share_crd;
-PSI_mutex_key spd_key_mutex_pt_handler;
#endif
PSI_mutex_key spd_key_mutex_udf_table;
PSI_mutex_key spd_key_mutex_mem_calc;
@@ -244,7 +243,6 @@ static PSI_mutex_info all_spider_mutexes[]=
#ifdef WITH_PARTITION_STORAGE_ENGINE
{ &spd_key_mutex_wide_share_sts, "wide_share_sts", 0},
{ &spd_key_mutex_wide_share_crd, "wide_share_crd", 0},
- { &spd_key_mutex_pt_handler, "pt_handler", 0},
#endif
{ &spd_key_mutex_udf_table, "udf_table", 0},
{ &spd_key_mutex_conn_loop_check, "conn_loop_check", 0},
@@ -430,18 +428,6 @@ uchar *spider_wide_share_get_key(
DBUG_RETURN((uchar*) share->table_name);
}
-#ifdef WITH_PARTITION_STORAGE_ENGINE
-uchar *spider_pt_handler_share_get_key(
- SPIDER_PARTITION_HANDLER_SHARE *share,
- size_t *length,
- my_bool not_used __attribute__ ((unused))
-) {
- DBUG_ENTER("spider_pt_handler_share_get_key");
- *length = sizeof(ha_spider *);
- DBUG_RETURN((uchar*) share->owner);
-}
-#endif
-
uchar *spider_lgtm_tblhnd_share_hash_get_key(
SPIDER_LGTM_TBLHND_SHARE *share,
size_t *length,
@@ -6609,34 +6595,8 @@ SPIDER_WIDE_SHARE *spider_get_wide_share(
goto error_init_crd_mutex;
}
-#if MYSQL_VERSION_ID < 50500
- if (pthread_mutex_init(&wide_share->pt_handler_mutex,
- MY_MUTEX_INIT_FAST))
-#else
- if (mysql_mutex_init(spd_key_mutex_pt_handler,
- &wide_share->pt_handler_mutex, MY_MUTEX_INIT_FAST))
-#endif
- {
- *error_num = HA_ERR_OUT_OF_MEM;
- goto error_init_pt_handler_mutex;
- }
-
- if(
- my_hash_init(PSI_INSTRUMENT_ME, &wide_share->pt_handler_hash, spd_charset_utf8mb3_bin,
- 32, 0, 0, (my_hash_get_key) spider_pt_handler_share_get_key, 0, 0)
- ) {
- *error_num = HA_ERR_OUT_OF_MEM;
- goto error_init_pt_handler_hash;
- }
-
thr_lock_init(&wide_share->lock);
- spider_alloc_calc_mem_init(wide_share->pt_handler_hash, 142);
- spider_alloc_calc_mem(spider_current_trx,
- wide_share->pt_handler_hash,
- wide_share->pt_handler_hash.array.max_element *
- wide_share->pt_handler_hash.array.size_of_element);
-
uint old_elements = spider_open_wide_share.array.max_element;
#ifdef HASH_UPDATE_WITH_HASH_VALUE
if (my_hash_insert_with_hash_value(&spider_open_wide_share,
@@ -6664,14 +6624,6 @@ SPIDER_WIDE_SHARE *spider_get_wide_share(
DBUG_RETURN(wide_share);
error_hash_insert:
- spider_free_mem_calc(spider_current_trx,
- wide_share->pt_handler_hash_id,
- wide_share->pt_handler_hash.array.max_element *
- wide_share->pt_handler_hash.array.size_of_element);
- my_hash_free(&wide_share->pt_handler_hash);
-error_init_pt_handler_hash:
- pthread_mutex_destroy(&wide_share->pt_handler_mutex);
-error_init_pt_handler_mutex:
pthread_mutex_destroy(&wide_share->crd_mutex);
error_init_crd_mutex:
pthread_mutex_destroy(&wide_share->sts_mutex);
@@ -6696,12 +6648,6 @@ int spider_free_wide_share(
#else
my_hash_delete(&spider_open_wide_share, (uchar*) wide_share);
#endif
- spider_free_mem_calc(spider_current_trx,
- wide_share->pt_handler_hash_id,
- wide_share->pt_handler_hash.array.max_element *
- wide_share->pt_handler_hash.array.size_of_element);
- my_hash_free(&wide_share->pt_handler_hash);
- pthread_mutex_destroy(&wide_share->pt_handler_mutex);
pthread_mutex_destroy(&wide_share->crd_mutex);
pthread_mutex_destroy(&wide_share->sts_mutex);
spider_free(spider_current_trx, wide_share, MYF(0));
@@ -8210,15 +8156,15 @@ int spider_get_sts(
if (error_num)
{
#ifdef WITH_PARTITION_STORAGE_ENGINE
- SPIDER_PARTITION_HANDLER_SHARE *partition_handler_share =
- spider->partition_handler_share;
+ SPIDER_PARTITION_HANDLER *partition_handler =
+ spider->partition_handler;
if (
!share->wide_share->sts_init &&
sts_sync >= sts_sync_level &&
get_type > 1 &&
- partition_handler_share &&
- partition_handler_share->handlers &&
- partition_handler_share->handlers[0] == spider
+ partition_handler &&
+ partition_handler->handlers &&
+ partition_handler->handlers[0] == spider
) {
int roop_count;
ha_spider *tmp_spider;
@@ -8228,11 +8174,11 @@ int spider_get_sts(
int tmp_sts_sync;
THD *thd = spider->wide_handler->trx->thd;
for (roop_count = 1;
- roop_count < (int) partition_handler_share->no_parts;
+ roop_count < (int) partition_handler->no_parts;
roop_count++)
{
tmp_spider =
- (ha_spider *) partition_handler_share->handlers[roop_count];
+ (ha_spider *) partition_handler->handlers[roop_count];
tmp_share = tmp_spider->share;
tmp_sts_interval = spider_param_sts_interval(thd, share->sts_interval);
tmp_sts_mode = spider_param_sts_mode(thd, share->sts_mode);
@@ -8362,15 +8308,15 @@ int spider_get_crd(
if (error_num)
{
#ifdef WITH_PARTITION_STORAGE_ENGINE
- SPIDER_PARTITION_HANDLER_SHARE *partition_handler_share =
- spider->partition_handler_share;
+ SPIDER_PARTITION_HANDLER *partition_handler =
+ spider->partition_handler;
if (
!share->wide_share->crd_init &&
crd_sync >= crd_sync_level &&
get_type > 1 &&
- partition_handler_share &&
- partition_handler_share->handlers &&
- partition_handler_share->handlers[0] == spider
+ partition_handler &&
+ partition_handler->handlers &&
+ partition_handler->handlers[0] == spider
) {
int roop_count;
ha_spider *tmp_spider;
@@ -8380,11 +8326,11 @@ int spider_get_crd(
int tmp_crd_sync;
THD *thd = spider->wide_handler->trx->thd;
for (roop_count = 1;
- roop_count < (int) partition_handler_share->no_parts;
+ roop_count < (int) partition_handler->no_parts;
roop_count++)
{
tmp_spider =
- (ha_spider *) partition_handler_share->handlers[roop_count];
+ (ha_spider *) partition_handler->handlers[roop_count];
tmp_share = tmp_spider->share;
tmp_crd_interval = spider_param_crd_interval(thd, share->crd_interval);
tmp_crd_mode = spider_param_crd_mode(thd, share->crd_mode);
@@ -9529,10 +9475,10 @@ int spider_set_direct_limit_offset(
DBUG_RETURN(TRUE);
if (
- spider->partition_handler_share &&
- !spider->pt_handler_share_owner
+ spider->partition_handler &&
+ !spider->wide_handler_owner
) {
- if (spider->partition_handler_share->owner->
+ if (spider->partition_handler->owner->
result_list.direct_limit_offset == TRUE)
{
spider->result_list.direct_limit_offset = TRUE;
diff --git a/storage/spider/spd_table.h b/storage/spider/spd_table.h
index 2b40fb33d5a..dc351e73c61 100644
--- a/storage/spider/spd_table.h
+++ b/storage/spider/spd_table.h
@@ -1,5 +1,5 @@
/* Copyright (C) 2008-2019 Kentoku Shiba
- Copyright (C) 2019 MariaDB corp
+ Copyright (C) 2019-2022 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -319,14 +319,6 @@ uchar *spider_wide_share_get_key(
my_bool not_used __attribute__ ((unused))
);
-#ifdef WITH_PARTITION_STORAGE_ENGINE
-uchar *spider_pt_handler_share_get_key(
- SPIDER_PARTITION_HANDLER_SHARE *share,
- size_t *length,
- my_bool not_used __attribute__ ((unused))
-);
-#endif
-
uchar *spider_link_get_key(
SPIDER_LINK_FOR_HASH *link_for_hash,
size_t *length,