Bug #32991 mysqlimport --use-threads test fails on solaris
| Submitted: | 5 Dec 2007 9:32 | Modified: | 6 Aug 2009 23:54 |
|---|---|---|---|
| Reporter: | Alexander Nozdrin | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Command-line Clients | Severity: | S2 (Serious) |
| Version: | 5.1, 6.0 | OS: | Any |
| Assigned to: | Jim Winstead | CPU Architecture: | Any |
| Tags: | disabled, mysqldump.test, mysqlimport, pushbuild error, race condition | ||
[13 Feb 2008 14:07]
Magnus Blåudd
Experimented a little more with this and it is easily reproduced on sol10-sparc-a.
The problem seems to be that mysqlimport fsils to connect when run with --n um-threads>1, is it really built with the thread safe library?
To reproduce, build mysql-5.1 on sol10-sparc-a. Start the server with
./mtr mysqldump --start-and-exit
Create and fill tables:
mysql> create table t1 (a text , b text);
mysql> create table t2 (a text , b text);
mysql> insert t1 values ("Duck, Duck", "goose");
mysql> insert t1 values ("Duck, Duck", "pidgeon");
mysql> insert t2 values ("We the people", "in order to perform");
mysql> insert t2 values ("a more perfect", "union");
mysql> select * from t1;
mysql> select * from t2;
Run mysqldump to create t1.txt and t2. txt in var/tmp
../client/mysqldump -S var/tm p/master.socl k--tab=var/tmp/ test
Run mysqlimport continuously in a while loop.
$> while mysqlimport.sh ; do date; done
It will fail and report that mysqlimport couldn't connect to mysqld through socket
mysqlimport.sh would look something like:
../client/mysqlimport -uroot --debug-check --port=10170 --socket=/tmp/MfLgwlfAyM/master.sock --password= --silent --use-threads=2 test /export/home/mysqldev/users/magnus/mysql-5.1.24-rc-pb472/mysql-test/var/tmp/t1.txt /export/home/mysqldev/users/magnus/mysql-5.1.24-rc-pb472/mysql-test/var/tmp/t2.txt /export/home/mysqldev/users/magnus/mysql-5.1.24-rc-pb472/mysql-test/var/std_data_ln/words.dat /export/home/mysqldev/users/magnus/mysql-5.1.24-rc-pb472/mysql-test/var/std_data_ln/words2.dat $1
Posible problems:
1. Not using thread safe library. All clients in client/ is compiled with DUNDEF_THREADS_HACK, remove that defined and let each client include what they need to get either thread safe or non thread safe code.
2. The mysqlimport need a small retry loop when connecting - not so good, the clients should connect every time.
[13 Feb 2008 14:09]
Magnus Blåudd
"All clients in client/ is compiled with DUNDEF_THREADS_HACK," and then we go though hoops in order to get thread safety in the one that needs it.
[13 Feb 2008 16:37]
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/42228 ChangeSet@1.2548, 2008-02-13 17:39:23+01:00, sven@riska.(none) +2 -0 BUG#32991: Races in mysqldump.test (or mysqldump.test fails sporadically) This is *not* a fix to the bug. I'm only disabling the failing part of mysqldump.test until the bug is fixed. Whoever fixes it, please re-enable the test.
[13 Feb 2008 17:25]
Sven Sandberg
The submitted patch does *not* fix the bug. It only disables the test case until the bug is fixed, so that not everyone gets errors in pushbuild. Whoever fixes this bug, please re-enable the test. The error is in mysqlimport, and happens when the --use-threads flag is used. I looked superficially at it (checked global variables used from worker_thread() in client/mysqlimport.c), and could not see anything strange. (Except that the global 'exitcode' variable is used without a mutex, but it should not cause this sort of error). The error log on sol10-sparc-a says "errno=23", which on this machine means "illegal seek". I'm just guessing, but could printf() be non-thread-safe on this platform?
[25 Mar 2008 11:23]
Bugs System
Pushed into 5.1.24-rc
[26 Mar 2008 19:01]
Bugs System
Pushed into 6.0.5-alpha
[2 May 2008 18:54]
Jim Winstead
Considering that there's a comment about the -DUNDEF_THREADS_HACK saying it a fix for MIT-pthreads, it can probably just be removed. Otherwise the same CFLAGS used for mysqlslap should be used for mysqlimport.
[2 May 2008 22:22]
Jim Winstead
Unset UNDEF_THREADS_HACK for mysqlimport, because it uses threads
Attachment: bug32991.patch (text/plain), 426 bytes.
[2 May 2008 22:22]
Jim Winstead
I can't reproduce the problem on sol10-sparc-a, but the attached patch will compile mysqlimport the same way as mysqlslap, to avoid the UNDEF_THREADS_HACK hack.
[3 Jul 2008 21:30]
Sveta Smirnova
Probably bug #37789 is related.
[7 Jan 2009 0:46]
Timothy Smith
Looks ok; I agree it would be nice to get rid of UNDEF_THREADS_HACK entirely, but maybe needs more research. This patch is simple.
[12 May 2009 17:46]
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/73853 2894 Jim Winstead 2009-05-12 mysqlimport was not always compiled correctly to allow thread support, required for the --use-threads option. (Bug #32991) modified: client/Makefile.am mysql-test/r/mysqldump.result mysql-test/t/mysqldump.test
[13 Jul 2009 19:41]
Jim Winstead
Pushed to 5.1-bugteam and mysql-pe.
[4 Aug 2009 19:51]
Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090804194615-h40sa098mx4z49qg) (version source revid:jimw@mysql.com-20090713193847-xj6gbgm2a1zwwanv) (merge vers: 5.4.4-alpha) (pib:11)
[4 Aug 2009 20:45]
Bugs System
Pushed into 5.1.38 (revid:davi.arnaut@sun.com-20090804204317-ggodqkik7de6nfpz) (version source revid:davi.arnaut@sun.com-20090804204317-ggodqkik7de6nfpz) (merge vers: 5.1.38) (pib:11)
[6 Aug 2009 23:54]
Paul DuBois
Noted in 5.1.38, 5.4.4 changelogs. mysqlimport was not always compiled correctly to enable thread support, which is required for the --use-threads option.
[12 Aug 2009 22:59]
Paul DuBois
Noted in 5.4.2 changelog because next 5.4 version will be 5.4.2 and not 5.4.4.
[15 Aug 2009 2:16]
Paul DuBois
Ignore previous comment about 5.4.2.
[1 Oct 2009 5:59]
Bugs System
Pushed into 5.1.39-ndb-6.3.28 (revid:jonas@mysql.com-20091001055605-ap2kiaarr7p40mmv) (version source revid:jonas@mysql.com-20091001055605-ap2kiaarr7p40mmv) (merge vers: 5.1.39-ndb-6.3.28) (pib:11)
[1 Oct 2009 7:25]
Bugs System
Pushed into 5.1.39-ndb-7.0.9 (revid:jonas@mysql.com-20091001072547-kv17uu06hfjhgjay) (version source revid:jonas@mysql.com-20091001071652-irejtnumzbpsbgk2) (merge vers: 5.1.39-ndb-7.0.9) (pib:11)
[1 Oct 2009 13:25]
Bugs System
Pushed into 5.1.39-ndb-7.1.0 (revid:jonas@mysql.com-20091001123013-g9ob2tsyctpw6zs0) (version source revid:jonas@mysql.com-20091001123013-g9ob2tsyctpw6zs0) (merge vers: 5.1.39-ndb-7.1.0) (pib:11)
[5 Oct 2009 10:50]
Bugs System
Pushed into 5.1.39-ndb-6.2.19 (revid:jonas@mysql.com-20091005103850-dwij2dojwpvf5hi6) (version source revid:jonas@mysql.com-20090930185117-bhud4ek1y0hsj1nv) (merge vers: 5.1.39-ndb-6.2.19) (pib:11)
[9 Oct 2009 1:28]
Paul DuBois
The 5.4 fix has been pushed to 5.4.2.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.078 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: The following code in mysqldump.test sometimes causes failures: ------------------------------------------------------------ # # Added for use-thread option # create table t1 (a text , b text); create table t2 (a text , b text); insert t1 values ("Duck, Duck", "goose"); insert t1 values ("Duck, Duck", "pidgeon"); insert t2 values ("We the people", "in order to perform"); insert t2 values ("a more perfect", "union"); select * from t1; select * from t2; --exec $MYSQL_DUMP --tab=$MYSQLTEST_VARDIR/tmp/ test --exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/t1.sql --exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/t2.sql # The first load tests the pausing code --exec $MYSQL_IMPORT --use-threads=1 test $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt # Now we test with multiple threads! --exec $MYSQL_IMPORT --silent --use-threads=5 test $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt select * from t1; select * from t2; # Now we test with multiple threads, but less threads than files. create table words(a varchar(255)); create table words2(b varchar(255)); --exec $MYSQL_IMPORT --silent --use-threads=2 test $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt $MYSQLTEST_VARDIR/std_data_ln/words.dat $MYSQLTEST_VARDIR/std_data_ln/words2.dat select * from t1; select * from t2; select * from words; select * from words2; ------------------------------------------------------------ The failures look like: ------------------------------------------------------------ main.mysqldump [ fail ] mysqldump: Couldn't find table: "non_existing" mysqldump: Got error: 1356: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them when using LOCK TABLES mysqldump: Couldn't execute 'SHOW FIELDS FROM `v1`': View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356) mysqldump: user2 has insufficent privileges to SHOW CREATE PROCEDURE `sp1`! --- /export/home/pushbuild/pb/mysql-5.2-maint/37/mysql-6.0.4-alpha-pb37/mysql-test/r/mysqldump.result Sat Dec 1 16:04:04 2007 +++ /export/home/pushbuild/pb/mysql-5.2-maint/37/mysql-6.0.4-alpha-pb37/mysql-test/r/mysqldump.reject Sun Dec 2 15:01:23 2007 @@ -4019,7 +4019,7 @@ aberrant aberration drop table words; -mysql-import: Error: 1146, Table 'test.words' doesn't exist, when using table: words +mysql-import: Error: 2002 Can't connect to local MySQL server through socket '/tmp/pbtmp-n_mix-100/master.sock' (146) drop table t1; drop table t2; drop table words2; mysqltest: Result content mismatch Stopping All Servers Restoring snapshot of databases Resuming Tests ------------------------------------------------------------ or ------------------------------------------------------------ main.mysqldump [ fail ] mysqldump: Couldn't find table: "non_existing" mysqldump: Got error: 1356: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them when using LOCK TABLES mysqldump: Couldn't execute 'SHOW FIELDS FROM `v1`': View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356) mysqldump: user2 has insufficent privileges to SHOW CREATE PROCEDURE `sp1`! /export/home/pushbuild/pb/mysql-5.1-runtime/586/mysql-5.1.23-rc-pb586/client/mysqlimport: Error: 2002 Can't connect to local MySQL server through socket '/tmp/pbtmp-n_row-5/master.sock' (146) mysqltest: At line 1636: command "$MYSQL_IMPORT --silent --use-threads=2 test $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt $MYSQLTEST_VARDIR/std_data_ln/words.dat $MYSQLTEST_VARDIR/std_data_ln/words2.dat" failed The result from queries just before the failure was: < snip > a b We the people in order to perform a more perfect union test.t1: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 test.t2: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 select * from t1; a b Duck, Duck goose Duck, Duck pidgeon Duck, Duck goose Duck, Duck pidgeon select * from t2; a b We the people in order to perform a more perfect union We the people in order to perform a more perfect union create table words(a varchar(255)); create table words2(b varchar(255)); exec of '/export/home/pushbuild/pb/mysql-5.1-runtime/586/mysql-5.1.23-rc-pb586/client/mysqlimport -uroot --debug-check --port=10050 --socket=/tmp/pbtmp-n_row-5/master.sock --password= --silent --use-threads=2 test /tmp/var-n_row-5/tmp/t1.txt /tmp/var-n_row-5/tmp/t2.txt /tmp/var-n_row-5/std_data_ln/words.dat /tmp/var-n_row-5/std_data_ln/words2.dat' failed, error: 256, status: 1, errno: 29 More results from queries before failure can be found in /tmp/var-n_row-5/log/mysqldump.log Stopping All Servers Restoring snapshot of databases Resuming Tests ------------------------------------------------------------ How to repeat: https://intranet.mysql.com/secure/pushbuild/xref.pl?testname=main.mysqldump https://intranet.mysql.com/secure/pushbuild/xref.pl?plat=not+%25win2003%25&testname=main.m...