Bug #59091 perfschema.binlog_mix and perfschema.binlog_row tests fail with openssl
Submitted: 21 Dec 2010 16:00 Modified: 7 Jan 2011 18:50
Reporter: [ name withheld ] Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Tests Severity:S3 (Non-critical)
Version:5.5.8 OS:Linux (Fedora 13 x86_64)
Assigned to: Marc ALFF CPU Architecture:Any

[21 Dec 2010 16:00] [ name withheld ]
Description:
Trying to run the regression tests on a fresh build of 5.5.8 on Fedora 13 x86_64, I get the following failures:

perfschema.binlog_mix                    [ fail ]
        Test ended at 2010-12-21 10:27:33

CURRENT_TEST: perfschema.binlog_mix
--- /home/tgl/rpmwork/BUILD/mysql-5.5.8/mysql-test/suite/perfschema/r/binlog_mix.result	2010-12-03 20:58:25.000000000 +0300
+++ /home/tgl/rpmwork/BUILD/mysql-5.5.8/mysql-test/suite/perfschema/r/binlog_mix.reject	2010-12-21 18:27:32.986608974 +0300
@@ -26,6 +26,7 @@
 master-bin.000001	#	Query	#	#	BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (performance_schema.setup_instruments)
 master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */
@@ -45,5 +46,6 @@
 master-bin.000001	#	Query	#	#	BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (performance_schema.setup_instruments)
 master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	COMMIT

mysqltest: Result content mismatch

perfschema.binlog_row                    [ fail ]
        Test ended at 2010-12-21 10:27:34

CURRENT_TEST: perfschema.binlog_row
--- /home/tgl/rpmwork/BUILD/mysql-5.5.8/mysql-test/suite/perfschema/r/binlog_row.result	2010-12-03 20:58:25.000000000 +0300
+++ /home/tgl/rpmwork/BUILD/mysql-5.5.8/mysql-test/suite/perfschema/r/binlog_row.reject	2010-12-21 18:27:34.083567864 +0300
@@ -26,6 +26,7 @@
 master-bin.000001	#	Query	#	#	BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (performance_schema.setup_instruments)
 master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */
@@ -45,5 +46,6 @@
 master-bin.000001	#	Query	#	#	BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (performance_schema.setup_instruments)
 master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	COMMIT

mysqltest: Result content mismatch

I am suspicious that this is not a real error but a failure to update the expected-results files for recent changes related to bug #46896.

How to repeat:
cmake .
make
cd mysql-test
perl ./mysql-test-run.pl --force
[21 Dec 2010 23:38] MySQL Verification Team
I couldn't repeat with current source server:

==============================================================================

TEST                                      RESULT   TIME (ms)
------------------------------------------------------------

worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009
perfschema.binlog_mix                    [ pass ]    298
------------------------------------------------------------
The servers were restarted 0 times
Spent 0.298 of 9 seconds executing testcases

Completed: All 1 tests were successful.

[miguel@hegel mysql-test]$
[26 Dec 2010 21:09] [ name withheld ]
Hmm, it's quite reproducible for me, on both x86_64 and i386 architectures.  I wonder whether you are building with SSL support?  On my machine, the test's command

update performance_schema.setup_instruments set enabled='NO'
  where name like "wait/synch/rwlock/%";

affects the following 21 rows:

mysql> select * from performance_schema.setup_instruments where name like "wait/synch/rwlock/%";
+------------------------------------------------------+---------+-------+
| NAME                                                 | ENABLED | TIMED |
+------------------------------------------------------+---------+-------+
| wait/synch/rwlock/sql/CRYPTO_dynlock_value::lock     | NO      | YES   |
| wait/synch/rwlock/sql/LOCK_grant                     | NO      | YES   |
| wait/synch/rwlock/sql/LOGGER::LOCK_logger            | NO      | YES   |
| wait/synch/rwlock/sql/LOCK_sys_init_connect          | NO      | YES   |
| wait/synch/rwlock/sql/LOCK_sys_init_slave            | NO      | YES   |
| wait/synch/rwlock/sql/LOCK_system_variables_hash     | NO      | YES   |
| wait/synch/rwlock/sql/Query_cache_query::lock        | NO      | YES   |
| wait/synch/rwlock/sql/LOCK_dboptions                 | NO      | YES   |
| wait/synch/rwlock/sql/MDL_lock::rwlock               | NO      | YES   |
| wait/synch/rwlock/sql/MDL_context::LOCK_waiting_for  | NO      | YES   |
| wait/synch/rwlock/myisam/MYISAM_SHARE::key_root_lock | NO      | YES   |
| wait/synch/rwlock/myisam/MYISAM_SHARE::mmap_lock     | NO      | YES   |
| wait/synch/rwlock/innodb/btr_search_latch            | NO      | YES   |
| wait/synch/rwlock/innodb/dict_operation_lock         | NO      | YES   |
| wait/synch/rwlock/innodb/fil_space_latch             | NO      | YES   |
| wait/synch/rwlock/innodb/checkpoint_lock             | NO      | YES   |
| wait/synch/rwlock/innodb/trx_i_s_cache_lock          | NO      | YES   |
| wait/synch/rwlock/innodb/trx_purge_latch             | NO      | YES   |
| wait/synch/rwlock/innodb/index_tree_rw_lock          | NO      | YES   |
| wait/synch/rwlock/sql/THR_LOCK_servers               | NO      | YES   |
| wait/synch/rwlock/sql/THR_LOCK_udf                   | NO      | YES   |
+------------------------------------------------------+---------+-------+
21 rows in set (0.01 sec)

and as far as I can see that's more than enough data to produce 3 update_rows binlog events.
But maybe you're using a different set of build options such that fewer rows match the LIKE test.
[26 Dec 2010 21:15] [ name withheld ]
To clarify --- I'm using these possibly-relevant cmake options:

        -DBUILD_CONFIG=mysql_release \
	-DFEATURE_SET="community" \
        -DENABLED_LOCAL_INFILE=ON \
	-DENABLE_DTRACE=ON \
	-DWITH_EMBEDDED_SERVER=ON \
	-DWITH_READLINE=ON \
	-DWITH_SSL=system \
	-DWITH_ZLIB=system
[26 Dec 2010 22:17] [ name withheld ]
... and in fact, a little bit of digging finds this in mysqld.cc:

#if defined (HAVE_OPENSSL) && !defined(HAVE_YASSL)
  { &key_rwlock_openssl, "CRYPTO_dynlock_value::lock", 0},
#endif

So I'll bet a nickel that the failure occurs only when using openssl.  When you aren't, there are 20 or fewer rows to be updated, and it fits in two binlog events, so the expected result matches.
[30 Dec 2010 7:59] Sveta Smirnova
Thank you for the feedback.

You are right: I used -DWITH_SSL=bundled. Which exact version of OpenSSL do you have?
[30 Dec 2010 15:21] [ name withheld ]
I'm testing with openssl-1.0.0c-1.fc13.x86_64, which is the current release on Fedora 13, but I seriously doubt that the exact version makes any difference.

The basic problem here is that you've got regression test output that depends on how many performance counter rows there are, and that means it's a bad idea for the existence of a counter row to depend on platform or build options.  Maybe a good fix would be to have the row be present unconditionally, but just be a no-op when not using openssl.
[30 Dec 2010 20:20] Sveta Smirnova
Thank you for the feedback.

Verified as described: tests fail if compiled with openssl-1.0.0c
[4 Jan 2011 9:05] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/127862

3213 Marc Alff	2011-01-04
      Bug#59091 perfschema.binlog_mix and perfschema.binlog_row tests fail with openssl
      
      Fixed the test case to be independent of build options used.
      Removed the lowercase-table-names constraint, since performance schema tables are now in lowercase.
[5 Jan 2011 7:03] Bugs System
Pushed into mysql-5.5 5.5.9 (revid:marc.alff@oracle.com-20110105070214-hojt221fz4pvw1mf) (version source revid:marc.alff@oracle.com-20110104090402-khxhhbm6oy9k0owd) (merge vers: 5.5.9) (pib:24)
[5 Jan 2011 7:18] Bugs System
Pushed into mysql-trunk 5.6.2 (revid:marc.alff@oracle.com-20110105071657-b4htma14d2m4due3) (version source revid:marc.alff@oracle.com-20110105071657-b4htma14d2m4due3) (merge vers: 5.6.2) (pib:24)
[5 Jan 2011 7:19] Marc ALFF
Pushed into:
- mysql-5.5 (5.5.9)
- mysql-trunk (5.6.2)
[5 Jan 2011 14:01] Paul DuBois
Changes to test suite. No changelog entry needed.