diff options
author | Alexey Kopytov <Alexey.Kopytov@Sun.com> | 2010-03-24 18:03:44 +0300 |
---|---|---|
committer | Alexey Kopytov <Alexey.Kopytov@Sun.com> | 2010-03-24 18:03:44 +0300 |
commit | d95c1e3b470506c7df6dfce3fe6dc7e5b46930ee (patch) | |
tree | 9f13d4fcc3ac732dc94fe2cae446f6f8c2b4e02b /storage/federated | |
parent | abc6846d5b1df4846c4ffc03f4c93c82f874dd96 (diff) | |
parent | ae715642f46d4ed9ea8b5dd9b5cc9f3cace7f437 (diff) | |
download | mariadb-git-d95c1e3b470506c7df6dfce3fe6dc7e5b46930ee.tar.gz |
Manual merge of mysql-trunk into mysql-trunk-merge.
Conflicts:
Text conflict in client/mysqlbinlog.cc
Text conflict in mysql-test/Makefile.am
Text conflict in mysql-test/collections/default.daily
Text conflict in mysql-test/r/mysqlbinlog_row_innodb.result
Text conflict in mysql-test/suite/rpl/r/rpl_typeconv_innodb.result
Text conflict in mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
Text conflict in mysql-test/suite/rpl/t/rpl_row_create_table.test
Text conflict in mysql-test/suite/rpl/t/rpl_slave_skip.test
Text conflict in mysql-test/suite/rpl/t/rpl_typeconv_innodb.test
Text conflict in mysys/charset.c
Text conflict in sql/field.cc
Text conflict in sql/field.h
Text conflict in sql/item.h
Text conflict in sql/item_func.cc
Text conflict in sql/log.cc
Text conflict in sql/log_event.cc
Text conflict in sql/log_event_old.cc
Text conflict in sql/mysqld.cc
Text conflict in sql/rpl_utility.cc
Text conflict in sql/rpl_utility.h
Text conflict in sql/set_var.cc
Text conflict in sql/share/Makefile.am
Text conflict in sql/sql_delete.cc
Text conflict in sql/sql_plugin.cc
Text conflict in sql/sql_select.cc
Text conflict in sql/sql_table.cc
Text conflict in storage/example/ha_example.h
Text conflict in storage/federated/ha_federated.cc
Text conflict in storage/myisammrg/ha_myisammrg.cc
Text conflict in storage/myisammrg/myrg_open.c
Diffstat (limited to 'storage/federated')
-rw-r--r-- | storage/federated/CMakeLists.txt | 10 | ||||
-rw-r--r-- | storage/federated/ha_federated.cc | 53 | ||||
-rw-r--r-- | storage/federated/ha_federated.h | 4 |
3 files changed, 51 insertions, 16 deletions
diff --git a/storage/federated/CMakeLists.txt b/storage/federated/CMakeLists.txt index fa54d36481a..ac55543f276 100644 --- a/storage/federated/CMakeLists.txt +++ b/storage/federated/CMakeLists.txt @@ -13,6 +13,12 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") +SET(FEDERATED_PLUGIN_STATIC "federated") +SET(FEDERATED_PLUGIN_DYNAMIC "ha_federated") SET(FEDERATED_SOURCES ha_federated.cc) -MYSQL_STORAGE_ENGINE(FEDERATED) +IF(NOT WITH_FEDERATED AND NOT WITH_FEDERATED_STORAGE_ENGINE) + # Bug#45488- federated uses symbols that are not used anywhere in + # mysqld and are optimized away by the linker. + SET(FEDERATED_SOURCES ${FEDERATED_SOURCES} ${CMAKE_SOURCE_DIR}/mysys/string.c) +ENDIF() +MYSQL_ADD_PLUGIN(federated ${FEDERATED_SOURCES} STORAGE_ENGINE) diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 99ea762fb32..824290aa07c 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -388,7 +388,7 @@ /* Variables for federated share methods */ static HASH federated_open_tables; // To track open tables -pthread_mutex_t federated_mutex; // To init the hash +mysql_mutex_t federated_mutex; // To init the hash static char ident_quote_char= '`'; // Character for quoting // identifiers static char value_quote_char= '\''; // Character for quoting @@ -427,6 +427,28 @@ static uchar *federated_get_key(FEDERATED_SHARE *share, size_t *length, return (uchar*) share->share_key; } +#ifdef HAVE_PSI_INTERFACE +static PSI_mutex_key fe_key_mutex_federated, fe_key_mutex_FEDERATED_SHARE_mutex; + +static PSI_mutex_info all_federated_mutexes[]= +{ + { &fe_key_mutex_federated, "federated", PSI_FLAG_GLOBAL}, + { &fe_key_mutex_FEDERATED_SHARE_mutex, "FEDERATED_SHARE::mutex", 0} +}; + +static void init_federated_psi_keys(void) +{ + const char* category= "federated"; + int count; + + if (PSI_server == NULL) + return; + + count= array_elements(all_federated_mutexes); + PSI_server->register_mutex(category, all_federated_mutexes, count); +} +#endif /* HAVE_PSI_INTERFACE */ + /* Initialize the federated handler. @@ -442,6 +464,11 @@ static uchar *federated_get_key(FEDERATED_SHARE *share, size_t *length, int federated_db_init(void *p) { DBUG_ENTER("federated_db_init"); + +#ifdef HAVE_PSI_INTERFACE + init_federated_psi_keys(); +#endif /* HAVE_PSI_INTERFACE */ + handlerton *federated_hton= (handlerton *)p; federated_hton->state= SHOW_OPTION_YES; federated_hton->db_type= DB_TYPE_FEDERATED_DB; @@ -457,7 +484,8 @@ int federated_db_init(void *p) federated_hton->commit= 0; federated_hton->rollback= 0; - if (pthread_mutex_init(&federated_mutex, MY_MUTEX_INIT_FAST)) + if (mysql_mutex_init(fe_key_mutex_federated, + &federated_mutex, MY_MUTEX_INIT_FAST)) goto error; if (!my_hash_init(&federated_open_tables, &my_charset_bin, 32, 0, 0, (my_hash_get_key) federated_get_key, 0, 0)) @@ -465,7 +493,7 @@ int federated_db_init(void *p) DBUG_RETURN(FALSE); } - VOID(pthread_mutex_destroy(&federated_mutex)); + mysql_mutex_destroy(&federated_mutex); error: DBUG_RETURN(TRUE); } @@ -484,7 +512,7 @@ error: int federated_done(void *p) { my_hash_free(&federated_open_tables); - VOID(pthread_mutex_destroy(&federated_mutex)); + mysql_mutex_destroy(&federated_mutex); return 0; } @@ -1487,7 +1515,7 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table) init_alloc_root(&mem_root, 256, 0); - pthread_mutex_lock(&federated_mutex); + mysql_mutex_lock(&federated_mutex); tmp_share.share_key= table_name; tmp_share.share_key_length= (uint) strlen(table_name); @@ -1529,18 +1557,19 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table) if (my_hash_insert(&federated_open_tables, (uchar*) share)) goto error; thr_lock_init(&share->lock); - pthread_mutex_init(&share->mutex, MY_MUTEX_INIT_FAST); + mysql_mutex_init(fe_key_mutex_FEDERATED_SHARE_mutex, + &share->mutex, MY_MUTEX_INIT_FAST); } else free_root(&mem_root, MYF(0)); /* prevents memory leak */ share->use_count++; - pthread_mutex_unlock(&federated_mutex); + mysql_mutex_unlock(&federated_mutex); DBUG_RETURN(share); error: - pthread_mutex_unlock(&federated_mutex); + mysql_mutex_unlock(&federated_mutex); free_root(&mem_root, MYF(0)); DBUG_RETURN(NULL); } @@ -1557,15 +1586,15 @@ static int free_share(FEDERATED_SHARE *share) MEM_ROOT mem_root= share->mem_root; DBUG_ENTER("free_share"); - pthread_mutex_lock(&federated_mutex); + mysql_mutex_lock(&federated_mutex); if (!--share->use_count) { my_hash_delete(&federated_open_tables, (uchar*) share); thr_lock_delete(&share->lock); - VOID(pthread_mutex_destroy(&share->mutex)); + mysql_mutex_destroy(&share->mutex); free_root(&mem_root, MYF(0)); } - pthread_mutex_unlock(&federated_mutex); + mysql_mutex_unlock(&federated_mutex); DBUG_RETURN(0); } @@ -3112,7 +3141,7 @@ int ha_federated::real_connect() to establish Federated connection to guard against a trivial Denial of Service scenerio. */ - safe_mutex_assert_not_owner(&LOCK_open); + mysql_mutex_assert_not_owner(&LOCK_open); DBUG_ASSERT(mysql == NULL); diff --git a/storage/federated/ha_federated.h b/storage/federated/ha_federated.h index 9740485854f..0f4c0201bd7 100644 --- a/storage/federated/ha_federated.h +++ b/storage/federated/ha_federated.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 MySQL AB +/* Copyright (C) 2003 MySQL AB, 2008-2009 Sun Microsystems, Inc 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 @@ -71,7 +71,7 @@ typedef struct st_federated_share { ushort port; size_t table_name_length, server_name_length, connect_string_length, use_count; - pthread_mutex_t mutex; + mysql_mutex_t mutex; THR_LOCK lock; } FEDERATED_SHARE; |