Skip to content

Commit 69d033d

Browse files
committed
Merge branch '10.11' into 11.2
2 parents 52723ec + 3d0fb15 commit 69d033d

File tree

660 files changed

+8143
-3599
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

660 files changed

+8143
-3599
lines changed

client/mysqltest.cc

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3933,9 +3933,9 @@ void do_move_file(struct st_command *command)
39333933
is_sub_path(ds_to_file.str, to_plen, vardir)) ||
39343934
(is_sub_path(ds_from_file.str, from_plen, tmpdir) &&
39353935
is_sub_path(ds_to_file.str, to_plen, tmpdir)))) {
3936-
report_or_die("Paths '%s' and '%s' are not both under MYSQLTEST_VARDIR '%s'"
3937-
"or both under MYSQL_TMP_DIR '%s'",
3938-
ds_from_file, ds_to_file, vardir, tmpdir);
3936+
report_or_die("Paths '%s' and '%s' are not both under "
3937+
"MYSQLTEST_VARDIR '%s' or both under MYSQL_TMP_DIR '%s'",
3938+
ds_from_file.str, ds_to_file.str, vardir, tmpdir);
39393939
DBUG_VOID_RETURN;
39403940
}
39413941

@@ -7968,18 +7968,37 @@ static const char *trking_info_desc[SESSION_TRACK_END + 1]=
79687968
/**
79697969
@brief Append state change information (received through Ok packet) to the output.
79707970
7971+
@details The appended string is lines prefixed with "-- ". Only
7972+
tracking types with info sent from the server are displayed. For
7973+
each tracking type, the first line is the type name e.g.
7974+
"-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES".
7975+
7976+
The subsequent lines are the actual tracking info. When type is
7977+
SESSION_TRACK_SYSTEM_VARIABLES, the actual tracking info is a list
7978+
of name-value pairs of lines, sorted by name, e.g. if the info
7979+
received from the server is "autocommit=ON;time_zone=SYSTEM", the
7980+
corresponding string is
7981+
7982+
-- autocommit: ON
7983+
-- time_zone: SYSTEM
7984+
79717985
@param [in,out] ds Dynamic string to hold the content to be printed.
79727986
@param [in] mysql Connection handle.
79737987
*/
79747988

79757989
static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql)
79767990
{
79777991
#ifndef EMBEDDED_LIBRARY
7992+
DYNAMIC_STRING ds_sort, *ds_type= NULL;
79787993
for (unsigned int type= SESSION_TRACK_BEGIN; type <= SESSION_TRACK_END; type++)
79797994
{
79807995
const char *data;
79817996
size_t data_length;
79827997

7998+
/*
7999+
Append the tracking type line, if any corresponding tracking
8000+
info is received.
8001+
*/
79838002
if (!mysql_session_track_get_first(mysql,
79848003
(enum_session_state_type) type,
79858004
&data, &data_length))
@@ -7995,26 +8014,56 @@ static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql)
79958014
DBUG_ASSERT(0);
79968015
dynstr_append_mem(ds, STRING_WITH_LEN("Tracker???\n"));
79978016
}
7998-
7999-
dynstr_append_mem(ds, STRING_WITH_LEN("-- "));
8000-
dynstr_append_mem(ds, data, data_length);
80018017
}
80028018
else
80038019
continue;
8020+
8021+
/*
8022+
The remaining of this function: format and append the actual
8023+
tracking info.
8024+
*/
8025+
if (type == SESSION_TRACK_SYSTEM_VARIABLES)
8026+
{
8027+
/* Prepare a string to be sorted before being appended. */
8028+
if (init_dynamic_string(&ds_sort, "", 1024, 1024))
8029+
die("Out of memory");
8030+
ds_type= &ds_sort;
8031+
}
8032+
else
8033+
ds_type= ds;
8034+
/* Append the first piece of info */
8035+
dynstr_append_mem(ds_type, STRING_WITH_LEN("-- "));
8036+
dynstr_append_mem(ds_type, data, data_length);
8037+
/* Whether we are appending the value of a variable */
8038+
bool appending_value= type == SESSION_TRACK_SYSTEM_VARIABLES;
8039+
/* Append remaining pieces */
80048040
while (!mysql_session_track_get_next(mysql,
80058041
(enum_session_state_type) type,
80068042
&data, &data_length))
80078043
{
8008-
dynstr_append_mem(ds, STRING_WITH_LEN("\n-- "));
8044+
if (appending_value)
8045+
dynstr_append_mem(ds_type, STRING_WITH_LEN(": "));
8046+
else
8047+
dynstr_append_mem(ds_type, STRING_WITH_LEN("\n-- "));
8048+
appending_value= !appending_value && type == SESSION_TRACK_SYSTEM_VARIABLES;
80098049
if (data == NULL)
80108050
{
80118051
DBUG_ASSERT(data_length == 0);
8012-
dynstr_append_mem(ds, STRING_WITH_LEN("<NULL>"));
8052+
dynstr_append_mem(ds_type, STRING_WITH_LEN("<NULL>"));
80138053
}
80148054
else
8015-
dynstr_append_mem(ds, data, data_length);
8055+
dynstr_append_mem(ds_type, data, data_length);
8056+
}
8057+
DBUG_ASSERT(!appending_value);
8058+
if (type == SESSION_TRACK_SYSTEM_VARIABLES)
8059+
{
8060+
dynstr_append_mem(ds_type, STRING_WITH_LEN("\n"));
8061+
dynstr_append_sorted(ds, ds_type, false);
8062+
dynstr_append_mem(ds, STRING_WITH_LEN("\n"));
8063+
dynstr_free(&ds_sort);
80168064
}
8017-
dynstr_append_mem(ds, STRING_WITH_LEN("\n\n"));
8065+
else
8066+
dynstr_append_mem(ds, STRING_WITH_LEN("\n\n"));
80188067
}
80198068
#endif /* EMBEDDED_LIBRARY */
80208069
}
@@ -12169,7 +12218,8 @@ void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val)
1216912218
/*
1217012219
Build a list of pointer to each line in ds_input, sort
1217112220
the list and use the sorted list to append the strings
12172-
sorted to the output ds
12221+
sorted to the output ds. The string ds_input needs to
12222+
end with a newline.
1217312223
1217412224
SYNOPSIS
1217512225
dynstr_append_sorted()

cmake/build_configurations/mysql_release.cmake

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ ELSEIF(RPM)
113113
IF(RPM MATCHES "opensuse|sles|centos|rhel|rocky|alma")
114114
SET(WITH_ROCKSDB_LZ4 OFF CACHE STRING "")
115115
ENDIF()
116+
IF(RPM MATCHES "rhel8")
117+
SET(WITH_READLINE ON CACHE BOOL "")
118+
ENDIF()
116119
ELSEIF(DEB)
117120
SET(WITH_SSL system CACHE STRING "")
118121
SET(WITH_ZLIB system CACHE STRING "")
@@ -172,12 +175,12 @@ IF(UNIX)
172175

173176
# Default GCC flags
174177
IF(CMAKE_COMPILER_IS_GNUCC)
175-
SET(COMMON_C_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized")
178+
SET(COMMON_C_FLAGS "-g -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized")
176179
SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}")
177180
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
178181
ENDIF()
179182
IF(CMAKE_COMPILER_IS_GNUCXX)
180-
SET(COMMON_CXX_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized")
183+
SET(COMMON_CXX_FLAGS "-g -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized")
181184
SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}")
182185
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
183186
ENDIF()

cmake/cpack_rpm.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ IF(WITH_WSREP)
249249
SETA(CPACK_RPM_server_PACKAGE_REQUIRES
250250
"galera-4" "rsync" "grep" "gawk" "iproute"
251251
"coreutils" "findutils" "tar")
252-
SETA(CPACK_RPM_server_PACKAGE_RECOMMENDS "lsof" "pv")
252+
SETA(CPACK_RPM_server_PACKAGE_RECOMMENDS "lsof" "socat" "pv")
253+
SETA(CPACK_RPM_test_PACKAGE_REQUIRES "socat")
253254
ENDIF()
254255

255256
SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh)

cmake/libutils.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ MACRO(CREATE_EXPORTS_FILE VAR TARGET API_FUNCTIONS)
8989
CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
9090
# Avoid "function redeclared as variable" error
9191
# when using gcc/clang option -flto(link time optimization)
92-
IF(" ${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} " MATCHES " -flto")
92+
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
9393
SET_SOURCE_FILES_PROPERTIES(${EXPORTS} PROPERTIES COMPILE_FLAGS "-fno-lto")
9494
ENDIF()
9595
SET(${VAR} ${EXPORTS})

cmake/mariadb_connector_c.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ ELSE()
3232
SET(CONC_INSTALL_LAYOUT "DEFAULT")
3333
ENDIF()
3434

35+
IF(WITH_BOOST_CONTEXT)
36+
SET(CONC_WITH_BOOST_CONTEXT ON)
37+
ENDIF()
38+
3539
SET(PLUGIN_INSTALL_DIR ${INSTALL_PLUGINDIR})
3640
SET(MARIADB_UNIX_ADDR ${MYSQL_UNIX_ADDR})
3741

config.h.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@
195195
#cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1
196196
#cmakedefine HAVE_PTHREAD_ATTR_SETSCOPE 1
197197
#cmakedefine HAVE_PTHREAD_ATTR_SETSTACKSIZE 1
198+
#cmakedefine HAVE_PTHREAD_GETATTR_NP 1
198199
#cmakedefine HAVE_PTHREAD_CONDATTR_CREATE 1
199200
#cmakedefine HAVE_PTHREAD_GETAFFINITY_NP 1
200201
#cmakedefine HAVE_PTHREAD_KEY_DELETE 1

configure.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ CHECK_FUNCTION_EXISTS (pthread_attr_getguardsize HAVE_PTHREAD_ATTR_GETGUARDSIZE)
380380
CHECK_FUNCTION_EXISTS (pthread_attr_setstacksize HAVE_PTHREAD_ATTR_SETSTACKSIZE)
381381
CHECK_FUNCTION_EXISTS (pthread_condattr_create HAVE_PTHREAD_CONDATTR_CREATE)
382382
CHECK_FUNCTION_EXISTS (pthread_getaffinity_np HAVE_PTHREAD_GETAFFINITY_NP)
383+
CHECK_FUNCTION_EXISTS (pthread_getattr_np HAVE_PTHREAD_GETATTR_NP)
383384
CHECK_FUNCTION_EXISTS (pthread_key_delete HAVE_PTHREAD_KEY_DELETE)
384385
CHECK_FUNCTION_EXISTS (pthread_rwlock_rdlock HAVE_PTHREAD_RWLOCK_RDLOCK)
385386
CHECK_FUNCTION_EXISTS (pthread_sigmask HAVE_PTHREAD_SIGMASK)

debian/rules

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@
44
# https://wiki.debian.org/Hardening
55
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
66

7-
# Disable LTO on Ubuntu, see LP: #1970634 and https://jira.mariadb.org/browse/MDEV-25633
8-
ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes), yes)
9-
export DEB_BUILD_MAINT_OPTIONS += optimize=-lto
10-
endif
11-
127
DPKG_EXPORT_BUILDFLAGS = 1
138
# Include all defaults, including buildflags.mk
149
include /usr/share/dpkg/default.mk

extra/mariabackup/xtrabackup.cc

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,27 +1186,25 @@ static void backup_file_op_fail(uint32_t space_id, int type,
11861186
const byte* new_name, ulint new_len)
11871187
{
11881188
bool fail = false;
1189-
switch(type) {
1189+
const static std::string spacename{filename_to_spacename(name, len)};
1190+
switch (type) {
11901191
case FILE_CREATE:
11911192
msg("DDL tracking : create %u \"%.*s\"", space_id, int(len), name);
1192-
fail = !check_if_skip_table(
1193-
filename_to_spacename(name, len).c_str());
1193+
fail = !check_if_skip_table(spacename.c_str());
11941194
break;
11951195
case FILE_MODIFY:
11961196
break;
11971197
case FILE_RENAME:
11981198
msg("DDL tracking : rename %u \"%.*s\",\"%.*s\"",
11991199
space_id, int(len), name, int(new_len), new_name);
1200-
fail = !check_if_skip_table(
1201-
filename_to_spacename(name, len).c_str())
1200+
fail = !check_if_skip_table(spacename.c_str())
12021201
|| !check_if_skip_table(
12031202
filename_to_spacename(new_name, new_len).c_str());
12041203
break;
12051204
case FILE_DELETE:
1206-
fail = !check_if_skip_table(
1207-
filename_to_spacename(name, len).c_str())
1208-
&& !check_if_fts_table(reinterpret_cast<const char*>(name));
1209-
msg("DDL tracking : delete %u \"%.*s\"", space_id, int(len), name);
1205+
fail = !check_if_skip_table(spacename.c_str())
1206+
&& !check_if_fts_table(spacename.c_str());
1207+
msg("DDL tracking : delete %u \"%.*s\"", space_id, int(len), name);
12101208
break;
12111209
default:
12121210
ut_ad(0);
@@ -2651,7 +2649,7 @@ static bool innodb_init()
26512649
const std::string ib_logfile0{get_log_file_path()};
26522650
os_file_delete_if_exists_func(ib_logfile0.c_str(), nullptr);
26532651
os_file_t file= os_file_create_func(ib_logfile0.c_str(),
2654-
OS_FILE_CREATE, OS_FILE_NORMAL,
2652+
OS_FILE_CREATE,
26552653
#if defined _WIN32 || defined O_DIRECT
26562654
OS_DATA_FILE_NO_O_DIRECT,
26572655
#else
@@ -2676,13 +2674,9 @@ static bool innodb_init()
26762674
mach_write_to_4(b + 12, my_crc32c(0, b, 11));
26772675
static_assert(12 + 4 == SIZE_OF_FILE_CHECKPOINT, "compatibility");
26782676

2679-
#ifdef _WIN32
2680-
DWORD len;
2681-
ret= WriteFile(file, log_hdr_buf, sizeof log_hdr_buf,
2682-
&len, nullptr) && len == sizeof log_hdr_buf;
2683-
#else
2684-
ret= sizeof log_hdr_buf == write(file, log_hdr_buf, sizeof log_hdr_buf);
2685-
#endif
2677+
ret = os_file_write_func(IORequestWrite, ib_logfile0.c_str(), file,
2678+
log_hdr_buf, 0,
2679+
sizeof(log_hdr_buf)) == DB_SUCCESS;
26862680
if (!os_file_close_func(file) || !ret)
26872681
goto invalid_log;
26882682
return false;
@@ -3913,16 +3907,18 @@ static void xb_load_single_table_tablespace(const char *dirname,
39133907

39143908
if (is_remote) {
39153909
RemoteDatafile* rf = new RemoteDatafile();
3910+
file = rf;
39163911
if (!rf->open_link_file(n)) {
3917-
die("Can't open datafile %s", name);
3912+
goto cant_open;
39183913
}
3919-
file = rf;
39203914
} else {
39213915
file = new Datafile();
39223916
file->make_filepath(".", n, IBD);
39233917
}
39243918

39253919
if (file->open_read_only(true) != DB_SUCCESS) {
3920+
cant_open:
3921+
delete file;
39263922
// Ignore FTS tables, as they can be removed for intermediate tables,
39273923
// this code must be executed under stronger or equal to BLOCK_DDL lock,
39283924
// so there must not be errors for non-intermediate FTS tables.
@@ -7551,7 +7547,6 @@ void handle_options(int argc, char **argv, char ***argv_server,
75517547
}
75527548

75537549
static int main_low(char** argv);
7554-
static int get_exepath(char *buf, size_t size, const char *argv0);
75557550

75567551
/* ================= main =================== */
75577552
int main(int argc, char **argv)
@@ -7562,8 +7557,8 @@ int main(int argc, char **argv)
75627557

75637558
my_getopt_prefix_matching= 0;
75647559

7565-
if (get_exepath(mariabackup_exe,FN_REFLEN, argv[0]))
7566-
strncpy(mariabackup_exe,argv[0], FN_REFLEN-1);
7560+
if (my_get_exepath(mariabackup_exe, FN_REFLEN, argv[0]))
7561+
strncpy(mariabackup_exe, argv[0], FN_REFLEN-1);
75677562

75687563

75697564
if (argc > 1 )
@@ -7848,32 +7843,6 @@ static int main_low(char** argv)
78487843
}
78497844

78507845

7851-
static int get_exepath(char *buf, size_t size, const char *argv0)
7852-
{
7853-
#ifdef _WIN32
7854-
DWORD ret = GetModuleFileNameA(NULL, buf, (DWORD)size);
7855-
if (ret > 0)
7856-
return 0;
7857-
#elif defined(__linux__)
7858-
ssize_t ret = readlink("/proc/self/exe", buf, size-1);
7859-
if(ret > 0)
7860-
return 0;
7861-
#elif defined(__APPLE__)
7862-
size_t ret = proc_pidpath(getpid(), buf, static_cast<uint32_t>(size));
7863-
if (ret > 0) {
7864-
buf[ret] = 0;
7865-
return 0;
7866-
}
7867-
#elif defined(__FreeBSD__)
7868-
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
7869-
if (sysctl(mib, 4, buf, &size, NULL, 0) == 0) {
7870-
return 0;
7871-
}
7872-
#endif
7873-
7874-
return my_realpath(buf, argv0, 0);
7875-
}
7876-
78777846

78787847
#if defined (__SANITIZE_ADDRESS__) && defined (__linux__)
78797848
/* Avoid LeakSanitizer's false positives. */

include/m_string.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,19 @@ static inline void safe_strcpy(char *dst, size_t dst_size, const char *src)
285285
static inline int safe_strcpy_truncated(char *dst, size_t dst_size,
286286
const char *src)
287287
{
288-
DBUG_ASSERT(dst_size > 0);
289288

290-
strncpy(dst, src, dst_size);
291-
if (dst[dst_size - 1])
289+
DBUG_ASSERT(dst_size > 0);
290+
if (dst_size == 0)
291+
return 1;
292+
/*
293+
We do not want to use strncpy() as we do not want to rely on
294+
strncpy() filling the unused dst with 0.
295+
We cannot use strmake() here as it in debug mode fills the buffers
296+
with 'Z'.
297+
*/
298+
if (strnmov(dst, src, dst_size) == dst+dst_size)
292299
{
293-
dst[dst_size - 1]= 0;
300+
dst[dst_size-1]= 0;
294301
return 1;
295302
}
296303
return 0;
@@ -306,7 +313,7 @@ static inline int safe_strcpy_truncated(char *dst, size_t dst_size,
306313
static inline int safe_strcat(char *dst, size_t dst_size, const char *src)
307314
{
308315
size_t init_len= strlen(dst);
309-
if (init_len > dst_size)
316+
if (init_len >= dst_size)
310317
return 1;
311318
return safe_strcpy_truncated(dst + init_len, dst_size - init_len, src);
312319
}

0 commit comments

Comments
 (0)