Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
9810a4ec
Commit
9810a4ec
authored
Jun 21, 2022
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.9 into 10.10
parents
891bf1d8
707f2aa2
Changes
36
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
406 additions
and
496 deletions
+406
-496
cmake/os/WindowsCache.cmake
cmake/os/WindowsCache.cmake
+1
-1
config.h.cmake
config.h.cmake
+1
-1
configure.cmake
configure.cmake
+1
-1
include/aligned.h
include/aligned.h
+34
-0
include/my_global.h
include/my_global.h
+1
-1
mysql-test/main/bootstrap.result
mysql-test/main/bootstrap.result
+6
-0
mysql-test/main/bootstrap.test
mysql-test/main/bootstrap.test
+26
-0
mysql-test/main/mysql_tzinfo_to_sql_symlink.result
mysql-test/main/mysql_tzinfo_to_sql_symlink.result
+20
-20
mysql-test/main/mysql_tzinfo_to_sql_symlink.test
mysql-test/main/mysql_tzinfo_to_sql_symlink.test
+17
-0
mysql-test/suite/innodb/r/innodb-wl5980-debug.result
mysql-test/suite/innodb/r/innodb-wl5980-debug.result
+0
-27
mysql-test/suite/innodb/t/innodb-wl5980-debug.test
mysql-test/suite/innodb/t/innodb-wl5980-debug.test
+0
-52
mysql-test/suite/innodb/t/innodb_page_compressed.combinations
...l-test/suite/innodb/t/innodb_page_compressed.combinations
+5
-0
mysys/my_lockmem.c
mysys/my_lockmem.c
+4
-2
plugin/hashicorp_key_management/CMakeLists.txt
plugin/hashicorp_key_management/CMakeLists.txt
+2
-1
sql/table_cache.cc
sql/table_cache.cc
+8
-3
sql/tztime.cc
sql/tztime.cc
+4
-4
storage/innobase/buf/buf0buf.cc
storage/innobase/buf/buf0buf.cc
+5
-3
storage/innobase/fil/fil0fil.cc
storage/innobase/fil/fil0fil.cc
+44
-181
storage/innobase/include/buf0buf.h
storage/innobase/include/buf0buf.h
+0
-21
storage/innobase/include/mtr0mtr.h
storage/innobase/include/mtr0mtr.h
+6
-0
storage/innobase/include/univ.i
storage/innobase/include/univ.i
+1
-0
storage/innobase/include/ut0pool.h
storage/innobase/include/ut0pool.h
+1
-8
storage/innobase/lock/lock0lock.cc
storage/innobase/lock/lock0lock.cc
+8
-6
storage/innobase/mtr/mtr0mtr.cc
storage/innobase/mtr/mtr0mtr.cc
+106
-0
storage/perfschema/pfs_digest.cc
storage/perfschema/pfs_digest.cc
+2
-1
storage/perfschema/pfs_events_stages.h
storage/perfschema/pfs_events_stages.h
+2
-1
storage/perfschema/pfs_events_statements.h
storage/perfschema/pfs_events_statements.h
+2
-1
storage/perfschema/pfs_events_waits.h
storage/perfschema/pfs_events_waits.h
+2
-2
storage/perfschema/pfs_global.cc
storage/perfschema/pfs_global.cc
+7
-49
storage/perfschema/pfs_global.h
storage/perfschema/pfs_global.h
+4
-19
storage/perfschema/pfs_host.cc
storage/perfschema/pfs_host.cc
+2
-1
storage/perfschema/pfs_instr.cc
storage/perfschema/pfs_instr.cc
+2
-1
storage/perfschema/unittest/stub_pfs_global.h
storage/perfschema/unittest/stub_pfs_global.h
+2
-14
storage/spider/mysql-test/spider/r/variable_deprecation.result
...ge/spider/mysql-test/spider/r/variable_deprecation.result
+1
-1
storage/spider/spd_param.cc
storage/spider/spd_param.cc
+74
-60
tpool/tpool_generic.cc
tpool/tpool_generic.cc
+5
-14
No files found.
cmake/os/WindowsCache.cmake
View file @
9810a4ec
...
...
@@ -23,6 +23,7 @@ IF(MSVC)
SET
(
BFD_H_EXISTS 0 CACHE INTERNAL
""
)
SET
(
HAVE_ACCESS 1 CACHE INTERNAL
""
)
SET
(
HAVE_ALARM CACHE INTERNAL
""
)
SET
(
HAVE_ALIGNED_ALLOC CACHE INTERNAL
""
)
SET
(
HAVE_ALLOCA_H CACHE INTERNAL
""
)
SET
(
HAVE_ARPA_INET_H CACHE INTERNAL
""
)
SET
(
HAVE_BACKTRACE CACHE INTERNAL
""
)
...
...
@@ -93,7 +94,6 @@ SET(HAVE_MALLINFO CACHE INTERNAL "")
SET
(
HAVE_MALLINFO2 CACHE INTERNAL
""
)
SET
(
HAVE_MALLOC_H 1 CACHE INTERNAL
""
)
SET
(
HAVE_MALLOC_ZONE CACHE INTERNAL
""
)
SET
(
HAVE_MEMALIGN CACHE INTERNAL
""
)
SET
(
HAVE_MEMCPY 1 CACHE INTERNAL
""
)
SET
(
HAVE_MEMMOVE 1 CACHE INTERNAL
""
)
SET
(
HAVE_MEMORY_H 1 CACHE INTERNAL
""
)
...
...
config.h.cmake
View file @
9810a4ec
...
...
@@ -19,6 +19,7 @@
/* Headers we may want to use. */
#cmakedefine STDC_HEADERS 1
#cmakedefine _GNU_SOURCE 1
#cmakedefine HAVE_ALIGNED_ALLOC 1
#cmakedefine HAVE_ALLOCA_H 1
#cmakedefine HAVE_ARPA_INET_H 1
#cmakedefine HAVE_ASM_TERMBITS_H 1
...
...
@@ -163,7 +164,6 @@
#cmakedefine HAVE_LRAND48 1
#cmakedefine HAVE_LOCALTIME_R 1
#cmakedefine HAVE_LSTAT 1
#cmakedefine HAVE_MEMALIGN 1
/*
#cmakedefine HAVE_MLOCK 1 see Bug#54662 */
#cmakedefine HAVE_NL_LANGINFO 1
#cmakedefine HAVE_MADVISE 1
...
...
configure.cmake
View file @
9810a4ec
...
...
@@ -324,6 +324,7 @@ ENDIF()
CHECK_FUNCTION_EXISTS
(
accept4 HAVE_ACCEPT4
)
CHECK_FUNCTION_EXISTS
(
access HAVE_ACCESS
)
CHECK_FUNCTION_EXISTS
(
alarm HAVE_ALARM
)
CHECK_FUNCTION_EXISTS
(
aligned_alloc HAVE_ALIGNED_ALLOC
)
SET
(
HAVE_ALLOCA 1
)
CHECK_FUNCTION_EXISTS
(
backtrace HAVE_BACKTRACE
)
CHECK_FUNCTION_EXISTS
(
backtrace_symbols HAVE_BACKTRACE_SYMBOLS
)
...
...
@@ -421,7 +422,6 @@ CHECK_FUNCTION_EXISTS (thr_setconcurrency HAVE_THR_SETCONCURRENCY)
CHECK_FUNCTION_EXISTS
(
thr_yield HAVE_THR_YIELD
)
CHECK_FUNCTION_EXISTS
(
vasprintf HAVE_VASPRINTF
)
CHECK_FUNCTION_EXISTS
(
vsnprintf HAVE_VSNPRINTF
)
CHECK_FUNCTION_EXISTS
(
memalign HAVE_MEMALIGN
)
CHECK_FUNCTION_EXISTS
(
nl_langinfo HAVE_NL_LANGINFO
)
IF
(
HAVE_SYS_EVENT_H
)
...
...
include/aligned.h
0 → 100644
View file @
9810a4ec
/*
Copyright (c) 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 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 Street, Fifth Floor, Boston, MA 02110-1335 USA */
inline
void
*
aligned_malloc
(
size_t
size
,
size_t
alignment
)
{
#ifdef _WIN32
return
_aligned_malloc
(
size
,
alignment
);
#elif defined HAVE_ALIGNED_ALLOC
return
aligned_alloc
(
alignment
,
size
);
#else
void
*
result
;
if
(
posix_memalign
(
&
result
,
alignment
,
size
))
result
=
NULL
;
return
result
;
#endif
}
inline
void
aligned_free
(
void
*
ptr
)
{
IF_WIN
(
_aligned_free
,
free
)(
ptr
);
}
include/my_global.h
View file @
9810a4ec
/*
Copyright (c) 2001, 2013, Oracle and/or its affiliates.
Copyright (c) 2009, 202
1
, MariaDB Corporation.
Copyright (c) 2009, 202
2
, 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
...
...
mysql-test/main/bootstrap.result
View file @
9810a4ec
...
...
@@ -34,4 +34,10 @@ name dl
EXAMPLE ha_example.so
truncate table mysql.plugin;
# Kill the server
#
# MDEV-28782 mariadb-tzinfo-to-sql to work in bootstrap mode
#
#
# End of 10.6 tests
#
# restart
mysql-test/main/bootstrap.test
View file @
9810a4ec
...
...
@@ -133,4 +133,30 @@ EOF
--
exec
$MYSQLD_BOOTSTRAP_CMD
--
default
-
time
-
zone
=
Europe
/
Moscow
<
$MYSQLTEST_VARDIR
/
tmp
/
bootstrap_9969
.
sql
>>
$MYSQLTEST_VARDIR
/
tmp
/
bootstrap
.
log
2
>&
1
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
bootstrap_9969
.
sql
--
echo
#
--
echo
# MDEV-28782 mariadb-tzinfo-to-sql to work in bootstrap mode
--
echo
#
--
write_file
$MYSQLTEST_VARDIR
/
tmp
/
tz
.
sql
use
test
;
create
table
time_zone
like
mysql
.
time_zone
;
create
table
time_zone_leap_second
like
mysql
.
time_zone_leap_second
;
create
table
time_zone_name
like
mysql
.
time_zone_name
;
create
table
time_zone_transition
like
mysql
.
time_zone_transition
;
create
table
time_zone_transition_type
like
mysql
.
time_zone_transition_type
;
EOF
--
exec
$MYSQL_TZINFO_TO_SQL
--
skip
-
write
-
binlog
std_data
/
zoneinfo
/
GMT
GMT
2
>/
dev
/
null
>>
$MYSQLTEST_VARDIR
/
tmp
/
tz
.
sql
--
append_file
$MYSQLTEST_VARDIR
/
tmp
/
tz
.
sql
DROP
TABLE
time_zone
,
time_zone_leap_second
,
time_zone_name
,
time_zone_transition
,
time_zone_transition_type
;
EOF
--
exec
$MYSQLD_BOOTSTRAP_CMD
<
$MYSQLTEST_VARDIR
/
tmp
/
tz
.
sql
>>
$MYSQLTEST_VARDIR
/
tmp
/
bootstrap
.
log
2
>&
1
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
tz
.
sql
--
echo
#
--
echo
# End of 10.6 tests
--
echo
#
# restore
--
source
include
/
start_mysqld
.
inc
mysql-test/main/mysql_tzinfo_to_sql_symlink.result
View file @
9810a4ec
This diff is collapsed.
Click to expand it.
mysql-test/main/mysql_tzinfo_to_sql_symlink.test
View file @
9810a4ec
...
...
@@ -3,6 +3,8 @@
--
source
include
/
not_windows
.
inc
--
source
include
/
no_protocol
.
inc
let
$is_embedded
=
`select version() like '%embedded%'`
;
CREATE
TABLE
time_zone
LIKE
mysql
.
time_zone
;
CREATE
TABLE
time_zone_name
LIKE
mysql
.
time_zone_name
;
CREATE
TABLE
time_zone_transition
LIKE
mysql
.
time_zone_transition
;
...
...
@@ -61,6 +63,9 @@ SELECT COUNT(*) FROM time_zone_transition;
SELECT
COUNT
(
*
)
FROM
time_zone_transition_type
;
SELECT
COUNT
(
*
)
FROM
time_zone_leap_second
;
if
(
$is_embedded
)
{
--
replace_column
1
0
2
0
}
SELECT
@
wsrep_is_on
,
@
wsrep_cannot_replicate_tz
,
@
save_wsrep_on
,
@
save_sql_log_bin
,
@@
SQL_LOG_BIN
;
SELECT
g
.
VARIABLE_NAME
,
g
.
VARIABLE_VALUE
-
b
.
VARIABLE_VALUE
AS
diff
FROM
information_schema
.
global_status
g
...
...
@@ -95,6 +100,9 @@ SELECT COUNT(*) FROM time_zone_transition;
SELECT
COUNT
(
*
)
FROM
time_zone_transition_type
;
SELECT
COUNT
(
*
)
FROM
time_zone_leap_second
;
if
(
$is_embedded
)
{
--
replace_column
1
0
2
0
}
SELECT
@
wsrep_is_on
,
@
wsrep_cannot_replicate_tz
,
@
save_wsrep_on
,
@
save_sql_log_bin
,
@@
SQL_LOG_BIN
;
SELECT
g
.
VARIABLE_NAME
,
g
.
VARIABLE_VALUE
-
b
.
VARIABLE_VALUE
AS
diff
FROM
information_schema
.
global_status
g
...
...
@@ -127,6 +135,9 @@ SELECT COUNT(*) FROM time_zone_transition;
SELECT
COUNT
(
*
)
FROM
time_zone_transition_type
;
SELECT
COUNT
(
*
)
FROM
time_zone_leap_second
;
if
(
$is_embedded
)
{
--
replace_column
1
0
2
0
}
SELECT
@
wsrep_is_on
,
@
wsrep_cannot_replicate_tz
,
@
save_wsrep_on
,
@
save_sql_log_bin
,
@@
SQL_LOG_BIN
;
SELECT
g
.
VARIABLE_NAME
,
g
.
VARIABLE_VALUE
-
b
.
VARIABLE_VALUE
AS
diff
FROM
information_schema
.
global_status
g
...
...
@@ -159,6 +170,9 @@ SELECT COUNT(*) FROM time_zone_transition;
SELECT
COUNT
(
*
)
FROM
time_zone_transition_type
;
SELECT
COUNT
(
*
)
FROM
time_zone_leap_second
;
if
(
$is_embedded
)
{
--
replace_column
1
0
2
0
}
SELECT
@
wsrep_is_on
,
@
wsrep_cannot_replicate_tz
,
@
save_wsrep_on
,
@
save_sql_log_bin
,
@@
SQL_LOG_BIN
;
SELECT
g
.
VARIABLE_NAME
,
g
.
VARIABLE_VALUE
-
b
.
VARIABLE_VALUE
AS
diff
FROM
information_schema
.
global_status
g
...
...
@@ -191,6 +205,9 @@ SELECT COUNT(*) FROM time_zone_transition;
SELECT
COUNT
(
*
)
FROM
time_zone_transition_type
;
SELECT
COUNT
(
*
)
FROM
time_zone_leap_second
;
if
(
$is_embedded
)
{
--
replace_column
1
0
2
0
}
SELECT
@
wsrep_is_on
,
@
wsrep_cannot_replicate_tz
,
@
save_wsrep_on
,
@
save_sql_log_bin
,
@@
SQL_LOG_BIN
;
SELECT
g
.
VARIABLE_NAME
,
g
.
VARIABLE_VALUE
-
b
.
VARIABLE_VALUE
AS
diff
FROM
information_schema
.
global_status
g
...
...
mysql-test/suite/innodb/r/innodb-wl5980-debug.result
deleted
100644 → 0
View file @
891bf1d8
call mtr.add_suppression("Cannot find space id [0-9]+ in the tablespace memory cache");
call mtr.add_suppression("Cannot rename table 'test/t1' to 'test/t2' since the dictionary cache already contains 'test/t2'.");
#
# WL5980 Remote tablespace debug error injection tests.
#
CREATE TABLE t1 (a int KEY, b text) ENGINE=Innodb DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir' ;
INSERT INTO t1 VALUES (1, 'tablespace');
SELECT * FROM t1;
a b
1 tablespace
#
# Test the second injection point in fil_rename_tablespace().
# Make sure the table is useable after this failure.
#
SET @save_dbug=@@debug_dbug;
SET debug_dbug="+d,fil_rename_tablespace_failure_2";
RENAME TABLE t1 TO t2;
SET debug_dbug=@save_dbug;
INSERT INTO t1 VALUES (2, 'tablespace');
SELECT * FROM t1;
a b
1 tablespace
2 tablespace
#
# Cleanup
#
DROP TABLE t1;
mysql-test/suite/innodb/t/innodb-wl5980-debug.test
deleted
100644 → 0
View file @
891bf1d8
#
# This testcase is to check the various debug injection points
# to make sure error conditions react corectly and acheive
# better code coverage.
#
# Not supported in embedded
--
source
include
/
not_embedded
.
inc
--
source
include
/
have_debug
.
inc
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_symlink
.
inc
# These messages are expected in the log
call
mtr
.
add_suppression
(
"Cannot find space id [0-9]+ in the tablespace memory cache"
);
call
mtr
.
add_suppression
(
"Cannot rename table 'test/t1' to 'test/t2' since the dictionary cache already contains 'test/t2'."
);
# Set up some variables
LET
$MYSQL_DATA_DIR
=
`select @@datadir`
;
LET
$data_directory_clause
=
DATA
DIRECTORY
=
'$MYSQL_TMP_DIR/alt_dir'
;
--
enable_query_log
--
echo
#
--
echo
# WL5980 Remote tablespace debug error injection tests.
--
echo
#
--
replace_result
$MYSQL_TMP_DIR
MYSQL_TMP_DIR
eval
CREATE
TABLE
t1
(
a
int
KEY
,
b
text
)
ENGINE
=
Innodb
$data_directory_clause
;
INSERT
INTO
t1
VALUES
(
1
,
'tablespace'
);
SELECT
*
FROM
t1
;
--
echo
#
--
echo
# Test the second injection point in fil_rename_tablespace().
--
echo
# Make sure the table is useable after this failure.
--
echo
#
SET
@
save_dbug
=@@
debug_dbug
;
SET
debug_dbug
=
"+d,fil_rename_tablespace_failure_2"
;
--
disable_result_log
--
error
ER_ERROR_ON_RENAME
RENAME
TABLE
t1
TO
t2
;
--
enable_result_log
SET
debug_dbug
=@
save_dbug
;
INSERT
INTO
t1
VALUES
(
2
,
'tablespace'
);
SELECT
*
FROM
t1
;
--
echo
#
--
echo
# Cleanup
--
echo
#
DROP
TABLE
t1
;
--
rmdir
$MYSQL_TMP_DIR
/
alt_dir
/
test
--
rmdir
$MYSQL_TMP_DIR
/
alt_dir
mysql-test/suite/innodb/t/innodb_page_compressed.combinations
View file @
9810a4ec
[bzip2]
plugin-load-add=$PROVIDER_BZIP2_SO
[lz4]
plugin-load-add=$PROVIDER_LZ4_SO
[lzma]
plugin-load-add=$PROVIDER_LZMA_SO
[lzo]
plugin-load-add=$PROVIDER_LZO_SO
[snappy]
plugin-load-add=$PROVIDER_SNAPPY_SO
[zlib]
mysys/my_lockmem.c
View file @
9810a4ec
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 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
...
...
@@ -17,6 +18,7 @@
#include "mysys_priv.h"
#include "mysys_err.h"
#include "aligned.h"
#include <my_list.h>
#ifdef HAVE_MLOCK
...
...
@@ -39,7 +41,7 @@ uchar *my_malloc_lock(uint size,myf MyFlags)
DBUG_ENTER
(
"my_malloc_lock"
);
size
=
((
size
-
1
)
&
~
(
pagesize
-
1
))
+
pagesize
;
if
(
!
(
ptr
=
memalign
(
pagesize
,
size
)))
if
(
!
(
ptr
=
aligned_malloc
(
size
,
page
size
)))
{
if
(
MyFlags
&
(
MY_FAE
+
MY_WME
))
my_error
(
EE_OUTOFMEMORY
,
MYF
(
ME_BELL
+
ME_FATAL
),
size
);
...
...
@@ -91,7 +93,7 @@ void my_free_lock(uchar *ptr)
}
mysql_mutex_unlock
(
&
THR_LOCK_malloc
);
my_free
(
element
);
free
(
ptr
);
/* Free even if not locked */
aligned_free
(
ptr
);
/* Free even if not locked */
}
#endif
/* HAVE_MLOCK */
plugin/hashicorp_key_management/CMakeLists.txt
View file @
9810a4ec
...
...
@@ -14,7 +14,8 @@ MYSQL_ADD_PLUGIN(HASHICORP_KEY_MANAGEMENT
hashicorp_key_management_plugin.cc
LINK_LIBRARIES
${
CURL_LIBRARIES
}
CONFIG hashicorp_key_management.cnf
COMPONENT hashicorp-key-management
)
COMPONENT hashicorp-key-management
MODULE_ONLY
)
ADD_FEATURE_INFO
(
HASHICORP_KEY_MANAGEMENT
"ON"
"Hashicorp Key Management Plugin"
)
...
...
sql/table_cache.cc
View file @
9810a4ec
/* Copyright (c) 2000, 2012, Oracle and/or its affiliates.
Copyright (c) 2010, 20
11 Monty Program Ab
Copyright (c) 2010, 20
22, MariaDB Corporation.
Copyright (C) 2013 Sergey Vojtovich and MariaDB Foundation
This program is free software; you can redistribute it and/or modify
...
...
@@ -50,6 +50,7 @@
#include "lf.h"
#include "table.h"
#include "sql_base.h"
#include "aligned.h"
/** Configuration. */
...
...
@@ -122,6 +123,7 @@ struct Table_cache_instance
records, Share_free_tables::List (TABLE::prev and TABLE::next),
TABLE::in_use.
*/
alignas
(
CPU_LEVEL1_DCACHE_LINESIZE
)
mysql_mutex_t
LOCK_table_cache
;
I_P_List
<
TABLE
,
I_P_List_adapter
<
TABLE
,
&
TABLE
::
global_free_next
,
&
TABLE
::
global_free_prev
>
,
...
...
@@ -130,11 +132,10 @@ struct Table_cache_instance
ulong
records
;
uint
mutex_waits
;
uint
mutex_nowaits
;
/** Avoid false sharing between instances */
char
pad
[
CPU_LEVEL1_DCACHE_LINESIZE
];
Table_cache_instance
()
:
records
(
0
),
mutex_waits
(
0
),
mutex_nowaits
(
0
)
{
static_assert
(
!
(
sizeof
(
*
this
)
%
CPU_LEVEL1_DCACHE_LINESIZE
),
"alignment"
);
mysql_mutex_init
(
key_LOCK_table_cache
,
&
LOCK_table_cache
,
MY_MUTEX_INIT_FAST
);
}
...
...
@@ -146,6 +147,10 @@ struct Table_cache_instance
DBUG_ASSERT
(
records
==
0
);
}
static
void
*
operator
new
[](
size_t
size
)
{
return
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
}
static
void
operator
delete
[](
void
*
ptr
)
{
aligned_free
(
ptr
);
}
/**
Lock table cache mutex and check contention.
...
...
sql/tztime.cc
View file @
9810a4ec
...
...
@@ -2730,11 +2730,11 @@ static const char *trunc_tables_const=
"TRUNCATE TABLE time_zone_transition;
\n
"
"TRUNCATE TABLE time_zone_transition_type;
\n
"
;
static
const
char
*
wsrep_is_on
=
"select sum(
VARIABLE_NAME='wsrep_on' AND
SESSION_VALUE='ON')"
" from information_schema.SYSTEM_VARIABLES"
;
"select sum(SESSION_VALUE='ON')"
" from information_schema.SYSTEM_VARIABLES
WHERE VARIABLE_NAME='wsrep_on'
"
;
static
const
char
*
wsrep_cannot_replicate_tz
=
"select sum(
VARIABLE_NAME='wsrep_mode' and
GLOBAL_VALUE NOT LIKE @replicate_opt)"
" from information_schema.SYSTEM_VARIABLES"
;
"select sum(GLOBAL_VALUE NOT LIKE @replicate_opt)"
" from information_schema.SYSTEM_VARIABLES
WHERE VARIABLE_NAME='wsrep_mode'
"
;
int
main
(
int
argc
,
char
**
argv
)
...
...
storage/innobase/buf/buf0buf.cc
View file @
9810a4ec
...
...
@@ -1075,9 +1075,10 @@ inline const buf_block_t *buf_pool_t::chunk_t::not_freed() const
void
buf_pool_t
::
page_hash_table
::
create
(
ulint
n
)
{
n_cells
=
ut_find_prime
(
n
);
const
size_t
size
=
pad
(
n_cells
)
*
sizeof
*
array
;
void
*
v
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
memset
(
v
,
0
,
size
);
const
size_t
size
=
MY_ALIGN
(
pad
(
n_cells
)
*
sizeof
*
array
,
CPU_LEVEL1_DCACHE_LINESIZE
);
void
*
v
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
memset_aligned
<
CPU_LEVEL1_DCACHE_LINESIZE
>
(
v
,
0
,
size
);
array
=
static_cast
<
hash_chain
*>
(
v
);
}
...
...
@@ -3224,6 +3225,7 @@ static buf_block_t *buf_page_create_low(page_id_t page_id, ulint zip_size,
if
(
UNIV_UNLIKELY
(
id
!=
page_id
))
{
ut_ad
(
id
.
is_corrupted
());
bpage
->
lock
.
x_unlock
();
goto
retry
;
}
mysql_mutex_lock
(
&
buf_pool
.
mutex
);
...
...
storage/innobase/fil/fil0fil.cc
View file @
9810a4ec
...
...
@@ -125,16 +125,6 @@ bool fil_space_t::try_to_close(bool print_info)
return
false
;
}
/** Rename a single-table tablespace.
The tablespace must exist in the memory cache.
@param[in] id tablespace identifier
@param[in] old_path old file name
@param[in] new_path_in new file name,
or NULL if it is located in the normal data directory
@return true if success */
static
bool
fil_rename_tablespace
(
uint32_t
id
,
const
char
*
old_path
,
const
char
*
new_path_in
);
/*
IMPLEMENTATION OF THE TABLESPACE MEMORY CACHE
=============================================
...
...
@@ -1475,40 +1465,6 @@ inline void mtr_t::log_file_op(mfile_type_t type, uint32_t space_id,
m_log
.
push
(
reinterpret_cast
<
const
byte
*>
(
path
),
uint32_t
(
len
));
}
/** Write redo log for renaming a file.
@param[in] space_id tablespace id
@param[in] old_name tablespace file name
@param[in] new_name tablespace file name after renaming
@param[in,out] mtr mini-transaction */
static
void
fil_name_write_rename_low
(
uint32_t
space_id
,
const
char
*
old_name
,
const
char
*
new_name
,
mtr_t
*
mtr
)
{
ut_ad
(
!
is_predefined_tablespace
(
space_id
));
mtr
->
log_file_op
(
FILE_RENAME
,
space_id
,
old_name
,
new_name
);
}
static
void
fil_name_commit_durable
(
mtr_t
*
mtr
)
{
log_sys
.
latch
.
wr_lock
(
SRW_LOCK_CALL
);
auto
lsn
=
mtr
->
commit_files
();
log_sys
.
latch
.
wr_unlock
();
mtr
->
flag_wr_unlock
();
log_write_up_to
(
lsn
,
true
);
}
/** Write redo log for renaming a file.
@param[in] space_id tablespace id
@param[in] old_name tablespace file name
@param[in] new_name tablespace file name after renaming */
static
void
fil_name_write_rename
(
uint32_t
space_id
,
const
char
*
old_name
,
const
char
*
new_name
)
{
mtr_t
mtr
;
mtr
.
start
();
fil_name_write_rename_low
(
space_id
,
old_name
,
new_name
,
&
mtr
);
fil_name_commit_durable
(
&
mtr
);
}
/** Write FILE_MODIFY for a file.
@param[in] space_id tablespace id
@param[in] name tablespace file name
...
...
@@ -1636,40 +1592,8 @@ pfs_os_file_t fil_delete_tablespace(uint32_t id)
mtr_t
mtr
;
mtr
.
start
();
mtr
.
log_file_op
(
FILE_DELETE
,
id
,
space
->
chain
.
start
->
name
);
fil_name_commit_durable
(
&
mtr
);
/* Remove any additional files. */
if
(
char
*
cfg_name
=
fil_make_filepath
(
space
->
chain
.
start
->
name
,
fil_space_t
::
name_type
{},
CFG
,
false
))
{
os_file_delete_if_exists
(
innodb_data_file_key
,
cfg_name
,
nullptr
);
ut_free
(
cfg_name
);
}
if
(
FSP_FLAGS_HAS_DATA_DIR
(
space
->
flags
))
RemoteDatafile
::
delete_link_file
(
space
->
name
());
/* Remove the directory entry. The file will actually be deleted
when our caller closes the handle. */
os_file_delete
(
innodb_data_file_key
,
space
->
chain
.
start
->
name
);
mysql_mutex_lock
(
&
fil_system
.
mutex
);
/* Sanity checks after reacquiring fil_system.mutex */
ut_ad
(
space
==
fil_space_get_by_id
(
id
));
ut_ad
(
!
space
->
referenced
());
ut_ad
(
space
->
is_stopping
());
ut_ad
(
UT_LIST_GET_LEN
(
space
->
chain
)
==
1
);
/* Detach the file handle. */
handle
=
fil_system
.
detach
(
space
,
true
);
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
log_sys
.
latch
.
wr_lock
(
SRW_LOCK_CALL
);
if
(
space
->
max_lsn
)
{
ut_d
(
space
->
max_lsn
=
0
);
fil_system
.
named_spaces
.
remove
(
*
space
);
}
log_sys
.
latch
.
wr_unlock
();
handle
=
space
->
chain
.
start
->
handle
;
mtr
.
commit_file
(
*
space
,
nullptr
);
fil_space_free_low
(
space
);
}
...
...
@@ -1794,120 +1718,55 @@ char *fil_make_filepath(const char* path, const table_name_t name,
dberr_t
fil_space_t
::
rename
(
const
char
*
path
,
bool
log
,
bool
replace
)
{
ut_ad
(
UT_LIST_GET_LEN
(
chain
)
==
1
);
ut_ad
(
!
is_
system
_tablespace
(
id
));
ut_ad
(
!
is_
predefined
_tablespace
(
id
));
const
char
*
old_path
=
chain
.
start
->
name
;
ut_ad
(
strchr
(
old_path
,
'/'
));
ut_ad
(
strchr
(
path
,
'/'
));
if
(
!
strcmp
(
path
,
old_path
))
return
DB_SUCCESS
;
if
(
log
)
if
(
!
log
)
{
bool
exists
=
false
;
os_file_type_t
ftype
;
if
(
os_file_status
(
old_path
,
&
exists
,
&
ftype
)
&&
!
exists
)
{
ib
::
error
()
<<
"Cannot rename '"
<<
old_path
<<
"' to '"
<<
path
<<
"' because the source file does not exist."
;
return
DB_TABLESPACE_NOT_FOUND
;
}
exists
=
false
;
if
(
replace
);
else
if
(
!
os_file_status
(
path
,
&
exists
,
&
ftype
)
||
exists
)
{
ib
::
error
()
<<
"Cannot rename '"
<<
old_path
<<
"' to '"
<<
path
<<
"' because the target file exists."
;
return
DB_TABLESPACE_EXISTS
;
}
fil_name_write_rename
(
id
,
old_path
,
path
);
if
(
!
os_file_rename
(
innodb_data_file_key
,
old_path
,
path
))
return
DB_ERROR
;
mysql_mutex_lock
(
&
fil_system
.
mutex
);
ut_free
(
chain
.
start
->
name
);
chain
.
start
->
name
=
mem_strdup
(
path
);
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
return
DB_SUCCESS
;
}
return
fil_rename_tablespace
(
id
,
old_path
,
path
)
?
DB_SUCCESS
:
DB_ERROR
;
}
/** Rename a single-table tablespace.
The tablespace must exist in the memory cache.
@param[in] id tablespace identifier
@param[in] old_path old file name
@param[in] new_path_in new file name,
or NULL if it is located in the normal data directory
@return true if success */
static
bool
fil_rename_tablespace
(
uint32_t
id
,
const
char
*
old_path
,
const
char
*
new_path_in
)
{
fil_space_t
*
space
;
fil_node_t
*
node
;
ut_a
(
id
!=
0
);
mysql_mutex_lock
(
&
fil_system
.
mutex
);
space
=
fil_space_get_by_id
(
id
);
if
(
space
==
NULL
)
{
ib
::
error
()
<<
"Cannot find space id "
<<
id
<<
" in the tablespace memory cache, though the file '"
<<
old_path
<<
"' in a rename operation should have that id."
;
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
return
(
false
);
}
/* The following code must change when InnoDB supports
multiple datafiles per tablespace. */
ut_a
(
UT_LIST_GET_LEN
(
space
->
chain
)
==
1
);
node
=
UT_LIST_GET_FIRST
(
space
->
chain
);
space
->
reacquire
();
bool
exists
=
false
;
os_file_type_t
ftype
;
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
char
*
new_file_name
=
mem_strdup
(
new_path_in
);
char
*
old_file_name
=
node
->
name
;
ut_ad
(
strchr
(
old_file_name
,
'/'
));
ut_ad
(
strchr
(
new_file_name
,
'/'
));
if
(
!
recv_recovery_is_on
())
{
log_sys
.
latch
.
wr_lock
(
SRW_LOCK_CALL
);
}
/* log_sys.latch is above fil_system.mutex in the latching order */
#ifndef SUX_LOCK_GENERIC
ut_ad
(
log_sys
.
latch
.
is_write_locked
()
||
srv_operation
==
SRV_OPERATION_RESTORE_DELTA
);
#endif
mysql_mutex_lock
(
&
fil_system
.
mutex
);
space
->
release
();
ut_ad
(
node
->
name
==
old_file_name
);
bool
success
;
DBUG_EXECUTE_IF
(
"fil_rename_tablespace_failure_2"
,
goto
skip_second_rename
;
);
success
=
os_file_rename
(
innodb_data_file_key
,
old_file_name
,
new_file_name
);
DBUG_EXECUTE_IF
(
"fil_rename_tablespace_failure_2"
,
skip_second_rename:
success
=
false
;
);
ut_ad
(
node
->
name
==
old_file_name
);
if
(
success
)
{
node
->
name
=
new_file_name
;
}
else
{
old_file_name
=
new_file_name
;
}
if
(
!
recv_recovery_is_on
())
{
log_sys
.
latch
.
wr_unlock
();
}
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
/* Check upfront if the rename operation might succeed, because we
must durably write redo log before actually attempting to execute
the rename in the file system. */
if
(
os_file_status
(
old_path
,
&
exists
,
&
ftype
)
&&
!
exists
)
{
sql_print_error
(
"InnoDB: Cannot rename '%s' to '%s'"
" because the source file does not exist."
,
old_path
,
path
);
return
DB_TABLESPACE_NOT_FOUND
;
}
ut_free
(
old_file_name
);
exists
=
false
;
if
(
replace
);
else
if
(
!
os_file_status
(
path
,
&
exists
,
&
ftype
)
||
exists
)
{
sql_print_error
(
"InnoDB: Cannot rename '%s' to '%s'"
" because the target file exists."
,
old_path
,
path
);
return
DB_TABLESPACE_EXISTS
;
}
return
(
success
);
mtr_t
mtr
;
mtr
.
start
();
mtr
.
log_file_op
(
FILE_RENAME
,
id
,
old_path
,
path
);
return
mtr
.
commit_file
(
*
this
,
path
)
?
DB_SUCCESS
:
DB_ERROR
;
}
/** Create a tablespace file.
...
...
@@ -1953,7 +1812,11 @@ fil_ibd_create(
mtr
.
start
();
mtr
.
log_file_op
(
FILE_CREATE
,
space_id
,
path
);
fil_name_commit_durable
(
&
mtr
);
log_sys
.
latch
.
wr_lock
(
SRW_LOCK_CALL
);
auto
lsn
=
mtr
.
commit_files
();
log_sys
.
latch
.
wr_unlock
();
mtr
.
flag_wr_unlock
();
log_write_up_to
(
lsn
,
true
);
ulint
type
;
static_assert
(((
UNIV_ZIP_SIZE_MIN
>>
1
)
<<
3
)
==
4096
,
...
...
storage/innobase/include/buf0buf.h
View file @
9810a4ec
...
...
@@ -329,27 +329,6 @@ bool buf_page_is_corrupted(bool check_lsn, const byte *read_buf,
uint32_t
fsp_flags
)
MY_ATTRIBUTE
((
warn_unused_result
));
inline
void
*
aligned_malloc
(
size_t
size
,
size_t
align
)
{
#ifdef _MSC_VER
return
_aligned_malloc
(
size
,
align
);
#else
void
*
result
;
if
(
posix_memalign
(
&
result
,
align
,
size
))
result
=
NULL
;
return
result
;
#endif
}
inline
void
aligned_free
(
void
*
ptr
)
{
#ifdef _MSC_VER
_aligned_free
(
ptr
);
#else
free
(
ptr
);
#endif
}
/** Read the key version from the page. In full crc32 format,
key version is stored at {0-3th} bytes. In other format, it is
stored in 26th position.
...
...
storage/innobase/include/mtr0mtr.h
View file @
9810a4ec
...
...
@@ -102,6 +102,12 @@ struct mtr_t {
@param space tablespace that is being shrunk */
ATTRIBUTE_COLD
void
commit_shrink
(
fil_space_t
&
space
);
/** Commit a mini-transaction that is deleting or renaming a file.
@param space tablespace that is being renamed or deleted
@param name new file name (nullptr=the file will be deleted)
@return whether the operation succeeded */
ATTRIBUTE_COLD
bool
commit_file
(
fil_space_t
&
space
,
const
char
*
name
);
/** Commit a mini-transaction that did not modify any pages,
but generated some redo log on a higher level, such as
FILE_MODIFY records and an optional FILE_CHECKPOINT marker.
...
...
storage/innobase/include/univ.i
View file @
9810a4ec
...
...
@@ -48,6 +48,7 @@ support cross-platform development and expose comonly used SQL names. */
#
include
<
my_global
.
h
>
#
include
"my_counter.h"
#
include
"aligned.h"
#
include
<
m_string
.
h
>
#
include
<
mysqld_error
.
h
>
...
...
storage/innobase/include/ut0pool.h
View file @
9810a4ec
...
...
@@ -64,15 +64,8 @@ struct Pool {
ut_a
(
m_start
==
0
);
#ifdef _MSC_VER
m_start
=
static_cast
<
Element
*>
(
_aligned_malloc
(
m_size
,
CPU_LEVEL1_DCACHE_LINESIZE
));
#else
void
*
start
;
ut_a
(
!
posix_memalign
(
&
start
,
CPU_LEVEL1_DCACHE_LINESIZE
,
m_size
));
m_start
=
static_cast
<
Element
*>
(
start
);
#endif
aligned_malloc
(
m_size
,
CPU_LEVEL1_DCACHE_LINESIZE
));
memset_aligned
<
CPU_LEVEL1_DCACHE_LINESIZE
>
(
m_start
,
0
,
m_size
);
...
...
storage/innobase/lock/lock0lock.cc
View file @
9810a4ec
...
...
@@ -75,9 +75,10 @@ struct TableLockGetNode
void
lock_sys_t
::
hash_table
::
create
(
ulint
n
)
{
n_cells
=
ut_find_prime
(
n
);
const
size_t
size
=
pad
(
n_cells
)
*
sizeof
*
array
;
void
*
v
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
memset
(
v
,
0
,
size
);
const
size_t
size
=
MY_ALIGN
(
pad
(
n_cells
)
*
sizeof
*
array
,
CPU_LEVEL1_DCACHE_LINESIZE
);
void
*
v
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
memset_aligned
<
CPU_LEVEL1_DCACHE_LINESIZE
>
(
v
,
0
,
size
);
array
=
static_cast
<
hash_cell_t
*>
(
v
);
}
...
...
@@ -87,9 +88,10 @@ void lock_sys_t::hash_table::resize(ulint n)
{
ut_ad
(
lock_sys
.
is_writer
());
ulint
new_n_cells
=
ut_find_prime
(
n
);
const
size_t
size
=
pad
(
new_n_cells
)
*
sizeof
*
array
;
void
*
v
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
memset
(
v
,
0
,
size
);
const
size_t
size
=
MY_ALIGN
(
pad
(
new_n_cells
)
*
sizeof
*
array
,
CPU_LEVEL1_DCACHE_LINESIZE
);
void
*
v
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
memset_aligned
<
CPU_LEVEL1_DCACHE_LINESIZE
>
(
v
,
0
,
size
);
hash_cell_t
*
new_array
=
static_cast
<
hash_cell_t
*>
(
v
);
for
(
auto
i
=
pad
(
n_cells
);
i
--
;
)
...
...
storage/innobase/mtr/mtr0mtr.cc
View file @
9810a4ec
...
...
@@ -888,6 +888,112 @@ void mtr_t::commit_shrink(fil_space_t &space)
release_resources
();
}
/** Commit a mini-transaction that is deleting or renaming a file.
@param space tablespace that is being renamed or deleted
@param name new file name (nullptr=the file will be deleted)
@return whether the operation succeeded */
bool
mtr_t
::
commit_file
(
fil_space_t
&
space
,
const
char
*
name
)
{
ut_ad
(
is_active
());
ut_ad
(
!
is_inside_ibuf
());
ut_ad
(
!
high_level_read_only
);
ut_ad
(
m_modifications
);
ut_ad
(
!
m_made_dirty
);
ut_ad
(
!
recv_recovery_is_on
());
ut_ad
(
m_log_mode
==
MTR_LOG_ALL
);
ut_ad
(
UT_LIST_GET_LEN
(
space
.
chain
)
==
1
);
ut_ad
(
!
m_latch_ex
);
m_latch_ex
=
true
;
log_write_and_flush_prepare
();
log_sys
.
latch
.
wr_lock
(
SRW_LOCK_CALL
);
size_t
size
=
m_log
.
size
()
+
5
;
if
(
log_sys
.
is_encrypted
())
{
/* We will not encrypt any FILE_ records, but we will reserve
a nonce at the end. */
size
+=
8
;
m_commit_lsn
=
log_sys
.
get_lsn
();
}
else
m_commit_lsn
=
0
;
m_crc
=
0
;
m_log
.
for_each_block
([
this
](
const
mtr_buf_t
::
block_t
*
b
)
{
m_crc
=
my_crc32c
(
m_crc
,
b
->
begin
(),
b
->
used
());
return
true
;
});
finish_write
(
size
);
if
(
!
name
&&
space
.
max_lsn
)
{
ut_d
(
space
.
max_lsn
=
0
);
fil_system
.
named_spaces
.
remove
(
space
);
}
/* Block log_checkpoint(). */
mysql_mutex_lock
(
&
buf_pool
.
flush_list_mutex
);
/* Durably write the log for the file system operation. */
log_write_and_flush
();
log_sys
.
latch
.
wr_unlock
();
m_latch_ex
=
false
;
char
*
old_name
=
space
.
chain
.
start
->
name
;
bool
success
;
if
(
name
)
{
success
=
os_file_rename
(
innodb_data_file_key
,
old_name
,
name
);
if
(
success
)
{
mysql_mutex_lock
(
&
fil_system
.
mutex
);
space
.
chain
.
start
->
name
=
mem_strdup
(
name
);
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
ut_free
(
old_name
);
}
}
else
{
/* Remove any additional files. */
if
(
char
*
cfg_name
=
fil_make_filepath
(
old_name
,
fil_space_t
::
name_type
{},
CFG
,
false
))
{
os_file_delete_if_exists
(
innodb_data_file_key
,
cfg_name
,
nullptr
);
ut_free
(
cfg_name
);
}
if
(
FSP_FLAGS_HAS_DATA_DIR
(
space
.
flags
))
RemoteDatafile
::
delete_link_file
(
space
.
name
());
/* Remove the directory entry. The file will actually be deleted
when our caller closes the handle. */
os_file_delete
(
innodb_data_file_key
,
old_name
);
mysql_mutex_lock
(
&
fil_system
.
mutex
);
/* Sanity checks after reacquiring fil_system.mutex */
ut_ad
(
&
space
==
fil_space_get_by_id
(
space
.
id
));
ut_ad
(
!
space
.
referenced
());
ut_ad
(
space
.
is_stopping
());
fil_system
.
detach
(
&
space
,
true
);
mysql_mutex_unlock
(
&
fil_system
.
mutex
);
success
=
true
;
}
mysql_mutex_unlock
(
&
buf_pool
.
flush_list_mutex
);
ut_d
(
m_log
.
erase
());
release_resources
();
return
success
;
}
/** Commit a mini-transaction that did not modify any pages,
but generated some redo log on a higher level, such as
FILE_MODIFY records and an optional FILE_CHECKPOINT marker.
...
...
storage/perfschema/pfs_digest.cc
View file @
9810a4ec
/* Copyright (c) 2008, 2021, Oracle and/or its affiliates.
Copyright (c) 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, version 2.0,
...
...
@@ -56,7 +57,7 @@ bool flag_statements_digest= true;
Current index in Stat array where new record is to be inserted.
index 0 is reserved for "all else" case when entire array is full.
*/
static
PFS_ALIGNED
PFS_cacheline_uint32
digest_monotonic_index
;
PFS_ALIGNED
static
PFS_cacheline_uint32
digest_monotonic_index
;
bool
digest_full
=
false
;
...
...
storage/perfschema/pfs_events_stages.h
View file @
9810a4ec
/* Copyright (c) 2010, 2021, Oracle and/or its affiliates.
Copyright (c) 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, version 2.0,
...
...
@@ -49,7 +50,7 @@ extern bool flag_events_stages_history;
extern
bool
flag_events_stages_history_long
;
extern
bool
events_stages_history_long_full
;
extern
PFS_ALIGNED
PFS_cacheline_uint32
events_stages_history_long_index
;
PFS_ALIGNED
extern
PFS_cacheline_uint32
events_stages_history_long_index
;
extern
PFS_events_stages
*
events_stages_history_long_array
;
extern
ulong
events_stages_history_long_size
;
...
...
storage/perfschema/pfs_events_statements.h
View file @
9810a4ec
/* Copyright (c) 2010, 2021, Oracle and/or its affiliates.
Copyright (c) 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, version 2.0,
...
...
@@ -132,7 +133,7 @@ extern bool flag_events_statements_history;
extern
bool
flag_events_statements_history_long
;
extern
bool
events_statements_history_long_full
;
extern
PFS_ALIGNED
PFS_cacheline_uint32
events_statements_history_long_index
;
PFS_ALIGNED
extern
PFS_cacheline_uint32
events_statements_history_long_index
;
extern
PFS_events_statements
*
events_statements_history_long_array
;
extern
size_t
events_statements_history_long_size
;
...
...
storage/perfschema/pfs_events_waits.h
View file @
9810a4ec
/* Copyright (c) 2008, 2021, Oracle and/or its affiliates..
Copyright (c) 2017, 201
9
, MariaDB Corporation.
Copyright (c) 2017, 201
2
, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
...
...
@@ -127,7 +127,7 @@ extern bool flag_global_instrumentation;
extern
bool
flag_thread_instrumentation
;
extern
bool
events_waits_history_long_full
;
extern
PFS_ALIGNED
PFS_cacheline_uint32
events_waits_history_long_index
;
PFS_ALIGNED
extern
PFS_cacheline_uint32
events_waits_history_long_index
;
extern
PFS_events_waits
*
events_waits_history_long_array
;
extern
ulong
events_waits_history_long_size
;
...
...
storage/perfschema/pfs_global.cc
View file @
9810a4ec
/* Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights
reserved.
Copyright (c) 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, version 2.0,
...
...
@@ -30,6 +31,8 @@
#include "pfs_global.h"
#include "pfs_builtin_memory.h"
#include "log.h"
#include "aligned.h"
#include "assume_aligned.h"
#include <stdlib.h>
#include <string.h>
...
...
@@ -46,9 +49,6 @@
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_MALLOC_H
#include <malloc.h>
#endif
bool
pfs_initialized
=
false
;
...
...
@@ -62,41 +62,16 @@ void *pfs_malloc(PFS_builtin_memory_class *klass, size_t size, myf flags)
assert
(
klass
!=
NULL
);
assert
(
size
>
0
);
void
*
ptr
=
NULL
;
const
size_t
aligned_size
=
MY_ALIGN
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
)
;
#ifdef PFS_ALIGNEMENT
#ifdef HAVE_POSIX_MEMALIGN
/* Linux */
if
(
unlikely
(
posix_memalign
(
&
ptr
,
PFS_ALIGNEMENT
,
size
)))
return
NULL
;
#else
#ifdef HAVE_MEMALIGN
/* Solaris */
ptr
=
memalign
(
PFS_ALIGNEMENT
,
size
);
if
(
unlikely
(
ptr
==
NULL
))
return
NULL
;
#else
#ifdef HAVE_ALIGNED_MALLOC
/* Windows */
ptr
=
_aligned_malloc
(
size
,
PFS_ALIGNEMENT
);
void
*
ptr
=
aligned_malloc
(
aligned_size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
if
(
unlikely
(
ptr
==
NULL
))
return
NULL
;
#else
#error "Missing implementation for PFS_ALIGNENT"
#endif
/* HAVE_ALIGNED_MALLOC */
#endif
/* HAVE_MEMALIGN */
#endif
/* HAVE_POSIX_MEMALIGN */
#else
/* PFS_ALIGNMENT */
/* Everything else */
ptr
=
malloc
(
size
);
if
(
unlikely
(
ptr
==
NULL
))
return
NULL
;
#endif
klass
->
count_alloc
(
size
);
if
(
flags
&
MY_ZEROFILL
)
memset
(
ptr
,
0
,
size
);
memset
_aligned
<
CPU_LEVEL1_DCACHE_LINESIZE
>
(
ptr
,
0
,
aligned_
size
);
return
ptr
;
}
...
...
@@ -105,24 +80,7 @@ void pfs_free(PFS_builtin_memory_class *klass, size_t size, void *ptr)
if
(
ptr
==
NULL
)
return
;
#ifdef HAVE_POSIX_MEMALIGN
/* Allocated with posix_memalign() */
free
(
ptr
);
#else
#ifdef HAVE_MEMALIGN
/* Allocated with memalign() */
free
(
ptr
);
#else
#ifdef HAVE_ALIGNED_MALLOC
/* Allocated with _aligned_malloc() */
_aligned_free
(
ptr
);
#else
/* Allocated with malloc() */
free
(
ptr
);
#endif
/* HAVE_ALIGNED_MALLOC */
#endif
/* HAVE_MEMALIGN */
#endif
/* HAVE_POSIX_MEMALIGN */
aligned_free
(
ptr
);
klass
->
count_free
(
size
);
}
...
...
storage/perfschema/pfs_global.h
View file @
9810a4ec
/* Copyright (c) 2008, 2021, Oracle and/or its affiliates.
Copyright (c) 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, version 2.0,
...
...
@@ -35,23 +36,7 @@ extern bool pfs_initialized;
/** Total memory allocated by the performance schema, in bytes. */
extern
size_t
pfs_allocated_memory
;
#if defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_MEMALIGN) || defined(HAVE_ALIGNED_MALLOC)
#define PFS_ALIGNEMENT CPU_LEVEL1_DCACHE_LINESIZE
#define PFS_ALIGNED MY_ALIGNED(PFS_ALIGNEMENT)
#else
/*
Known platforms that do not provide aligned memory:
- MacOSX Darwin (osx10.5)
For these platforms, compile without the alignment optimization.
*/
#define PFS_ALIGNED
#endif
/* HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_ALIGNED_MALLOC */
#ifdef CPU_LEVEL1_DCACHE_LINESIZE
#define PFS_CACHE_LINE_SIZE CPU_LEVEL1_DCACHE_LINESIZE
#else
#define PFS_CACHE_LINE_SIZE 128
#endif
#define PFS_ALIGNED alignas(CPU_LEVEL1_DCACHE_LINESIZE)
/**
A uint32 variable, guaranteed to be alone in a CPU cache line.
...
...
@@ -60,7 +45,7 @@ extern size_t pfs_allocated_memory;
struct
PFS_cacheline_uint32
{
uint32
m_u32
;
char
m_full_cache_line
[
PFS_CACHE_LINE_
SIZE
-
sizeof
(
uint32
)];
char
m_full_cache_line
[
CPU_LEVEL1_DCACHE_LINE
SIZE
-
sizeof
(
uint32
)];
PFS_cacheline_uint32
()
:
m_u32
(
0
)
...
...
@@ -74,7 +59,7 @@ struct PFS_cacheline_uint32
struct
PFS_cacheline_uint64
{
uint64
m_u64
;
char
m_full_cache_line
[
PFS_CACHE_LINE_
SIZE
-
sizeof
(
uint64
)];
char
m_full_cache_line
[
CPU_LEVEL1_DCACHE_LINE
SIZE
-
sizeof
(
uint64
)];
PFS_cacheline_uint64
()
:
m_u64
(
0
)
...
...
storage/perfschema/pfs_host.cc
View file @
9810a4ec
/* Copyright (c) 2010, 2021, Oracle and/or its affiliates.
Copyright (c) 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, version 2.0,
...
...
@@ -135,7 +136,7 @@ static void set_host_key(PFS_host_key *key,
PFS_host
*
find_or_create_host
(
PFS_thread
*
thread
,
const
char
*
hostname
,
uint
hostname_length
)
{
static
PFS_ALIGNED
PFS_cacheline_uint32
monotonic
;
PFS_ALIGNED
static
PFS_cacheline_uint32
monotonic
;
LF_PINS
*
pins
=
get_host_hash_pins
(
thread
);
if
(
unlikely
(
pins
==
NULL
))
...
...
storage/perfschema/pfs_instr.cc
View file @
9810a4ec
/* Copyright (c) 2008, 2021, Oracle and/or its affiliates.
Copyright (c) 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, version 2.0,
...
...
@@ -88,7 +89,7 @@ PFS_stage_stat *global_instr_class_stages_array= NULL;
PFS_statement_stat
*
global_instr_class_statements_array
=
NULL
;
PFS_memory_stat
*
global_instr_class_memory_array
=
NULL
;
static
PFS_ALIGNED
PFS_cacheline_uint64
thread_internal_id_counter
;
PFS_ALIGNED
static
PFS_cacheline_uint64
thread_internal_id_counter
;
/** Hash table for instrumented files. */
LF_HASH
pfs_filename_hash
;
...
...
storage/perfschema/unittest/stub_pfs_global.h
View file @
9810a4ec
...
...
@@ -25,9 +25,7 @@
#include <my_sys.h>
#include <pfs_global.h>
#include <string.h>
#ifdef HAVE_MEMALIGN
# include <malloc.h>
#endif
#include "aligned.h"
bool
pfs_initialized
=
false
;
size_t
pfs_allocated_memory_size
=
0
;
...
...
@@ -49,17 +47,7 @@ void *pfs_malloc(PFS_builtin_memory_class *klass, size_t size, myf)
if
(
--
stub_alloc_fails_after_count
<=
0
)
return
NULL
;
#ifndef PFS_ALIGNEMENT
void
*
ptr
=
malloc
(
size
);
#elif defined HAVE_MEMALIGN
void
*
ptr
=
memalign
(
PFS_ALIGNEMENT
,
size
);
#elif defined HAVE_ALIGNED_MALLOC
void
*
ptr
=
_aligned_malloc
(
size
,
PFS_ALIGNEMENT
);
#else
void
*
ptr
;
if
(
posix_memalign
(
&
ptr
,
PFS_ALIGNEMENT
,
size
))
ptr
=
NULL
;
#endif
void
*
ptr
=
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
if
(
ptr
!=
NULL
)
memset
(
ptr
,
0
,
size
);
return
ptr
;
...
...
storage/spider/mysql-test/spider/r/variable_deprecation.result
View file @
9810a4ec
...
...
@@ -34,7 +34,7 @@ Warnings:
Warning 1287 '@@spider_internal_limit' is deprecated and will be removed in a future release
SHOW VARIABLES LIKE "spider_internal_limit";
Variable_name Value
spider_internal_limit
9223372032559808513
spider_internal_limit
1
CREATE TABLE tbl_a (a INT) ENGINE=Spider COMMENT='ilm "1"';
Warnings:
Warning 1287 The table parameter 'ilm' is deprecated and will be removed in a future release
...
...
storage/spider/spd_param.cc
View file @
9810a4ec
This diff is collapsed.
Click to expand it.
tpool/tpool_generic.cc
View file @
9810a4ec
...
...
@@ -33,6 +33,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 - 1301 USA*/
#include <my_dbug.h>
#include <thr_timer.h>
#include <stdlib.h>
#include "aligned.h"
namespace
tpool
{
...
...
@@ -180,23 +181,13 @@ struct alignas(CPU_LEVEL1_DCACHE_LINESIZE) worker_data
{}
/*Define custom new/delete because of overaligned structure. */
void
*
operator
new
(
size_t
size
)
static
void
*
operator
new
(
size_t
size
)
{
#ifdef _WIN32
return
_aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
#else
void
*
ptr
;
int
ret
=
posix_memalign
(
&
ptr
,
CPU_LEVEL1_DCACHE_LINESIZE
,
size
);
return
ret
?
0
:
ptr
;
#endif
return
aligned_malloc
(
size
,
CPU_LEVEL1_DCACHE_LINESIZE
);
}
void
operator
delete
(
void
*
p
)
static
void
operator
delete
(
void
*
p
)
{
#ifdef _WIN32
_aligned_free
(
p
);
#else
free
(
p
);
#endif
aligned_free
(
p
);
}
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment