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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
9c6482af
Commit
9c6482af
authored
Mar 09, 2010
by
Alexander Nozdrin
Browse files
Options
Browse Files
Download
Plain Diff
Auto-merge from mysql-next-mr-bugfixing.
parents
e37d1caf
7b67a275
Changes
13
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
821 additions
and
121 deletions
+821
-121
cmake/build_configurations/mysql_release.cmake
cmake/build_configurations/mysql_release.cmake
+2
-2
cmake/os/Windows.cmake
cmake/os/Windows.cmake
+2
-2
include/mysql/psi/mysql_thread.h
include/mysql/psi/mysql_thread.h
+265
-1
mysql-test/lib/v1/mysql-test-run.pl
mysql-test/lib/v1/mysql-test-run.pl
+51
-64
mysql-test/suite/perfschema/r/dml_setup_instruments.result
mysql-test/suite/perfschema/r/dml_setup_instruments.result
+2
-1
mysql-test/suite/perfschema/r/pfs_upgrade.result
mysql-test/suite/perfschema/r/pfs_upgrade.result
+153
-0
mysql-test/suite/perfschema/t/pfs_upgrade.test
mysql-test/suite/perfschema/t/pfs_upgrade.test
+137
-0
scripts/mysql_system_tables.sql
scripts/mysql_system_tables.sql
+79
-5
sql/mdl.cc
sql/mdl.cc
+90
-37
sql/mdl.h
sql/mdl.h
+5
-5
storage/innobase/CMakeLists.txt
storage/innobase/CMakeLists.txt
+1
-1
storage/perfschema/pfs_instr.cc
storage/perfschema/pfs_instr.cc
+21
-1
storage/perfschema/unittest/pfs-t.cc
storage/perfschema/unittest/pfs-t.cc
+13
-2
No files found.
cmake/build_configurations/mysql_release.cmake
View file @
9c6482af
...
...
@@ -151,7 +151,7 @@ IF(UNIX)
ENDIF
()
IF
(
CMAKE_C_COMPILER_ID MATCHES
"SunPro"
)
IF
(
CMAKE_SYSTEM_PROCESSOR MATCHES
"i386"
)
IF
(
CMAKE_SIZEOF_VOIDP EQUAL 4
)
IF
(
CMAKE_SIZEOF_VOID
_
P EQUAL 4
)
# Solaris x86
SET
(
CMAKE_C_FLAGS_RELWITHDEBINFO
"-g -xO2 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic"
)
...
...
@@ -165,7 +165,7 @@ IF(UNIX)
"-g0 -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -features=no%except -xlibmil -xlibmopt -xtarget=generic"
)
ENDIF
()
ELSE
()
IF
(
CMAKE_SIZEOF_VOIDP EQUAL 4
)
IF
(
CMAKE_SIZEOF_VOID
_
P EQUAL 4
)
# Solaris sparc 32 bit
SET
(
CMAKE_C_FLAGS_RELWITHDEBINFO
"-g -xO3 -Xa -xstrconst -mt -xarch=sparc"
)
SET
(
CMAKE_CXX_FLAGS_RELWITHDEBINFO
"-g0 -xO3 -noex -mt -xarch=sparc"
)
...
...
cmake/os/Windows.cmake
View file @
9c6482af
...
...
@@ -56,7 +56,7 @@ ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501")
ADD_DEFINITIONS
(
"-DWIN32_LEAN_AND_MEAN"
)
# Adjust compiler and linker flags
IF
(
MINGW AND CMAKE_SIZEOF_VOIDP EQUAL 4
)
IF
(
MINGW AND CMAKE_SIZEOF_VOID
_
P EQUAL 4
)
# mininal architecture flags, i486 enables GCC atomics
ADD_DEFINITIONS
(
-march=i486
)
ENDIF
()
...
...
include/mysql/psi/mysql_thread.h
View file @
9c6482af
...
...
@@ -106,6 +106,22 @@ struct st_mysql_rwlock
struct
PSI_rwlock
*
m_psi
;
};
/**
An instrumented prlock structure.
@sa mysql_prlock_t
*/
struct
st_mysql_prlock
{
/** The real prlock */
rw_pr_lock_t
m_prlock
;
/**
The instrumentation hook.
Note that this hook is not conditionally defined,
for binary compatibility of the @c mysql_rwlock_t interface.
*/
struct
PSI_rwlock
*
m_psi
;
};
/**
Type of an instrumented rwlock.
@c mysql_rwlock_t is a drop-in replacement for @c pthread_rwlock_t.
...
...
@@ -119,6 +135,20 @@ struct st_mysql_rwlock
*/
typedef
struct
st_mysql_rwlock
mysql_rwlock_t
;
/**
Type of an instrumented prlock.
A prlock is a read write lock that 'prefers readers' (pr).
@c mysql_prlock_t is a drop-in replacement for @c rw_pr_lock_t.
@sa mysql_prlock_init
@sa mysql_prlock_rdlock
@sa mysql_prlock_tryrdlock
@sa mysql_prlock_wrlock
@sa mysql_prlock_trywrlock
@sa mysql_prlock_unlock
@sa mysql_prlock_destroy
*/
typedef
struct
st_mysql_prlock
mysql_prlock_t
;
/**
An instrumented cond structure.
@sa mysql_cond_t
...
...
@@ -281,6 +311,19 @@ typedef struct st_mysql_cond mysql_cond_t;
#define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(RW)
#endif
/**
@def mysql_prlock_init(K, RW)
Instrumented rw_pr_init.
@c mysql_prlock_init is a replacement for @c rw_pr_init.
@param K The PSI_rwlock_key for this instrumented prlock
@param RW The prlock to initialize
*/
#ifdef HAVE_PSI_INTERFACE
#define mysql_prlock_init(K, RW) inline_mysql_prlock_init(K, RW)
#else
#define mysql_prlock_init(K, RW) inline_mysql_prlock_init(RW)
#endif
/**
@def mysql_rwlock_destroy(RW)
Instrumented rwlock_destroy.
...
...
@@ -289,6 +332,14 @@ typedef struct st_mysql_cond mysql_cond_t;
*/
#define mysql_rwlock_destroy(RW) inline_mysql_rwlock_destroy(RW)
/**
@def mysql_prlock_destroy(RW)
Instrumented rw_pr_destroy.
@c mysql_prlock_destroy is a drop-in replacement
for @c rw_pr_destroy.
*/
#define mysql_prlock_destroy(RW) inline_mysql_prlock_destroy(RW)
/**
@def mysql_rwlock_rdlock(RW)
Instrumented rwlock_rdlock.
...
...
@@ -303,6 +354,20 @@ typedef struct st_mysql_cond mysql_cond_t;
inline_mysql_rwlock_rdlock(RW)
#endif
/**
@def mysql_prlock_rdlock(RW)
Instrumented rw_pr_rdlock.
@c mysql_prlock_rdlock is a drop-in replacement
for @c rw_pr_rdlock.
*/
#ifdef HAVE_PSI_INTERFACE
#define mysql_prlock_rdlock(RW) \
inline_mysql_prlock_rdlock(RW, __FILE__, __LINE__)
#else
#define mysql_prlock_rdlock(RW) \
inline_mysql_prlock_rdlock(RW)
#endif
/**
@def mysql_rwlock_wrlock(RW)
Instrumented rwlock_wrlock.
...
...
@@ -317,6 +382,20 @@ typedef struct st_mysql_cond mysql_cond_t;
inline_mysql_rwlock_wrlock(RW)
#endif
/**
@def mysql_prlock_wrlock(RW)
Instrumented rw_pr_wrlock.
@c mysql_prlock_wrlock is a drop-in replacement
for @c rw_pr_wrlock.
*/
#ifdef HAVE_PSI_INTERFACE
#define mysql_prlock_wrlock(RW) \
inline_mysql_prlock_wrlock(RW, __FILE__, __LINE__)
#else
#define mysql_prlock_wrlock(RW) \
inline_mysql_prlock_wrlock(RW)
#endif
/**
@def mysql_rwlock_tryrdlock(RW)
Instrumented rwlock_tryrdlock.
...
...
@@ -331,6 +410,20 @@ typedef struct st_mysql_cond mysql_cond_t;
inline_mysql_rwlock_tryrdlock(RW)
#endif
/**
@def mysql_prlock_tryrdlock(RW)
Instrumented rw_pr_tryrdlock.
@c mysql_prlock_tryrdlock is a drop-in replacement
for @c rw_pr_tryrdlock.
*/
#ifdef HAVE_PSI_INTERFACE
#define mysql_prlock_tryrdlock(RW) \
inline_mysql_prlock_tryrdlock(RW, __FILE__, __LINE__)
#else
#define mysql_prlock_tryrdlock(RW) \
inline_mysql_prlock_tryrdlock(RW)
#endif
/**
@def mysql_rwlock_trywrlock(RW)
Instrumented rwlock_trywrlock.
...
...
@@ -345,6 +438,20 @@ typedef struct st_mysql_cond mysql_cond_t;
inline_mysql_rwlock_trywrlock(RW)
#endif
/**
@def mysql_prlock_trywrlock(RW)
Instrumented rw_pr_trywrlock.
@c mysql_prlock_trywrlock is a drop-in replacement
for @c rw_pr_trywrlock.
*/
#ifdef HAVE_PSI_INTERFACE
#define mysql_prlock_trywrlock(RW) \
inline_mysql_prlock_trywrlock(RW, __FILE__, __LINE__)
#else
#define mysql_prlock_trywrlock(RW) \
inline_mysql_prlock_trywrlock(RW)
#endif
/**
@def mysql_rwlock_unlock(RW)
Instrumented rwlock_unlock.
...
...
@@ -353,9 +460,17 @@ typedef struct st_mysql_cond mysql_cond_t;
*/
#define mysql_rwlock_unlock(RW) inline_mysql_rwlock_unlock(RW)
/**
@def mysql_prlock_unlock(RW)
Instrumented rw_pr_unlock.
@c mysql_prlock_unlock is a drop-in replacement
for @c rw_pr_unlock.
*/
#define mysql_prlock_unlock(RW) inline_mysql_prlock_unlock(RW)
/**
@def mysql_cond_init(K, C, A)
Instrumented
rwlock
_init.
Instrumented
cond
_init.
@c mysql_cond_init is a replacement for @c pthread_cond_init.
@param C The cond to initialize
@param K The PSI_cond_key for this instrumented cond
...
...
@@ -599,6 +714,21 @@ static inline int inline_mysql_rwlock_init(
return
my_rwlock_init
(
&
that
->
m_rwlock
,
NULL
);
}
static
inline
int
inline_mysql_prlock_init
(
#ifdef HAVE_PSI_INTERFACE
PSI_rwlock_key
key
,
#endif
mysql_prlock_t
*
that
)
{
#ifdef HAVE_PSI_INTERFACE
that
->
m_psi
=
(
PSI_server
?
PSI_server
->
init_rwlock
(
key
,
&
that
->
m_prlock
)
:
NULL
);
#else
that
->
m_psi
=
NULL
;
#endif
return
rw_pr_init
(
&
that
->
m_prlock
);
}
static
inline
int
inline_mysql_rwlock_destroy
(
mysql_rwlock_t
*
that
)
{
...
...
@@ -612,6 +742,19 @@ static inline int inline_mysql_rwlock_destroy(
return
rwlock_destroy
(
&
that
->
m_rwlock
);
}
static
inline
int
inline_mysql_prlock_destroy
(
mysql_prlock_t
*
that
)
{
#ifdef HAVE_PSI_INTERFACE
if
(
likely
(
PSI_server
&&
that
->
m_psi
))
{
PSI_server
->
destroy_rwlock
(
that
->
m_psi
);
that
->
m_psi
=
NULL
;
}
#endif
return
rw_pr_destroy
(
&
that
->
m_prlock
);
}
static
inline
int
inline_mysql_rwlock_rdlock
(
mysql_rwlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
...
...
@@ -638,6 +781,32 @@ static inline int inline_mysql_rwlock_rdlock(
return
result
;
}
static
inline
int
inline_mysql_prlock_rdlock
(
mysql_prlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
,
const
char
*
src_file
,
uint
src_line
#endif
)
{
int
result
;
#ifdef HAVE_PSI_INTERFACE
struct
PSI_rwlock_locker
*
locker
=
NULL
;
if
(
likely
(
PSI_server
&&
that
->
m_psi
))
{
locker
=
PSI_server
->
get_thread_rwlock_locker
(
that
->
m_psi
,
PSI_RWLOCK_READLOCK
);
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
start_rwlock_rdwait
(
locker
,
src_file
,
src_line
);
}
#endif
result
=
rw_pr_rdlock
(
&
that
->
m_prlock
);
#ifdef HAVE_PSI_INTERFACE
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
end_rwlock_rdwait
(
locker
,
result
);
#endif
return
result
;
}
static
inline
int
inline_mysql_rwlock_wrlock
(
mysql_rwlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
...
...
@@ -664,6 +833,32 @@ static inline int inline_mysql_rwlock_wrlock(
return
result
;
}
static
inline
int
inline_mysql_prlock_wrlock
(
mysql_prlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
,
const
char
*
src_file
,
uint
src_line
#endif
)
{
int
result
;
#ifdef HAVE_PSI_INTERFACE
struct
PSI_rwlock_locker
*
locker
=
NULL
;
if
(
likely
(
PSI_server
&&
that
->
m_psi
))
{
locker
=
PSI_server
->
get_thread_rwlock_locker
(
that
->
m_psi
,
PSI_RWLOCK_WRITELOCK
);
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
start_rwlock_wrwait
(
locker
,
src_file
,
src_line
);
}
#endif
result
=
rw_pr_wrlock
(
&
that
->
m_prlock
);
#ifdef HAVE_PSI_INTERFACE
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
end_rwlock_wrwait
(
locker
,
result
);
#endif
return
result
;
}
static
inline
int
inline_mysql_rwlock_tryrdlock
(
mysql_rwlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
...
...
@@ -690,6 +885,32 @@ static inline int inline_mysql_rwlock_tryrdlock(
return
result
;
}
static
inline
int
inline_mysql_prlock_tryrdlock
(
mysql_prlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
,
const
char
*
src_file
,
uint
src_line
#endif
)
{
int
result
;
#ifdef HAVE_PSI_INTERFACE
struct
PSI_rwlock_locker
*
locker
=
NULL
;
if
(
likely
(
PSI_server
&&
that
->
m_psi
))
{
locker
=
PSI_server
->
get_thread_rwlock_locker
(
that
->
m_psi
,
PSI_RWLOCK_TRYREADLOCK
);
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
start_rwlock_rdwait
(
locker
,
src_file
,
src_line
);
}
#endif
result
=
rw_pr_tryrdlock
(
&
that
->
m_prlock
);
#ifdef HAVE_PSI_INTERFACE
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
end_rwlock_rdwait
(
locker
,
result
);
#endif
return
result
;
}
static
inline
int
inline_mysql_rwlock_trywrlock
(
mysql_rwlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
...
...
@@ -716,6 +937,32 @@ static inline int inline_mysql_rwlock_trywrlock(
return
result
;
}
static
inline
int
inline_mysql_prlock_trywrlock
(
mysql_prlock_t
*
that
#ifdef HAVE_PSI_INTERFACE
,
const
char
*
src_file
,
uint
src_line
#endif
)
{
int
result
;
#ifdef HAVE_PSI_INTERFACE
struct
PSI_rwlock_locker
*
locker
=
NULL
;
if
(
likely
(
PSI_server
&&
that
->
m_psi
))
{
locker
=
PSI_server
->
get_thread_rwlock_locker
(
that
->
m_psi
,
PSI_RWLOCK_TRYWRITELOCK
);
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
start_rwlock_wrwait
(
locker
,
src_file
,
src_line
);
}
#endif
result
=
rw_pr_trywrlock
(
&
that
->
m_prlock
);
#ifdef HAVE_PSI_INTERFACE
if
(
likely
(
locker
!=
NULL
))
PSI_server
->
end_rwlock_wrwait
(
locker
,
result
);
#endif
return
result
;
}
static
inline
int
inline_mysql_rwlock_unlock
(
mysql_rwlock_t
*
that
)
{
...
...
@@ -733,6 +980,23 @@ static inline int inline_mysql_rwlock_unlock(
return
result
;
}
static
inline
int
inline_mysql_prlock_unlock
(
mysql_prlock_t
*
that
)
{
int
result
;
#ifdef HAVE_PSI_INTERFACE
struct
PSI_thread
*
thread
;
if
(
likely
(
PSI_server
&&
that
->
m_psi
))
{
thread
=
PSI_server
->
get_thread
();
if
(
likely
(
thread
!=
NULL
))
PSI_server
->
unlock_rwlock
(
thread
,
that
->
m_psi
);
}
#endif
result
=
rw_pr_unlock
(
&
that
->
m_prlock
);
return
result
;
}
static
inline
int
inline_mysql_cond_init
(
#ifdef HAVE_PSI_INTERFACE
PSI_cond_key
key
,
...
...
mysql-test/lib/v1/mysql-test-run.pl
View file @
9c6482af
This diff is collapsed.
Click to expand it.
mysql-test/suite/perfschema/r/dml_setup_instruments.result
View file @
9c6482af
...
...
@@ -25,9 +25,10 @@ wait/synch/rwlock/sql/LOCK_system_variables_hash YES YES
wait/synch/rwlock/sql/LOCK_sys_init_connect YES YES
wait/synch/rwlock/sql/LOCK_sys_init_slave YES YES
wait/synch/rwlock/sql/LOGGER::LOCK_logger YES YES
wait/synch/rwlock/sql/MDL_context::waiting_for_lock YES YES
wait/synch/rwlock/sql/MDL_lock::rwlock YES YES
wait/synch/rwlock/sql/Query_cache_query::lock YES YES
wait/synch/rwlock/sql/THR_LOCK_servers YES YES
wait/synch/rwlock/sql/THR_LOCK_udf YES YES
select * from performance_schema.SETUP_INSTRUMENTS
where name like 'Wait/Synch/Cond/sql/%'
and name not in (
...
...
mysql-test/suite/perfschema/r/pfs_upgrade.result
0 → 100644
View file @
9c6482af
drop table if exists test.user_table;
drop procedure if exists test.user_proc;
drop function if exists test.user_func;
drop event if exists test.user_event;
"Testing mysql_upgrade with TABLE performance_schema.user_table"
create table test.user_table(a int);
use performance_schema;
show tables like "user_table";
Tables_in_performance_schema (user_table)
user_table
ERROR 1644 (HY000) at line 178: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 203: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 233: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 247: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 281: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 302: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 323: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 340: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 379: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 396: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 414: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 431: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 449: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 465: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 502: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 518: Table 'SETUP_TIMERS' already exists
FATAL ERROR: Upgrade failed
show tables like "user_table";
Tables_in_performance_schema (user_table)
user_table
use test;
drop table test.user_table;
"Testing mysql_upgrade with VIEW performance_schema.user_view"
create view test.user_view as select "Not supposed to be here";
use performance_schema;
show tables like "user_view";
Tables_in_performance_schema (user_view)
user_view
ERROR 1644 (HY000) at line 178: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 203: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 233: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 247: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 281: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 302: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 323: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 340: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 379: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 396: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 414: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 431: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 449: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 465: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 502: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 518: Table 'SETUP_TIMERS' already exists
FATAL ERROR: Upgrade failed
show tables like "user_view";
Tables_in_performance_schema (user_view)
user_view
use test;
drop view test.user_view;
"Testing mysql_upgrade with PROCEDURE performance_schema.user_proc"
create procedure test.user_proc()
select "Not supposed to be here";
update mysql.proc set db='performance_schema' where name='user_proc';
ERROR 1644 (HY000) at line 178: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 203: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 233: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 247: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 281: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 302: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 323: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 340: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 379: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 396: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 414: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 431: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 449: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 465: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 502: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 518: Table 'SETUP_TIMERS' already exists
FATAL ERROR: Upgrade failed
select name from mysql.proc where db='performance_schema';
name
user_proc
update mysql.proc set db='test' where name='user_proc';
drop procedure test.user_proc;
"Testing mysql_upgrade with FUNCTION performance_schema.user_func"
create function test.user_func() returns integer
return 0;
update mysql.proc set db='performance_schema' where name='user_func';
ERROR 1644 (HY000) at line 178: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 203: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 233: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 247: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 281: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 302: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 323: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 340: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 379: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 396: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 414: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 431: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 449: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 465: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 502: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 518: Table 'SETUP_TIMERS' already exists
FATAL ERROR: Upgrade failed
select name from mysql.proc where db='performance_schema';
name
user_func
update mysql.proc set db='test' where name='user_func';
drop function test.user_func;
"Testing mysql_upgrade with EVENT performance_schema.user_event"
create event test.user_event on schedule every 1 day do
select "not supposed to be here";
update mysql.event set db='performance_schema' where name='user_event';
ERROR 1644 (HY000) at line 178: Unexpected content found in the performance_schema database.
ERROR 1050 (42S01) at line 203: Table 'COND_INSTANCES' already exists
ERROR 1050 (42S01) at line 233: Table 'EVENTS_WAITS_CURRENT' already exists
ERROR 1050 (42S01) at line 247: Table 'EVENTS_WAITS_HISTORY' already exists
ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_HISTORY_LONG' already exists
ERROR 1050 (42S01) at line 281: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 302: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 323: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 340: Table 'FILE_INSTANCES' already exists
ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists
ERROR 1050 (42S01) at line 379: Table 'FILE_SUMMARY_BY_INSTANCE' already exists
ERROR 1050 (42S01) at line 396: Table 'MUTEX_INSTANCES' already exists
ERROR 1050 (42S01) at line 414: Table 'PERFORMANCE_TIMERS' already exists
ERROR 1050 (42S01) at line 431: Table 'PROCESSLIST' already exists
ERROR 1050 (42S01) at line 449: Table 'RWLOCK_INSTANCES' already exists
ERROR 1050 (42S01) at line 465: Table 'SETUP_CONSUMERS' already exists
ERROR 1050 (42S01) at line 482: Table 'SETUP_INSTRUMENTS' already exists
ERROR 1050 (42S01) at line 502: Table 'SETUP_OBJECTS' already exists
ERROR 1050 (42S01) at line 518: Table 'SETUP_TIMERS' already exists
FATAL ERROR: Upgrade failed
select name from mysql.event where db='performance_schema';
name
user_event
update mysql.event set db='test' where name='user_event';
drop event test.user_event;
mysql-test/suite/perfschema/t/pfs_upgrade.test
0 → 100644
View file @
9c6482af
# Copyright (C) 2010 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Tests for PERFORMANCE_SCHEMA
# Make sure mysql_upgrade does not destroy data in a 'performance_schema'
# database.
#
--
source
include
/
not_embedded
.
inc
--
source
include
/
have_perfschema
.
inc
--
disable_warnings
drop
table
if
exists
test
.
user_table
;
drop
procedure
if
exists
test
.
user_proc
;
drop
function
if
exists
test
.
user_func
;
drop
event
if
exists
test
.
user_event
;
--
enable_warnings
--
echo
"Testing mysql_upgrade with TABLE performance_schema.user_table"
create
table
test
.
user_table
(
a
int
);
let
$MYSQLD_DATADIR
=
`SELECT @@datadir`
;
--
copy_file
$MYSQLD_DATADIR
/
test
/
user_table
.
frm
$MYSQLD_DATADIR
/
performance_schema
/
user_table
.
frm
# Make sure the table is visible
use
performance_schema
;
show
tables
like
"user_table"
;
--
error
1
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
out
2
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Verify that mysql_upgrade complained about the performance_schema
--
cat_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Make sure the table is still visible
show
tables
like
"user_table"
;
use
test
;
--
remove_file
$MYSQLD_DATADIR
/
performance_schema
/
user_table
.
frm
drop
table
test
.
user_table
;
--
echo
"Testing mysql_upgrade with VIEW performance_schema.user_view"
create
view
test
.
user_view
as
select
"Not supposed to be here"
;
let
$MYSQLD_DATADIR
=
`SELECT @@datadir`
;
--
copy_file
$MYSQLD_DATADIR
/
test
/
user_view
.
frm
$MYSQLD_DATADIR
/
performance_schema
/
user_view
.
frm
# Make sure the view is visible
use
performance_schema
;
show
tables
like
"user_view"
;
--
error
1
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
out
2
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Verify that mysql_upgrade complained about the performance_schema
--
cat_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Make sure the view is still visible
show
tables
like
"user_view"
;
use
test
;
--
remove_file
$MYSQLD_DATADIR
/
performance_schema
/
user_view
.
frm
drop
view
test
.
user_view
;
--
echo
"Testing mysql_upgrade with PROCEDURE performance_schema.user_proc"
create
procedure
test
.
user_proc
()
select
"Not supposed to be here"
;
update
mysql
.
proc
set
db
=
'performance_schema'
where
name
=
'user_proc'
;
--
error
1
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
out
2
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Verify that mysql_upgrade complained about the performance_schema
--
cat_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
select
name
from
mysql
.
proc
where
db
=
'performance_schema'
;
update
mysql
.
proc
set
db
=
'test'
where
name
=
'user_proc'
;
drop
procedure
test
.
user_proc
;
--
echo
"Testing mysql_upgrade with FUNCTION performance_schema.user_func"
create
function
test
.
user_func
()
returns
integer
return
0
;
update
mysql
.
proc
set
db
=
'performance_schema'
where
name
=
'user_func'
;
--
error
1
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
out
2
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Verify that mysql_upgrade complained about the performance_schema
--
cat_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
select
name
from
mysql
.
proc
where
db
=
'performance_schema'
;
update
mysql
.
proc
set
db
=
'test'
where
name
=
'user_func'
;
drop
function
test
.
user_func
;
--
echo
"Testing mysql_upgrade with EVENT performance_schema.user_event"
create
event
test
.
user_event
on
schedule
every
1
day
do
select
"not supposed to be here"
;
update
mysql
.
event
set
db
=
'performance_schema'
where
name
=
'user_event'
;
--
error
1
--
exec
$MYSQL_UPGRADE
--
skip
-
verbose
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
out
2
>
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
# Verify that mysql_upgrade complained about the performance_schema
--
cat_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
select
name
from
mysql
.
event
where
db
=
'performance_schema'
;
update
mysql
.
event
set
db
=
'test'
where
name
=
'user_event'
;
drop
event
test
.
user_event
;
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
out
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
pfs_upgrade
.
err
scripts/mysql_system_tables.sql
View file @
9c6482af
-- Copyright (C) 2008
-2009 Sun Microsystems, Inc
-- Copyright (C) 2008
, 2010 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
...
...
@@ -100,18 +100,92 @@ CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_b
CREATE
TABLE
IF
NOT
EXISTS
ndb_binlog_index
(
Position
BIGINT
UNSIGNED
NOT
NULL
,
File
VARCHAR
(
255
)
NOT
NULL
,
epoch
BIGINT
UNSIGNED
NOT
NULL
,
inserts
BIGINT
UNSIGNED
NOT
NULL
,
updates
BIGINT
UNSIGNED
NOT
NULL
,
deletes
BIGINT
UNSIGNED
NOT
NULL
,
schemaops
BIGINT
UNSIGNED
NOT
NULL
,
PRIMARY
KEY
(
epoch
))
ENGINE
=
MYISAM
;
--
-- PERFORMANCE SCHEMA INSTALLATION
-- Note that this script is also reused by mysql_upgrade,
-- so we have to be very careful here to not destroy any
-- existing database named 'performance_schema' if it
-- can contain user data.
-- In case of downgrade, it's ok to drop unknown tables
-- from a future version, as long as they belong to the
-- performance schema engine.
--
set
@
have_old_pfs
=
(
select
count
(
*
)
from
information_schema
.
schemata
where
schema_name
=
'performance_schema'
);
SET
@
l1
=
"SET @broken_tables = (select count(*) from information_schema.tables"
;
SET
@
l2
=
" where engine !=
\'
PERFORMANCE_SCHEMA
\'
and table_schema=
\'
performance_schema
\'
)"
;
SET
@
cmd
=
concat
(
@
l1
,
@
l2
);
-- Work around for bug#49542
SET
@
str
=
IF
(
@
have_old_pfs
=
1
,
@
cmd
,
'SET @broken_tables = 0'
);
PREPARE
stmt
FROM
@
str
;
EXECUTE
stmt
;
DROP
PREPARE
stmt
;
SET
@
l1
=
"SET @broken_views = (select count(*) from information_schema.views"
;
SET
@
l2
=
" where table_schema='performance_schema')"
;
SET
@
cmd
=
concat
(
@
l1
,
@
l2
);
-- Work around for bug#49542
SET
@
str
=
IF
(
@
have_old_pfs
=
1
,
@
cmd
,
'SET @broken_views = 0'
);
PREPARE
stmt
FROM
@
str
;
EXECUTE
stmt
;
DROP
PREPARE
stmt
;
SET
@
broken_routines
=
(
select
count
(
*
)
from
mysql
.
proc
where
db
=
'performance_schema'
);
SET
@
broken_events
=
(
select
count
(
*
)
from
mysql
.
event
where
db
=
'performance_schema'
);
SET
@
broken_pfs
=
(
select
@
broken_tables
+
@
broken_views
+
@
broken_routines
+
@
broken_events
);
--
-- The performance schema database.
-- This database is always created, even in --without-perfschema builds,
-- Only drop and create the database if this is safe (no broken_pfs).
-- This database is created, even in --without-perfschema builds,
-- so that the database name is always reserved by the MySQL implementation.
--
set
@
have_pfs
=
(
select
count
(
engine
)
from
information_schema
.
engines
where
engine
=
'PERFORMANCE_SCHEMA'
and
support
!=
'NO'
);
SET
@
cmd
=
"DROP DATABASE IF EXISTS performance_schema"
;
SET
@
str
=
IF
(
@
broken_pfs
=
0
,
@
cmd
,
'SET @dummy = 0'
);
PREPARE
stmt
FROM
@
str
;
EXECUTE
stmt
;
DROP
PREPARE
stmt
;
DROP
DATABASE
IF
EXISTS
performance_schema
;
SET
@
cmd
=
"CREATE DATABASE performance_schema character set utf8"
;
CREATE
DATABASE
performance_schema
character
set
utf8
;
SET
@
str
=
IF
(
@
broken_pfs
=
0
,
@
cmd
,
'SET @dummy = 0'
);
PREPARE
stmt
FROM
@
str
;
EXECUTE
stmt
;
DROP
PREPARE
stmt
;
--
-- Unlike 'performance_schema', the 'mysql' database is reserved already,
-- so no user procedure is supposed to be there
--
drop
procedure
if
exists
mysql
.
die
;
create
procedure
mysql
.
die
()
signal
sqlstate
'HY000'
set
message_text
=
'Unexpected content found in the performance_schema database.'
;
--
-- For broken upgrades, SIGNAL the error
--
SET
@
cmd
=
"call mysql.die()"
;
SET
@
str
=
IF
(
@
broken_pfs
>
0
,
@
cmd
,
'SET @dummy = 0'
);
PREPARE
stmt
FROM
@
str
;
EXECUTE
stmt
;
DROP
PREPARE
stmt
;
drop
procedure
mysql
.
die
;
--
-- From this point, only create the performance schema tables
-- if the server is build with performance schema
--
set
@
have_pfs
=
(
select
count
(
engine
)
from
information_schema
.
engines
where
engine
=
'PERFORMANCE_SCHEMA'
and
support
!=
'NO'
);
--
-- TABLE COND_INSTANCES
...
...
sql/mdl.cc
View file @
9c6482af
This diff is collapsed.
Click to expand it.
sql/mdl.h
View file @
9c6482af
...
...
@@ -628,7 +628,7 @@ private:
important as deadlock detector won't work correctly
otherwise. @sa Comment for MDL_lock::m_rwlock.
*/
rw_pr_
lock_t
m_waiting_for_lock
;
mysql_pr
lock_t
m_waiting_for_lock
;
MDL_ticket
*
m_waiting_for
;
uint
m_deadlock_weight
;
/**
...
...
@@ -652,9 +652,9 @@ private:
void
will_wait_for
(
MDL_ticket
*
pending_ticket
)
{
rw_pr
_wrlock
(
&
m_waiting_for_lock
);
mysql_prlock
_wrlock
(
&
m_waiting_for_lock
);
m_waiting_for
=
pending_ticket
;
rw_pr
_unlock
(
&
m_waiting_for_lock
);
mysql_prlock
_unlock
(
&
m_waiting_for_lock
);
}
void
set_deadlock_weight
(
uint
weight
)
...
...
@@ -670,9 +670,9 @@ private:
void
stop_waiting
()
{
rw_pr
_wrlock
(
&
m_waiting_for_lock
);
mysql_prlock
_wrlock
(
&
m_waiting_for_lock
);
m_waiting_for
=
NULL
;
rw_pr
_unlock
(
&
m_waiting_for_lock
);
mysql_prlock
_unlock
(
&
m_waiting_for_lock
);
}
void
wait_reset
()
...
...
storage/innobase/CMakeLists.txt
View file @
9c6482af
...
...
@@ -196,7 +196,7 @@ ENDIF()
# Removing compiler optimizations for innodb/mem/* files on 64-bit Windows
# due to 64-bit compiler error, See MySQL Bug #19424, #36366, #34297
IF
(
MSVC AND CMAKE_SIZEOF_VOIDP EQUAL 8
)
IF
(
MSVC AND CMAKE_SIZEOF_VOID
_
P EQUAL 8
)
SET_SOURCE_FILES_PROPERTIES
(
mem/mem0mem.c mem/mem0pool.c
PROPERTIES COMPILE_FLAGS -Od
)
ENDIF
()
...
...
storage/perfschema/pfs_instr.cc
View file @
9c6482af
...
...
@@ -746,6 +746,26 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
}
}
char
safe_buffer
[
FN_REFLEN
];
const
char
*
safe_filename
;
if
(
len
>=
FN_REFLEN
)
{
/*
The instrumented code uses file names that exceeds FN_REFLEN.
This could be legal for instrumentation on non mysys APIs,
so we support it.
Truncate the file name so that:
- it fits into pfs->m_filename
- it is safe to use mysys apis to normalize the file name.
*/
memcpy
(
safe_buffer
,
filename
,
FN_REFLEN
-
2
);
safe_buffer
[
FN_REFLEN
-
1
]
=
0
;
safe_filename
=
safe_buffer
;
}
else
safe_filename
=
filename
;
/*
Normalize the file name to avoid duplicates when using aliases:
- absolute or relative paths
...
...
@@ -759,7 +779,7 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass,
Ignore errors, the file may not exist.
my_realpath always provide a best effort result in buffer.
*/
(
void
)
my_realpath
(
buffer
,
filename
,
MYF
(
0
));
(
void
)
my_realpath
(
buffer
,
safe_
filename
,
MYF
(
0
));
normalized_filename
=
buffer
;
normalized_length
=
strlen
(
normalized_filename
);
...
...
storage/perfschema/unittest/pfs-t.cc
View file @
9c6482af
...
...
@@ -37,14 +37,25 @@ PFS_file* lookup_file_by_name(const char* name)
uint
i
;
PFS_file
*
pfs
;
uint
len
=
strlen
(
name
);
size_t
dirlen
;
const
char
*
filename
;
uint
filename_length
;;
for
(
i
=
0
;
i
<
file_max
;
i
++
)
{
pfs
=
&
file_array
[
i
];
if
(
pfs
->
m_lock
.
is_populated
())
{
if
((
len
==
pfs
->
m_filename_length
)
&&
(
strncmp
(
name
,
pfs
->
m_filename
,
pfs
->
m_filename_length
)
==
0
))
/*
When a file "foo" is instrumented, the name is normalized
to "/path/to/current/directory/foo", so we remove the
directory name here to find it back.
*/
dirlen
=
dirname_length
(
pfs
->
m_filename
);
filename
=
pfs
->
m_filename
+
dirlen
;
filename_length
=
pfs
->
m_filename_length
-
dirlen
;
if
((
len
==
filename_length
)
&&
(
strncmp
(
name
,
filename
,
filename_length
)
==
0
))
return
pfs
;
}
}
...
...
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