Update to MySQL 5.7.14

This commit is contained in:
Norvald H. Ryeng 2016-08-08 14:08:59 +02:00 committed by Jakub Dorňák
parent a0bac69f97
commit e32085d812
7 changed files with 156 additions and 322 deletions

View File

@ -1,113 +0,0 @@
commit 34ee5b9ce2d3ab1ccfb91016ee058949c69c1066
Author: Norvald H. Ryeng <norvald.ryeng@oracle.com>
Date: Fri May 27 15:19:56 2016 +0200
Bug#23046775 DIFFERENT FLOATING POINT RESULTS ON ARM64 AND POWERPC
Backport from trunk.
Problem: The -fexpensive-optimizations option to gcc causes ARM64 and
PowerPC build to compute floating point operations slightly
differently from other platforms. This flag is enabled by -O2 and
higher optimization levels.
Fix: Check for the unwanted floating point behavior in CMake and
disable expensive-optimizations in GCC builds on platforms that
experience this behavior.
diff --git a/cmake/build_configurations/compiler_options.cmake b/cmake/build_configurations/compiler_options.cmake
index 98d553a..f105c7a 100644
--- a/cmake/build_configurations/compiler_options.cmake
+++ b/cmake/build_configurations/compiler_options.cmake
@@ -15,6 +15,7 @@
INCLUDE(CheckCCompilerFlag)
INCLUDE(CheckCXXCompilerFlag)
+INCLUDE(cmake/floating_point.cmake)
IF(SIZEOF_VOIDP EQUAL 4)
SET(32BIT 1)
@@ -33,6 +34,10 @@ IF(UNIX)
IF(WITH_VALGRIND)
SET(COMMON_C_FLAGS "-fno-inline ${COMMON_C_FLAGS}")
ENDIF()
+ # Disable optimizations that change floating point results
+ IF(HAVE_C_FLOATING_POINT_OPTIMIZATION_PROBLEMS)
+ SET(COMMON_C_FLAGS "${COMMON_C_FLAGS} -fno-expensive-optimizations")
+ ENDIF()
SET(CMAKE_C_FLAGS_DEBUG "${COMMON_C_FLAGS}")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
ENDIF()
@@ -48,6 +53,10 @@ IF(UNIX)
IF(WITH_VALGRIND)
SET(COMMON_CXX_FLAGS "-fno-inline ${COMMON_CXX_FLAGS}")
ENDIF()
+ # Disable optimizations that change floating point results
+ IF(HAVE_CXX_FLOATING_POINT_OPTIMIZATION_PROBLEMS)
+ SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} -fno-expensive-optimizations")
+ ENDIF()
SET(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
ENDIF()
diff --git a/cmake/floating_point.cmake b/cmake/floating_point.cmake
new file mode 100644
index 0000000..6db63ad
--- /dev/null
+++ b/cmake/floating_point.cmake
@@ -0,0 +1,56 @@
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+#
+# 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 Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+INCLUDE(CheckCSourceRuns)
+INCLUDE(CheckCXXSourceRuns)
+
+SET(code "
+ int main (int argc, char **argv)
+ {
+ double n[21] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,1 };
+ double m= 0, s= 0;
+ int i;
+ for(i= 0; i < 21; i++)
+ {
+ double m_kminusone= m;
+ m= m_kminusone + (n[i] - m_kminusone) / (double) (i + 2);
+ s= s + (n[i] - m_kminusone) * (n[i] - m);
+ }
+ /*
+ s should now be either 5e 74 d1 45 17 5d 14 40 or
+ 40 14 5d 17 45 d1 74 5e, depending on endianness. If the floating point
+ operations are over optimized, the least significant byte is 5d instead
+ of 5e.
+ */
+ return (*(unsigned char*)(&s) == 0x5e ||
+ *((unsigned char*)(&s) + 7) == 0x5e);
+ }"
+)
+
+SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+SET(CMAKE_REQUIRED_FLAGS
+ "${CMAKE_REQUIRED_FLAGS} -O3 -fexpensive-optimizations"
+)
+
+IF(CMAKE_COMPILER_IS_GNUCC)
+ CHECK_C_SOURCE_RUNS("${code}" HAVE_C_FLOATING_POINT_OPTIMIZATION_PROBLEMS)
+ENDIF()
+
+IF(CMAKE_COMPILER_IS_GNUCXX)
+ CHECK_CXX_SOURCE_RUNS("${code}" HAVE_CXX_FLOATING_POINT_OPTIMIZATION_PROBLEMS)
+ENDIF()
+
+SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")

View File

@ -1,14 +0,0 @@
diff --git a/client/auth_utils.cc b/client/auth_utils.cc
index 21416bb..03fd71c 100644
--- a/client/auth_utils.cc
+++ b/client/auth_utils.cc
@@ -61,7 +61,7 @@ int parse_cnf_file(istream &sin, map<string, string > *options,
getline(sin, option_value);
trim(&option_value);
if (option_name.length() > 0)
- options->insert(make_pair<string, string >(option_name, option_value));
+ options->insert(make_pair(option_name, option_value));
}
return ALL_OK;
} catch(...)

View File

@ -1,113 +0,0 @@
From 41480c0bacf8f354610825856b5c66b8516da607 Mon Sep 17 00:00:00 2001
From: Jon Olav Hauglid <jon.hauglid@oracle.com>
Date: Fri, 1 Jul 2016 09:00:16 +0200
Subject: [PATCH] Bug#23708332: -DWITH_EDITLINE=SYSTEM BREAKS WITH
LIBEDIT-20160618-3.1
Add CMake check for the new editline completion API
and based on the result, use already existing code
for it in the mysql client.
Change-Id: I8a9a721de24eef6359d3285cffd9745a8894ea4b
---
client/mysql.cc | 8 ++++----
cmake/readline.cmake | 22 +++++++++++++++++++---
config.h.cmake | 1 +
3 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/client/mysql.cc b/client/mysql.cc
index 94c3227..46147e9 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2816,7 +2816,7 @@ C_MODE_END
if not.
*/
-#if defined(USE_NEW_READLINE_INTERFACE)
+#if defined(USE_NEW_EDITLINE_INTERFACE)
static int fake_magic_space(int, int);
extern "C" char *no_completion(const char*,int)
#elif defined(USE_LIBEDIT_INTERFACE)
@@ -2845,7 +2845,7 @@ static int not_in_history(const char *line)
}
-#if defined(USE_NEW_READLINE_INTERFACE)
+#if defined(USE_NEW_EDITLINE_INTERFACE)
static int fake_magic_space(int, int)
#else
static int fake_magic_space(const char *, int)
@@ -2862,7 +2862,7 @@ static void initialize_readline (char *name)
rl_readline_name = name;
/* Tell the completer that we want a crack first. */
-#if defined(USE_NEW_READLINE_INTERFACE)
+#if defined(USE_NEW_EDITLINE_INTERFACE)
rl_attempted_completion_function= (rl_completion_func_t*)&new_mysql_completion;
rl_completion_entry_function= (rl_compentry_func_t*)&no_completion;
@@ -2890,7 +2890,7 @@ static char **new_mysql_completion(const char *text,
int end MY_ATTRIBUTE((unused)))
{
if (!status.batch && !quick)
-#if defined(USE_NEW_READLINE_INTERFACE)
+#if defined(USE_NEW_EDITLINE_INTERFACE)
return rl_completion_matches(text, new_command_generator);
#else
return completion_matches((char *)text, (CPFunction *)new_command_generator);
diff --git a/cmake/readline.cmake b/cmake/readline.cmake
index 00ecc53..8aed8cb 100644
--- a/cmake/readline.cmake
+++ b/cmake/readline.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -158,12 +158,28 @@ MACRO (FIND_SYSTEM_EDITLINE)
completion_matches(0,0);
return res;
}"
- EDITLINE_HAVE_COMPLETION)
+ EDITLINE_HAVE_COMPLETION_INT)
- IF(EDITLINE_HAVE_COMPLETION)
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <stdio.h>
+ #include <readline.h>
+ int main(int argc, char **argv)
+ {
+ typedef char* MYFunction(const char*, int);
+ MYFunction* myf= rl_completion_entry_function;
+ char *res= (myf)(NULL, 0);
+ completion_matches(0,0);
+ return res != NULL;
+ }"
+ EDITLINE_HAVE_COMPLETION_CHAR)
+
+ IF(EDITLINE_HAVE_COMPLETION_INT OR EDITLINE_HAVE_COMPLETION_CHAR)
SET(HAVE_HIST_ENTRY ${EDITLINE_HAVE_HIST_ENTRY})
SET(USE_LIBEDIT_INTERFACE 1)
SET(EDITLINE_FOUND 1)
+ IF(EDITLINE_HAVE_COMPLETION_CHAR)
+ SET(USE_NEW_EDITLINE_INTERFACE 1)
+ ENDIF()
ENDIF()
ENDIF()
ENDMACRO()
diff --git a/config.h.cmake b/config.h.cmake
index f0a11c4..388442c 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -276,6 +276,7 @@
#cmakedefine HAVE_NCURSES_H 1
#cmakedefine USE_LIBEDIT_INTERFACE 1
#cmakedefine HAVE_HIST_ENTRY 1
+#cmakedefine USE_NEW_EDITLINE_INTERFACE 1
/*
* Libedit
--
2.7.4

View File

@ -1,51 +0,0 @@
commit 6c23035b52284c2575f297311dfd0278bcbb0dd1
Author: Christopher Powers <chris.powers@oracle.com>
Date: Mon May 2 19:43:31 2016 +0100
Bug#23186653 PERFORMANCE SCHEMA UNIT TESTS PFS_INSTR-OOM & PFS_INSTR_CLASS FAIL REGULARLY
Two test cases pass on Windows but crash on Linux due to different init paths.
Now pass on both.
diff --git a/storage/perfschema/unittest/pfs_instr-oom-t.cc b/storage/perfschema/unittest/pfs_instr-oom-t.cc
index db74c9c..b6bc818 100644
--- a/storage/perfschema/unittest/pfs_instr-oom-t.cc
+++ b/storage/perfschema/unittest/pfs_instr-oom-t.cc
@@ -232,12 +232,14 @@ void test_oom()
ok(cond_2 == NULL, "oom (create cond)");
/* Create file. */
- stub_alloc_always_fails = false;
PFS_thread fake_thread;
+ rc = init_instruments(&param);
fake_thread.m_filename_hash_pins= NULL;
init_file_hash(&param);
- rc = init_instruments(&param);
- ok(rc == 0, "instances init");
+
+ stub_alloc_always_fails = true;
+ file_2 = find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
+ ok(file_2 == NULL, "oom (create file)");
stub_alloc_always_fails= false;
file_1= find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
@@ -245,10 +247,6 @@ void test_oom()
release_file(file_1);
cleanup_instruments();
- stub_alloc_always_fails= true;
- file_2= find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
- ok(file_2 == NULL, "oom (create file)");
-
/* Create socket. */
stub_alloc_always_fails = false;
rc = init_instruments(&param);
@@ -422,7 +420,7 @@ void do_all_tests()
int main(int, char **)
{
- plan(28);
+ plan(32);
MY_INIT("pfs_instr-oom-t");
do_all_tests();
return 0;

View File

@ -0,0 +1,26 @@
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -3855,14 +3855,17 @@ buf_block_from_ahi(const byte* ptr)
ut_ad(buf_chunk_map_ref == buf_chunk_map_reg);
ut_ad(!buf_pool_resizing);
- const byte* bound = reinterpret_cast<uintptr_t>(ptr)
- > srv_buf_pool_chunk_unit
- ? ptr - srv_buf_pool_chunk_unit : 0;
- it = chunk_map->upper_bound(bound);
+ buf_chunk_t* chunk;
+ it = chunk_map->upper_bound(ptr);
+
+ ut_a(it != chunk_map->begin());
- ut_a(it != chunk_map->end());
+ if (it == chunk_map->end()) {
+ chunk = chunk_map->rbegin()->second;
+ } else {
+ chunk = (--it)->second;
+ }
- buf_chunk_t* chunk = it->second;
ulint offs = ptr - chunk->blocks->frame;
offs >>= UNIV_PAGE_SIZE_SHIFT;

View File

@ -0,0 +1,123 @@
Problem: The fix for bug #23607230 used xxhash symbols from liblz4,
but even though the xxhash symbols are exported by liblz4, the header
file is not part of the API, so compilation fails when building with
WITH_LZ4=system.
Fix: Build xxhash separately from liblz4 so that it's available both
when using system and bundled lz4 libraries.
---
extra/lz4/my_xxhash.h | 27 +++++++++++++++++++++++++++
libmysqld/CMakeLists.txt | 6 ++++++
sql/CMakeLists.txt | 6 ++++++
sql/rpl_write_set_handler.cc | 4 ++--
4 files changed, 41 insertions(+), 2 deletions(-)
create mode 100644 extra/lz4/my_xxhash.h
diff --git a/extra/lz4/my_xxhash.h b/extra/lz4/my_xxhash.h
new file mode 100644
index 0000000..699c1b5
--- /dev/null
+++ b/extra/lz4/my_xxhash.h
@@ -0,0 +1,27 @@
+#ifndef MY_XXHASH_H_INCLUDED
+#define MY_XXHASH_H_INCLUDED
+
+/*
+ Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+
+ 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 Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
+*/
+
+// Define a namespace prefix to all xxhash functions. This is done to
+// avoid conflict with xxhash symbols in liblz4.
+#define XXH_NAMESPACE MY_
+
+#include "xxhash.h"
+
+#endif // MY_XXHASH_H_INCLUDED
diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt
index cb188ec..0093f2e 100644
--- a/libmysqld/CMakeLists.txt
+++ b/libmysqld/CMakeLists.txt
@@ -62,6 +62,7 @@ SET(SQL_EMBEDDED_SOURCES
libmysqld.c
${GEN_SOURCES}
${GEN_YACC_SOURCES}
+ ../extra/lz4/xxhash.c
../client/get_password.c
../libmysql/errmsg.c
../libmysql/libmysql.c
@@ -118,6 +119,11 @@ ADD_COMPILE_FLAGS(
COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR}
)
+ADD_COMPILE_FLAGS(
+ ../extra/lz4/xxhash.c
+ COMPILE_FLAGS -DXXH_NAMESPACE=MY_
+)
+
# Fixes "C1128: number of sections exceeded object file format limit" in MSVC /MD
# The flag /bigobj is not added if the build is not /MD
IF(WIN32 AND CMAKE_SIZEOF_VOID_P MATCHES 8)
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 50352b1..ea42ff5 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -254,6 +254,7 @@ SET(SQL_SOURCE
${GEN_DIGEST_SOURCES}
${CONF_SOURCES}
${SQL_SHARED_SOURCES}
+ ../extra/lz4/xxhash.c
../libmysql/errmsg.c
../sql-common/client.c
../sql-common/client_plugin.c
@@ -314,6 +315,11 @@ ADD_COMPILE_FLAGS(
COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR}
)
+ADD_COMPILE_FLAGS(
+ ../extra/lz4/xxhash.c
+ COMPILE_FLAGS -DXXH_NAMESPACE=MY_
+)
+
# Fixes "C1128: number of sections exceeded object file format limit" in MSVC /MD
# The flag /bigobj is not added if the build is not WINDOWS_RUNTIME_MD (/MD)
IF(WINDOWS_RUNTIME_MD AND CMAKE_SIZEOF_VOID_P MATCHES 8)
diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc
index 3897321..c7e778e 100644
--- a/sql/rpl_write_set_handler.cc
+++ b/sql/rpl_write_set_handler.cc
@@ -23,7 +23,7 @@
#include "table.h" // TABLE
#include "my_murmur3.h" // murmur3_32
-#include "xxhash.h" // xxHash
+#include "../extra/lz4/my_xxhash.h" // xxHash
#include <map>
#include <string>
@@ -61,7 +61,7 @@ template <class type> uint64 calc_hash(ulong algorithm, type T)
if(algorithm == HASH_ALGORITHM_MURMUR32)
return (murmur3_32((const uchar*)T, strlen(T), 0));
else
- return (XXH64((const uchar*)T, strlen(T), 0));
+ return (MY_XXH64((const uchar*)T, strlen(T), 0));
}
/**
--
2.1.0

View File

@ -8,7 +8,7 @@
%{!?runselftest:%global runselftest 1}
# Set this to 1 to see which tests fail
%global check_testsuite 1
%global check_testsuite 0
# set to 1 to enable
%global with_shared_lib_major_hack 1
@ -79,7 +79,7 @@
%global sameevr %{?epoch:%{epoch}:}%{version}-%{release}
Name: community-mysql
Version: 5.7.13
Version: 5.7.14
Release: 1%{?with_debug:.debug}%{?dist}
Summary: MySQL client programs and shared libraries
Group: Applications/Databases
@ -120,10 +120,8 @@ Patch6: %{pkgnamepatch}-paths.patch
# Patches specific for this mysql package
Patch51: %{pkgnamepatch}-chain-certs.patch
Patch52: %{pkgnamepatch}-sharedir.patch
Patch53: %{pkgnamepatch}-5.7.13-pfs-oom-unittest.patch
Patch54: %{pkgnamepatch}-5.7.13-fpu.patch
Patch55: %{pkgnamepatch}-5.7.13-gcc6.patch
Patch56: %{pkgnamepatch}-5.7.13-libedit.patch
Patch53: %{pkgnamepatch}-5.7.14-lz4.patch
Patch54: %{pkgnamepatch}-5.7.14-buf-align.patch
Patch70: %{pkgnamepatch}-5.7.9-major.patch
# Patches taken from boost 1.59
@ -385,8 +383,6 @@ the MySQL sources.
%patch52 -p1
%patch53 -p1
%patch54 -p1
%patch55 -p1
%patch56 -p1
%if %{with_shared_lib_major_hack}
%patch70 -p1
%endif
@ -415,7 +411,7 @@ touch %{skiplist}
add_test binlog.binlog_xa_prepared_disconnect : unstable test
add_test innodb.table_encrypt_kill : unstable test
# these tests fail in 5.7.13 on arm32
# these tests fail in 5.7.14 on arm32
%ifarch %arm
# GIS related issue
add_test innodb_gis.1 : arm32 gis issue
@ -437,29 +433,9 @@ add_test perfschema.func_file_io : missing hw on arm32
add_test perfschema.setup_objects : missing hw on arm32
%endif
# these tests fail in 5.7.13 on aarch64
%ifarch aarch64
# this test fail in 5.7.14 on ppc64* and aarch64
%ifarch ppc64 ppc64le aarch64
add_test innodb.innodb : missing correct value
add_test innodb_fts.large_records : innodb assert
add_test main.ctype_big5 : innodb assert
add_test main.ctype_gbk : innodb assert
add_test main.ctype_utf8mb4_uca : innodb assert
add_test main.insert : innodb assert
add_test main.sp_trans : innodb assert
add_test sysschema.pr_diagnostics : innodb assert
add_test sys_vars.log_slow_admin_statements_func : innodb assert
%endif
# these tests fail in 5.7.13 on ppc64*
%ifarch ppc64 ppc64le
add_test innodb.innodb : missing correct value
add_test main.ctype_big5 : innodb assert
add_test main.ctype_gbk : innodb assert
add_test main.insert : innodb assert
add_test main.innodb_mrr_cost_icp : innodb assert
add_test main.mysqldump : innodb assert
add_test sys_vars.log_slow_admin_statements_func : innodb assert
add_test parts.partition_int_innodb : parts issue
%endif
popd