Bug #43347 mysql_client_test 208 fails when using charset=utf8 and collation=utf8_bin
Submitted: 4 Mar 2009 1:18 Modified: 4 Jun 2009 19:43
Reporter: Michael Besteck Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Tests Severity:S3 (Non-critical)
Version:mysql-5.1.31 (src) OS:Linux ((debian lenny) Linux 2.6.26-1-amd64 #1 SMP Sat Jan 10 17:57:00 UTC 2009 x86_64 GNU/Linux)
Assigned to:
Tags: mysql_client_test, test_ps_query_cache
Triage: Triaged: D5 (Feature request)

[4 Mar 2009 1:18] Michael Besteck
Description:
This bug report applies to the source distribution mysql-5.1.31 with patch http://lists.mysql.com/commits/67644 (Fix for bug#19829:make test Failed in mysql_client_test *with --with-charset=utf8*) for mysql_client_test.test 173 "test_bug9735" applied to tests/mysql_client_test.c and sql/protocol.cc.

Configuring mysql with parameters "--with-charset=utf8" and "--with-collation=utf8_bin" results in failure of test mysql_client_test.208 "test_ps_query_cache".

The log output in /mysql-test/var/log/mysql_client_test.out.log is:
---quote start---
#####################################
208 of (1/1): test_ps_query_cache  
#####################################

 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 Establishing a test connection ...OK
 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)mysql_client_test.c:2595: check failed: 'hits1-hits2 == 1'
---quote end---

Using the same configure call without the "--with-charset=utf8" and "--with-collation=utf8_bin" parameters, the mysql_client_test.208 as much as complete mysql_client_test passes:
---quote start---
#####################################
208 of (1/1): test_ps_query_cache  
#####################################

 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 Establishing a test connection ...OK
 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
---quote end---

How to repeat:
(user mysql and group mysql existing)

tar -xzf mysql-5.1.31.tar.gz
patch the bug for the mysql_client_test.173 "test_bug9735"
cd mysql-5.1.31
./configure \
--prefix=/usr/local/mysql51 \
--localstatedir=/usr/local/mysql51/data \
--enable-local-infile \
--with-plugins=partition,daemon_example,ftexample,archive,blackhole,csv,example,federated,heap,innobase,myisam,myisammrg \
--with-mysqlmanager=yes \
--with-unix-socket-path=/usr/local/mysql51/tmp/mysql.sock \
--with-big-tables=yes \
--with-charset=utf8 \
--with-collation=utf8_bin \
--with-extra-charsets=all

make
make install
cd /usr/local/mysql51
mkdir data
mkdir tmp
chown -R root .
chown -R mysql var
chown -R mysql data
chown -R mysql.mysql ./mysql-test
chmod -R 775 ./mysql-test
su mysql
cd /usr/local/mysql51/mysql-test
./mysql-test-run --user=root mysql_client_test

will result in failure of the test.
Changing the configure command to

./configure \
--prefix=/usr/local/mysql51 \
--localstatedir=/usr/local/mysql51/data \
--enable-local-infile \
--with-plugins=partition,daemon_example,ftexample,archive,blackhole,csv,example,federated,heap,innobase,myisam,myisammrg \
--with-mysqlmanager=yes \
--with-unix-socket-path=/usr/local/mysql51/tmp/mysql.sock \
--with-big-tables=yes \
--with-extra-charsets=all

will let the test pass.

Suggested fix:
At least it should be documented what for (side-) effects the failure of test mysql_client_test.208 may have.
[4 Mar 2009 7:19] Sveta Smirnova
Thank you for the report.

I can not repeat described behavior with regular user and mysql-5.1-bugteam tree fix for bug#19829 was pushed to. Can you repeat failure with regular user (not root) in your environment?
[6 Mar 2009 2:36] Michael Besteck
Hello Sveta Smirnova

Thanks for your care.

Trying to run the test as a "regular", i.e. non-root-, non-mysql-user, fails. The same if i try to run the test as root using the "--user=<regular user>" parameter, the dialog is always:
---quote start---
./mysql-test-run mysql_client_test
Logging: ./mysql-test-run mysql_client_test
090306  2:55:49 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

090306  2:55:49 [ERROR] Aborting

mysql-test-run: *** ERROR: Could not find version of MySQL
---quote end---

Just if i su mysql (or as root using "--usr=mysql" as before), the test will start at all. Then the dialogue is, also as before:

---quote start---
/usr/local/mysql51/mysql-test$ ./mysql-test-run mysql_client_test
Logging: ./mysql-test-run mysql_client_test
090306  2:58:25 [Warning] Forcing shutdown of 1 plugins
MySQL Version 5.1.31
Using dynamic switching of binlog format
Skipping ndbcluster, mysqld not compiled with ndbcluster
Skipping SSL, mysqld not compiled with SSL
Using MTR_BUILD_THREAD      = 0
Using MASTER_MYPORT         = 9306
Using MASTER_MYPORT1        = 9307
Using SLAVE_MYPORT          = 9308
Using SLAVE_MYPORT1         = 9309
Using SLAVE_MYPORT2         = 9310
Using IM_PORT               = 9313
Using IM_MYSQLD1_PORT       = 9314
Using IM_MYSQLD2_PORT       = 9315
Killing Possible Leftover Processes
Removing Stale Files
Creating Directories
Installing Master Database
=======================================================

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

main.mysql_client_test         [ fail ]

mysqltest: At line 12: command "$MYSQL_CLIENT_TEST --getopt-ll-test=25600M >> $MYSQLTEST_VARDIR/log/mysql_client_test.out.log 2>&1" failed

The result from queries just before the failure was:
exec of '/usr/local/mysql51/bin/mysql_client_test --no-defaults --testcase --user=root --port=9306 --socket=/usr/local/mysql51/mysql-test/var/tmp/master.sock --vardir=/usr/local/mysql51/mysql-test/var --getopt-ll-test=25600M >> /usr/local/mysql51/mysql-test/var/log/mysql_client_test.out.log 2>&1' failed, error: 256, status: 1, errno: 0

More results from queries before failure can be found in /usr/local/mysql51/mysql-test/var/log/mysql_client_test.log

Aborting: main.mysql_client_test failed in default mode.
To continue, re-run with '--force'.
Stopping All Servers
---quote end---

The mysql_client_test.out.log file has similar contents then:

---quote start---
#####################################
208 of (1/1): test_ps_query_cache  
#####################################

 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)
 Establishing a test connection ...OK
 total parameters in stmt: `2` (expected: `2`)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 2, hh(2)
 row 3: 1, ii(2)
 row 1: 1, hh(2)
 row 2: 1, ii(2)
 row 3: 2, ii(2)mysql_client_test.c:2595: check failed: 'hits1-hits2 == 1'
---quote end---

In case someone is interesting i uploaded the /usr/local/src/mysql-5.1.31/config.log file for further investigation.

As i suggested for a fix it would be a great help if someone could provide some hints about the (side-) effects of that test-failure.
[6 Mar 2009 2:40] Michael Besteck
The log file from the run of the configure script as zip-archive.

Attachment: config.log.zip (application/x-zip, text), 37.93 KiB.

[6 Mar 2009 3:02] Michael Besteck
One more information:

I also changed the user that is fixed set as "root" in line 1801 of the mysql-test-run script. When set to "mysql" the dialog is:

---quote start---
/usr/local/mysql51/mysql-test$ ./mysql-test-run mysql_client_test
Logging: ./mysql-test-run mysql_client_test
090306  3:50:10 [Warning] Forcing shutdown of 1 plugins
MySQL Version 5.1.31
Using dynamic switching of binlog format
Skipping ndbcluster, mysqld not compiled with ndbcluster
Skipping SSL, mysqld not compiled with SSL
Using MTR_BUILD_THREAD      = 0
Using MASTER_MYPORT         = 9306
Using MASTER_MYPORT1        = 9307
Using SLAVE_MYPORT          = 9308
Using SLAVE_MYPORT1         = 9309
Using SLAVE_MYPORT2         = 9310
Using IM_PORT               = 9313
Using IM_MYSQLD1_PORT       = 9314
Using IM_MYSQLD2_PORT       = 9315
Killing Possible Leftover Processes
Removing Stale Files
Creating Directories
Installing Master Database
=======================================================

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

main.mysql_client_test         [ fail ]

mysqltest: At line 12: command "$MYSQL_CLIENT_TEST --getopt-ll-test=25600M >> $MYSQLTEST_VARDIR/log/mysql_client_test.out.log 2>&1" failed

The result from queries just before the failure was:
exec of '/usr/local/mysql51/bin/mysql_client_test --no-defaults --testcase --user=mysql --port=9306 --socket=/usr/local/mysql51/mysql-test/var/tmp/master.sock --vardir=/usr/local/mysql51/mysql-test/var --getopt-ll-test=25600M >> /usr/local/mysql51/mysql-test/var/log/mysql_client_test.out.log 2>&1' failed, error: 256, status: 1, errno: 0

More results from queries before failure can be found in /usr/local/mysql51/mysql-test/var/log/mysql_client_test.log

Aborting: main.mysql_client_test failed in default mode.
To continue, re-run with '--force'.
Stopping All Servers
---quote end---

When set to a "regular" user:

---quote start---
/usr/local/mysql51/mysql-test$ ./mysql-test-run mysql_client_test
Logging: ./mysql-test-run mysql_client_test
090306  3:50:56 [Warning] Forcing shutdown of 1 plugins
MySQL Version 5.1.31
Using dynamic switching of binlog format
Skipping ndbcluster, mysqld not compiled with ndbcluster
Skipping SSL, mysqld not compiled with SSL
Using MTR_BUILD_THREAD      = 0
Using MASTER_MYPORT         = 9306
Using MASTER_MYPORT1        = 9307
Using SLAVE_MYPORT          = 9308
Using SLAVE_MYPORT1         = 9309
Using SLAVE_MYPORT2         = 9310
Using IM_PORT               = 9313
Using IM_MYSQLD1_PORT       = 9314
Using IM_MYSQLD2_PORT       = 9315
Killing Possible Leftover Processes
Removing Stale Files
Creating Directories
Installing Master Database
=======================================================

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

main.mysql_client_test         [ fail ]

mysqltest: At line 12: command "$MYSQL_CLIENT_TEST --getopt-ll-test=25600M >> $MYSQLTEST_VARDIR/log/mysql_client_test.out.log 2>&1" failed

The result from queries just before the failure was:
exec of '/usr/local/mysql51/bin/mysql_client_test --no-defaults --testcase --user=<regular user> --port=9306 --socket=/usr/local/mysql51/mysql-test/var/tmp/master.sock --vardir=/usr/local/mysql51/mysql-test/var --getopt-ll-test=25600M >> /usr/local/mysql51/mysql-test/var/log/mysql_client_test.out.log 2>&1' failed, error: 256, status: 1, errno: 0

More results from queries before failure can be found in /usr/local/mysql51/mysql-test/var/log/mysql_client_test.log

Aborting: main.mysql_client_test failed in default mode.
To continue, re-run with '--force'.
Stopping All Servers
---quote end---
[6 Mar 2009 8:20] Sveta Smirnova
Thank you for the feedback.

Yes, if apply patch to the source distribution mysql_client_test fails. Bug bug #19829 is not fixed yet and additional changes could be made. So I'll mark this report as duplicate of bug #19829 and link both reports.
[4 Jun 2009 16:33] Matt Lord
The fix for Bug #19829 was pushed into 5.1.33 yet this bug seems to affect 5.1.34 as well.
[4 Jun 2009 19:43] Sveta Smirnova
Matthew, thank you for the feedback.

Verified as described. Bug #44741 was marked as duplicate of this one.
[4 Jun 2009 19:45] Sveta Smirnova
Bug #44741 contains additional information about how to repeat.
[28 Dec 2009 10:12] Sveta Smirnova
See also bug #49954
[21 Aug 2010 10:27] Sveta Smirnova
Bug #56132 was marked as duplicate of this one.