4023 Mayank Prasad 2012-07-13
Bug#14113704 : A STAT ON A NON EXISTING FILE CREATING A FILE RECORD IN PFS
Details:
- While doing a stat of a file, even if file doesn't exist,
its entries are being created in performance_schema tables.
Fix:
- While collecting information about a file for which stat is
done, if file doesn't exist, destroy its collected information.
modified:
include/mysql/psi/mysql_file.h
include/mysql/psi/psi.h
include/mysql/psi/psi_abi_v1.h.pp
mysql-test/suite/perfschema/r/misc.result
mysql-test/suite/perfschema/t/disabled.def
mysql-test/suite/perfschema/t/misc.test
mysys/psi_noop.c
storage/perfschema/pfs.cc
storage/perfschema/unittest/pfs-t.cc
4022 Jimmy Yang 2012-07-13
Fix Bug 14267495 - VALGRIND REPORT FAILURE CAUSED BY
HA_INNOBASE::INPLACE_ALTER_TABLE
rb://1160 approved by Sunny Bains
modified:
storage/innobase/row/row0merge.cc
=== modified file 'include/mysql/psi/mysql_file.h'
--- a/include/mysql/psi/mysql_file.h 2012-05-15 09:39:47 +0000
+++ b/include/mysql/psi/mysql_file.h 2012-07-13 10:55:34 +0000
@@ -759,7 +759,7 @@ inline_mysql_file_stat(
{
PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
result= my_stat(path, stat_area, flags);
- PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ PSI_FILE_CALL(end_file_open_wait)(locker, result);
return result;
}
#endif
@@ -816,7 +816,7 @@ inline_mysql_file_fopen(
that->m_psi= PSI_FILE_CALL(start_file_open_wait)
(locker, src_file, src_line);
that->m_file= my_fopen(filename, flags, myFlags);
- PSI_FILE_CALL(end_file_open_wait)(locker);
+ PSI_FILE_CALL(end_file_open_wait)(locker, NULL);
if (unlikely(that->m_file == NULL))
{
my_free(that);
=== modified file 'include/mysql/psi/psi.h'
--- a/include/mysql/psi/psi.h 2012-05-21 12:00:48 +0000
+++ b/include/mysql/psi/psi.h 2012-07-13 10:55:34 +0000
@@ -1581,7 +1581,8 @@ typedef struct PSI_file* (*start_file_op
End a file instrumentation open operation, for file streams.
@param locker the file locker.
*/
-typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker);
+typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker,
+ void *result);
/**
End a file instrumentation open operation, for non stream files.
=== modified file 'include/mysql/psi/psi_abi_v1.h.pp'
--- a/include/mysql/psi/psi_abi_v1.h.pp 2012-05-02 11:04:32 +0000
+++ b/include/mysql/psi/psi_abi_v1.h.pp 2012-07-13 10:55:34 +0000
@@ -423,7 +423,8 @@ typedef struct PSI_table_locker* (*start
typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker);
typedef struct PSI_file* (*start_file_open_wait_v1_t)
(struct PSI_file_locker *locker, const char *src_file, uint src_line);
-typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker);
+typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker,
+ void *result);
typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t)
(struct PSI_file_locker *locker, File file);
typedef void (*start_file_wait_v1_t)
=== modified file 'mysql-test/suite/perfschema/r/misc.result'
--- a/mysql-test/suite/perfschema/r/misc.result 2012-01-06 15:54:45 +0000
+++ b/mysql-test/suite/perfschema/r/misc.result 2012-07-13 10:55:34 +0000
@@ -42,12 +42,12 @@ AND EVENT_NAME IN
WHERE NAME LIKE "wait/synch/%")
LIMIT 1;
create table test.t1(a int) engine=performance_schema;
-ERROR HY000: Can't create table 'test.t1' (errno: 131)
+ERROR HY000: Invalid performance_schema usage.
SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type
WHERE object_schema='test';
object_schema object_name
create table test.t1 like performance_schema.events_waits_current;
-ERROR HY000: Can't create table 'test.t1' (errno: 131)
+ERROR HY000: Invalid performance_schema usage.
SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type
WHERE object_schema='test';
object_schema object_name
=== modified file 'mysql-test/suite/perfschema/t/disabled.def'
--- a/mysql-test/suite/perfschema/t/disabled.def 2012-05-25 11:14:08 +0000
+++ b/mysql-test/suite/perfschema/t/disabled.def 2012-07-13 10:55:34 +0000
@@ -9,4 +9,3 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
-misc : bug#14113704 24/04/2012 Mayank issue reported causing failure
=== modified file 'mysql-test/suite/perfschema/t/misc.test'
--- a/mysql-test/suite/perfschema/t/misc.test 2012-01-06 15:54:45 +0000
+++ b/mysql-test/suite/perfschema/t/misc.test 2012-07-13 10:55:34 +0000
@@ -77,7 +77,7 @@ LIMIT 1;
# Bug#45088 Should not be able to create tables of engine PERFORMANCE_SCHEMA
#
---error ER_CANT_CREATE_TABLE
+--error ER_WRONG_PERFSCHEMA_USAGE
create table test.t1(a int) engine=performance_schema;
# The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE
@@ -89,7 +89,7 @@ SELECT object_schema, object_name FROM p
# Bug#44897 Performance Schema: can create a ghost table in another database
#
---error ER_CANT_CREATE_TABLE
+--error ER_WRONG_PERFSCHEMA_USAGE
create table test.t1 like performance_schema.events_waits_current;
# The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE
=== modified file 'mysys/psi_noop.c'
--- a/mysys/psi_noop.c 2012-05-02 11:04:32 +0000
+++ b/mysys/psi_noop.c 2012-07-13 10:55:34 +0000
@@ -408,7 +408,8 @@ static PSI_file* start_file_open_wait_no
return NULL;
}
-static void end_file_open_wait_noop(PSI_file_locker *locker NNN)
+static void end_file_open_wait_noop(PSI_file_locker *locker NNN,
+ void *result NNN)
{
return;
}
=== modified file 'storage/perfschema/pfs.cc'
--- a/storage/perfschema/pfs.cc 2012-06-11 14:36:24 +0000
+++ b/storage/perfschema/pfs.cc 2012-07-13 10:55:34 +0000
@@ -3884,9 +3884,28 @@ static PSI_file* start_file_open_wait_v1
Implementation of the file instrumentation interface.
@sa PSI_v1::end_file_open_wait.
*/
-static void end_file_open_wait_v1(PSI_file_locker *locker)
+static void end_file_open_wait_v1(PSI_file_locker *locker,
+ void *result)
{
+ PSI_file_locker_state *state= reinterpret_cast<PSI_file_locker_state*> (locker);
+ DBUG_ASSERT(state != NULL);
+
end_file_wait_v1(locker, 0);
+
+ /*
+ If its a stat operation and file doesn't exist,
+ destory all collected information.
+ */
+ if(state->m_operation == PSI_FILE_STAT &&
+ result == NULL)
+ {
+ PFS_file *file= reinterpret_cast<PFS_file *> (state->m_file);
+ DBUG_ASSERT(file != NULL);
+ PFS_thread *thread= reinterpret_cast<PFS_thread *> (state->m_thread);
+
+ DBUG_ASSERT(thread != NULL);
+ destroy_file(thread, file);
+ }
}
/**
@@ -4053,7 +4072,7 @@ static void end_file_wait_v1(PSI_file_lo
thread->m_events_waits_current--;
}
}
-
+
/* Release or destroy the file if necessary */
switch(state->m_operation)
{
=== modified file 'storage/perfschema/unittest/pfs-t.cc'
--- a/storage/perfschema/unittest/pfs-t.cc 2012-06-01 03:42:14 +0000
+++ b/storage/perfschema/unittest/pfs-t.cc 2012-07-13 10:55:34 +0000
@@ -1299,7 +1299,7 @@ void test_locker_disabled()
file_locker= psi->get_thread_file_name_locker(&file_state, file_key_A, PSI_FILE_OPEN, "xxx", NULL);
ok(file_locker != NULL, "locker");
psi->start_file_open_wait(file_locker, __FILE__, __LINE__);
- psi->end_file_open_wait(file_locker);
+ psi->end_file_open_wait(file_locker, NULL);
file_locker= psi->get_thread_file_stream_locker(&file_state, file_A1, PSI_FILE_READ);
ok(file_locker != NULL, "locker");
psi->start_file_wait(file_locker, 10, __FILE__, __LINE__);
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-5.6 branch (mayank.prasad:4022 to 4023) Bug#14113704 | Mayank Prasad | 13 Jul |