diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-01-31 11:37:12 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-01-31 11:37:12 +0200 |
commit | 5ff66fb0b97fa3f8ecc453c48bac48ceae76bdea (patch) | |
tree | b33d1e67c5a03abd85abe023f078d0201b12adeb | |
parent | dbbe9961a53cad97544499c3187771df64f25b18 (diff) | |
parent | 256994ef7469fc4c62d5b271a6557ad729380f0e (diff) | |
download | mariadb-git-5ff66fb0b97fa3f8ecc453c48bac48ceae76bdea.tar.gz |
Merge 10.2 into 10.3
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | man/CMakeLists.txt | 7 | ||||
-rw-r--r-- | mysql-test/main/locale.opt | 1 | ||||
-rw-r--r-- | mysql-test/main/locale.result | 2 | ||||
-rw-r--r-- | mysql-test/suite/innodb_fts/r/misc_debug.result | 9 | ||||
-rw-r--r-- | mysql-test/suite/innodb_fts/t/misc_debug.test | 13 | ||||
-rw-r--r-- | sql/derror.cc | 8 | ||||
-rw-r--r-- | sql/log.cc | 34 | ||||
-rw-r--r-- | sql/log.h | 15 | ||||
-rw-r--r-- | storage/innobase/dict/dict0dict.cc | 7 | ||||
-rw-r--r-- | storage/innobase/fil/fil0crypt.cc | 49 | ||||
-rw-r--r-- | storage/innobase/fts/fts0opt.cc | 2 | ||||
-rw-r--r-- | storage/innobase/row/row0mysql.cc | 5 | ||||
-rw-r--r-- | storage/tokudb/CMakeLists.txt | 2 | ||||
-rw-r--r-- | storage/tokudb/man/CMakeLists.txt | 2 | ||||
-rw-r--r-- | storage/tokudb/man/tokuft_logprint.1 (renamed from man/tokuft_logprint.1) | 0 | ||||
-rw-r--r-- | storage/tokudb/man/tokuftdump.1 (renamed from man/tokuftdump.1) | 0 | ||||
-rw-r--r-- | support-files/CMakeLists.txt | 35 |
18 files changed, 100 insertions, 93 deletions
diff --git a/.gitignore b/.gitignore index 83d921fab98..76c2122428d 100644 --- a/.gitignore +++ b/.gitignore @@ -246,6 +246,8 @@ support-files/mysqld_multi.server support-files/wsrep.cnf support-files/wsrep_notify support-files/policy/selinux/mysqld-safe.pp +support-files/sysusers.conf +support-files/tmpfiles.conf support-files/mariadb.pp tags tests/async_queries diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 7a1e284b3e7..cdce3c9b983 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2012, Monty Program Ab +# Copyright (c) 2012, 2020, MariaDB # # 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 @@ -21,7 +21,7 @@ SET(MAN1_SERVER innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1 mysql_secure_installation.1 mysql_setpermission.1 mysql_tzinfo_to_sql.1 mysql_upgrade.1 mysqld_multi.1 mysqld_safe.1 mysqldumpslow.1 mysqlhotcopy.1 - mysqltest.1 perror.1 replace.1 resolve_stack_dump.1 + perror.1 replace.1 resolve_stack_dump.1 resolveip.1 mariadb-service-convert.1 mysqld_safe_helper.1 tokuftdump.1 wsrep_sst_common.1 wsrep_sst_mysqldump.1 wsrep_sst_rsync.1 @@ -36,7 +36,8 @@ SET(MAN1_CLIENT msql2mysql.1 mysql.1 mysql_find_rows.1 mysql_waitpid.1 mysql_plugin.1 mysql_embedded.1) SET(MAN1_DEVEL mysql_config.1) SET(MAN1_TEST mysql-stress-test.pl.1 mysql-test-run.pl.1 mysql_client_test.1 - mysqltest_embedded.1 mysql_client_test_embedded.1 my_safe_process.1) + mysqltest.1 mysqltest_embedded.1 mysql_client_test_embedded.1 + my_safe_process.1) INSTALL(FILES ${MAN1_SERVER} DESTINATION ${INSTALL_MANDIR}/man1 COMPONENT ManPagesServer) INSTALL(FILES ${MAN8_SERVER} DESTINATION ${INSTALL_MANDIR}/man8 COMPONENT ManPagesServer) diff --git a/mysql-test/main/locale.opt b/mysql-test/main/locale.opt new file mode 100644 index 00000000000..0ea17c2e0a8 --- /dev/null +++ b/mysql-test/main/locale.opt @@ -0,0 +1 @@ +--lc-messages=de_DE diff --git a/mysql-test/main/locale.result b/mysql-test/main/locale.result index b750d038205..f136e9e99ab 100644 --- a/mysql-test/main/locale.result +++ b/mysql-test/main/locale.result @@ -51,7 +51,7 @@ DROP TABLE t1; # SET lc_messages=sr_YU; Warnings: -Warning 1287 'sr_YU' is deprecated and will be removed in a future release. Please use sr_RS instead +Warning 1287 'sr_YU' ist veraltet. Bitte benutzen Sie 'sr_RS' SHOW VARIABLES LIKE 'lc_messages'; Variable_name Value lc_messages sr_RS diff --git a/mysql-test/suite/innodb_fts/r/misc_debug.result b/mysql-test/suite/innodb_fts/r/misc_debug.result index 3a156049fe2..f1110797f33 100644 --- a/mysql-test/suite/innodb_fts/r/misc_debug.result +++ b/mysql-test/suite/innodb_fts/r/misc_debug.result @@ -17,3 +17,12 @@ ALTER TABLE t ADD FULLTEXT INDEX (b(64)); ERROR HY000: Unknown error SET SESSION debug_dbug=@saved_debug_dbug; DROP TABLE t; +CREATE TABLE t1 (pk INT, a VARCHAR(8), PRIMARY KEY(pk), +FULLTEXT KEY(a)) ENGINE=InnoDB; +CREATE TABLE t2 (b INT, FOREIGN KEY(b) REFERENCES t1(pk)) ENGINE=InnoDB; +DROP TABLE t1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails +SET DEBUG_DBUG="+d,fts_instrument_sync"; +INSERT INTO t1 VALUES(1, "mariadb"); +ALTER TABLE t1 FORCE; +DROP TABLE t2, t1; diff --git a/mysql-test/suite/innodb_fts/t/misc_debug.test b/mysql-test/suite/innodb_fts/t/misc_debug.test index 4b32afb848c..aaf628abe6d 100644 --- a/mysql-test/suite/innodb_fts/t/misc_debug.test +++ b/mysql-test/suite/innodb_fts/t/misc_debug.test @@ -39,3 +39,16 @@ ALTER TABLE t ADD FULLTEXT INDEX (b(64)); SET SESSION debug_dbug=@saved_debug_dbug; DROP TABLE t; + +# MDEV-21550 Assertion `!table->fts->in_queue' failed in +# fts_optimize_remove_table +CREATE TABLE t1 (pk INT, a VARCHAR(8), PRIMARY KEY(pk), + FULLTEXT KEY(a)) ENGINE=InnoDB; +CREATE TABLE t2 (b INT, FOREIGN KEY(b) REFERENCES t1(pk)) ENGINE=InnoDB; +--error ER_ROW_IS_REFERENCED_2 +DROP TABLE t1; +SET DEBUG_DBUG="+d,fts_instrument_sync"; +INSERT INTO t1 VALUES(1, "mariadb"); +ALTER TABLE t1 FORCE; +# Cleanup +DROP TABLE t2, t1; diff --git a/sql/derror.cc b/sql/derror.cc index 14b60ee4db4..7a79833c26c 100644 --- a/sql/derror.cc +++ b/sql/derror.cc @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2011, Oracle and/or its affiliates. - Copyright (C) 2011 Monty Program Ab + Copyright (C) 2011, 2020, MariaDB 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 @@ -84,8 +84,10 @@ bool init_errmessage(void) if (!use_english) { /* Read messages from file. */ - use_english= !read_texts(ERRMSG_FILE,lang, &original_error_messages); - error= TRUE; + use_english= read_texts(ERRMSG_FILE,lang, &original_error_messages); + error= use_english != FALSE; + if (error) + sql_print_error("Could not load error messages for %s",lang); } if (use_english) diff --git a/sql/log.cc b/sql/log.cc index 0aac2ee61fb..bde301452be 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2018, Oracle and/or its affiliates. - Copyright (c) 2009, 2019, MariaDB Corporation + Copyright (c) 2009, 2020, 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 @@ -3264,7 +3264,7 @@ void MYSQL_BIN_LOG::cleanup() DBUG_ASSERT(!binlog_xid_count_list.head()); WSREP_XID_LIST_ENTRY("MYSQL_BIN_LOG::cleanup(): Removing xid_list_entry " "for %s (%lu)", b); - my_free(b); + delete b; } mysql_mutex_destroy(&LOCK_log); @@ -3629,19 +3629,10 @@ bool MYSQL_BIN_LOG::open(const char *log_name, know from where to start recovery. */ size_t off= dirname_length(log_file_name); - size_t len= strlen(log_file_name) - off; - char *entry_mem, *name_mem; - if (!(new_xid_list_entry = (xid_count_per_binlog *) - my_multi_malloc(MYF(MY_WME), - &entry_mem, sizeof(xid_count_per_binlog), - &name_mem, len, - NULL))) + uint len= static_cast<uint>(strlen(log_file_name) - off); + new_xid_list_entry= new xid_count_per_binlog(log_file_name+off, len); + if (!new_xid_list_entry) goto err; - memcpy(name_mem, log_file_name+off, len); - new_xid_list_entry->binlog_name= name_mem; - new_xid_list_entry->binlog_name_len= (int)len; - new_xid_list_entry->xid_count= 0; - new_xid_list_entry->notify_count= 0; /* Find the name for the Initial binlog checkpoint. @@ -3658,8 +3649,11 @@ bool MYSQL_BIN_LOG::open(const char *log_name, mysql_mutex_unlock(&LOCK_xid_list); if (!b) b= new_xid_list_entry; - strmake(buf, b->binlog_name, b->binlog_name_len); - Binlog_checkpoint_log_event ev(buf, (uint)len); + if (b->binlog_name) + strmake(buf, b->binlog_name, b->binlog_name_len); + else + goto err; + Binlog_checkpoint_log_event ev(buf, len); DBUG_EXECUTE_IF("crash_before_write_checkpoint_event", flush_io_cache(&log_file); mysql_file_sync(log_file.file, MYF(MY_WME)); @@ -3762,7 +3756,7 @@ bool MYSQL_BIN_LOG::open(const char *log_name, { WSREP_XID_LIST_ENTRY("MYSQL_BIN_LOG::open(): Removing xid_list_entry for " "%s (%lu)", b); - my_free(binlog_xid_count_list.get()); + delete binlog_xid_count_list.get(); } mysql_cond_broadcast(&COND_xid_list); WSREP_XID_LIST_ENTRY("MYSQL_BIN_LOG::open(): Adding new xid_list_entry for " @@ -3812,7 +3806,7 @@ err: #endif sql_print_error(fatal_log_error, name, tmp_errno); if (new_xid_list_entry) - my_free(new_xid_list_entry); + delete new_xid_list_entry; if (file >= 0) mysql_file_close(file, MYF(0)); close(LOG_CLOSE_INDEX); @@ -4298,7 +4292,7 @@ err: DBUG_ASSERT(b->xid_count == 0); WSREP_XID_LIST_ENTRY("MYSQL_BIN_LOG::reset_logs(): Removing " "xid_list_entry for %s (%lu)", b); - my_free(binlog_xid_count_list.get()); + delete binlog_xid_count_list.get(); } mysql_cond_broadcast(&COND_xid_list); reset_master_pending--; @@ -9833,7 +9827,7 @@ TC_LOG_BINLOG::mark_xid_done(ulong binlog_id, bool write_checkpoint) break; WSREP_XID_LIST_ENTRY("TC_LOG_BINLOG::mark_xid_done(): Removing " "xid_list_entry for %s (%lu)", b); - my_free(binlog_xid_count_list.get()); + delete binlog_xid_count_list.get(); } mysql_mutex_unlock(&LOCK_xid_list); diff --git a/sql/log.h b/sql/log.h index 8dfd34d98f1..2ec7fb70da4 100644 --- a/sql/log.h +++ b/sql/log.h @@ -1,5 +1,5 @@ /* Copyright (c) 2005, 2016, Oracle and/or its affiliates. - Copyright (c) 2009, 2017, MariaDB Corporation. + Copyright (c) 2009, 2020, 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 @@ -600,7 +600,18 @@ public: long notify_count; /* For linking in requests to the binlog background thread. */ xid_count_per_binlog *next_in_queue; - xid_count_per_binlog(); /* Give link error if constructor used. */ + xid_count_per_binlog(char *log_file_name, uint log_file_name_len) + :binlog_id(0), xid_count(0), notify_count(0) + { + binlog_name_len= log_file_name_len; + binlog_name= (char *) my_malloc(binlog_name_len, MYF(MY_ZEROFILL)); + if (binlog_name) + memcpy(binlog_name, log_file_name, binlog_name_len); + } + ~xid_count_per_binlog() + { + my_free(binlog_name); + } }; I_List<xid_count_per_binlog> binlog_xid_count_list; mysql_mutex_t LOCK_binlog_background_thread; diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 24dc3890ff9..eb7280b8673 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -2,7 +2,7 @@ Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. -Copyright (c) 2013, 2019, MariaDB Corporation. +Copyright (c) 2013, 2020, 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 @@ -523,7 +523,10 @@ dict_table_close( mutex_exit(&dict_sys->mutex); - if (drop_aborted) { + /* dict_table_try_drop_aborted() can generate undo logs. + So it should be avoided after shutdown of background + threads */ + if (drop_aborted && !srv_undo_sources) { dict_table_try_drop_aborted(NULL, table_id, 0); } } diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index acd3ee19902..496f428c1ba 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -1,6 +1,6 @@ /***************************************************************************** Copyright (C) 2013, 2015, Google Inc. All Rights Reserved. -Copyright (c) 2014, 2019, MariaDB Corporation. +Copyright (c) 2014, 2020, 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 @@ -654,51 +654,10 @@ fil_space_encrypt( return (src_frame); } - fil_space_crypt_t* crypt_data = space->crypt_data; - const page_size_t page_size(space->flags); ut_ad(space->pending_io()); - byte* tmp = fil_encrypt_buf(crypt_data, space->id, offset, lsn, - src_frame, page_size, dst_frame); - -#ifdef UNIV_DEBUG - if (tmp) { - /* Verify that encrypted buffer is not corrupted */ - dberr_t err = DB_SUCCESS; - byte* src = src_frame; - bool page_compressed_encrypted = (mach_read_from_2(tmp+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED); - byte uncomp_mem[UNIV_PAGE_SIZE_MAX]; - byte tmp_mem[UNIV_PAGE_SIZE_MAX]; - - if (page_compressed_encrypted) { - memcpy(uncomp_mem, src, srv_page_size); - ulint unzipped1 = fil_page_decompress( - tmp_mem, uncomp_mem); - ut_ad(unzipped1); - if (unzipped1 != srv_page_size) { - src = uncomp_mem; - } - } - - ut_ad(!buf_page_is_corrupted(true, src, page_size, space)); - ut_ad(fil_space_decrypt(crypt_data, tmp_mem, page_size, tmp, - &err)); - ut_ad(err == DB_SUCCESS); - - /* Need to decompress the page if it was also compressed */ - if (page_compressed_encrypted) { - byte buf[UNIV_PAGE_SIZE_MAX]; - memcpy(buf, tmp_mem, srv_page_size); - ulint unzipped2 = fil_page_decompress(tmp_mem, buf); - ut_ad(unzipped2); - } - - memcpy(tmp_mem + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION, - src + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION, 8); - ut_ad(!memcmp(src, tmp_mem, page_size.physical())); - } -#endif /* UNIV_DEBUG */ - - return tmp; + return fil_encrypt_buf(space->crypt_data, space->id, offset, lsn, + src_frame, page_size_t(space->flags), + dst_frame); } /** Decrypt a page. diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index 06cb70ed575..33b4c5d1bb5 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -2645,8 +2645,6 @@ fts_optimize_request_sync_table( ib_wqueue_add(fts_optimize_wq, msg, msg->heap, true); - table->fts->in_queue = true; - mutex_exit(&fts_optimize_wq->mutex); } diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 7eb3742b987..c9cab91cb1f 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -3842,6 +3842,11 @@ funct_exit_all_freed: trx_commit_for_mysql(trx); } + /* Add the table to fts queue if drop table fails */ + if (err != DB_SUCCESS && table->fts) { + fts_optimize_add_table(table); + } + row_mysql_unlock_data_dictionary(trx); } diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt index f22f7c1d6b5..088a24f827b 100644 --- a/storage/tokudb/CMakeLists.txt +++ b/storage/tokudb/CMakeLists.txt @@ -168,3 +168,5 @@ TARGET_LINK_LIBRARIES(tokudb tokufractaltree_static tokuportability_static SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -flto -fuse-linker-plugin") SET(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} -flto -fuse-linker-plugin") + +ADD_SUBDIRECTORY(man) diff --git a/storage/tokudb/man/CMakeLists.txt b/storage/tokudb/man/CMakeLists.txt new file mode 100644 index 00000000000..192d8117119 --- /dev/null +++ b/storage/tokudb/man/CMakeLists.txt @@ -0,0 +1,2 @@ +SET(MAN1_TOKUDB tokuftdump.1 tokuft_logprint.1) +INSTALL(FILES ${MAN1_TOKUDB} DESTINATION ${INSTALL_MANDIR}/man1 COMPONENT tokudb-engine) diff --git a/man/tokuft_logprint.1 b/storage/tokudb/man/tokuft_logprint.1 index 0a9ff539b73..0a9ff539b73 100644 --- a/man/tokuft_logprint.1 +++ b/storage/tokudb/man/tokuft_logprint.1 diff --git a/man/tokuftdump.1 b/storage/tokudb/man/tokuftdump.1 index 024b16ba631..024b16ba631 100644 --- a/man/tokuftdump.1 +++ b/storage/tokudb/man/tokuftdump.1 diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt index 9be3ed65095..6e1bbdee610 100644 --- a/support-files/CMakeLists.txt +++ b/support-files/CMakeLists.txt @@ -114,21 +114,6 @@ IF(UNIX) ${CMAKE_CURRENT_BINARY_DIR}/mariadb.service DESTINATION ${inst_location}/systemd COMPONENT SupportFiles) - IF(INSTALL_SYSTEMD_SYSUSERSDIR) - CONFIGURE_FILE(sysusers.conf.in - ${CMAKE_CURRENT_BINARY_DIR}/sysusers.conf @ONLY) - INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/sysusers.conf - DESTINATION ${INSTALL_SYSTEMD_SYSUSERSDIR} COMPONENT Server) - ENDIF() - - IF(INSTALL_SYSTEMD_TMPFILESDIR) - get_filename_component(MYSQL_UNIX_DIR ${MYSQL_UNIX_ADDR} DIRECTORY) - CONFIGURE_FILE(tmpfiles.conf.in - ${CMAKE_CURRENT_BINARY_DIR}/tmpfiles.conf @ONLY) - INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tmpfiles.conf - DESTINATION ${INSTALL_SYSTEMD_TMPFILESDIR} COMPONENT Server) - ENDIF() - # @ in directory name broken between CMake version 2.8.12.2 and 3.3 # http://public.kitware.com/Bug/view.php?id=14782 IF(NOT CMAKE_VERSION VERSION_LESS 3.3.0 OR NOT RPM) @@ -155,6 +140,26 @@ IF(UNIX) ENDIF() ENDIF() + # Allow installing sysusers and tmpusers without requiring SYSTEMD on the + # system. This is useful for distributions running other init systems to + # parse these files and create appropriate users & tmpfiles. + IF((HAVE_SYSTEMD OR INSTALL_SYSTEMD_SYSUSERS) AND INSTALL_SYSTEMD_SYSUSERSDIR) + CONFIGURE_FILE(sysusers.conf.in + ${CMAKE_CURRENT_BINARY_DIR}/sysusers.conf @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/sysusers.conf + DESTINATION ${INSTALL_SYSTEMD_SYSUSERSDIR} + RENAME mariadb.conf COMPONENT Server) + ENDIF() + + IF((HAVE_SYSTEMD OR INSTALL_SYSTEMD_TMPUSERS) AND INSTALL_SYSTEMD_TMPFILESDIR) + get_filename_component(MYSQL_UNIX_DIR ${MYSQL_UNIX_ADDR} DIRECTORY) + CONFIGURE_FILE(tmpfiles.conf.in + ${CMAKE_CURRENT_BINARY_DIR}/tmpfiles.conf @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tmpfiles.conf + DESTINATION ${INSTALL_SYSTEMD_TMPFILESDIR} + RENAME mariadb.conf COMPONENT Server) + ENDIF() + IF (INSTALL_SYSCONFDIR) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mysql-log-rotate DESTINATION ${INSTALL_SYSCONFDIR}/logrotate.d RENAME mysql COMPONENT SupportFiles) |