Bug #25834 Test failure in "func_group"
Submitted: 24 Jan 2007 16:52 Modified: 13 Mar 2007 1:49
Reporter: Lenz Grimmer Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Tests Severity:S7 (Test Cases)
Version:5.0-current OS:Linux (Linux)
Assigned to: Ramil Kalimullin CPU Architecture:Any

[24 Jan 2007 16:52] Lenz Grimmer
Description:
I observed this test failure in both the current 5.0 and 5.1 BK tree. The last ChangeSet in the 5.0 tree is:

ChangeSet@1.2341.26.14, 2007-01-24 16:12:39+11:00, stewart@willster.(none) +1 -0
  fix hpux build problem and some ndb connect errors being missed

Running the "func_group" test results in the following diff:

autobuild@production:~/my/mysql-5.0.36-20070124-build/build/mysql-test> ./mysql-test-run.pl func_gro
up
Logging: ./mysql-test-run.pl func_group
MySQL Version 5.0.36
Using ndbcluster when necessary, mysqld supports it
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 NDBCLUSTER_PORT       = 9310
Using IM_PORT               = 9312
Using IM_MYSQLD1_PORT       = 9313
Using IM_MYSQLD2_PORT       = 9314
Killing Possible Leftover Processes
Removing Stale Files
Creating Directories
Installing Master Database
Installing Master Database
=======================================================
Starting Tests in the 'main' suite

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

func_group                     [ fail ]

Errors are (from /data0/autobuild/my/mysql-5.0.36-20070124-build/build/mysql-test/var/log/mysqltest-
time) :
mysqltest: Result length mismatch
(the last lines may be the most important ones)
Below are the diffs between actual and expected results:
-------------------------------------------------------
*** r/func_group.result 2007-01-24 15:56:14.000000000 +0300
--- r/func_group.reject 2007-01-24 19:49:15.000000000 +0300
***************
*** 1182,1190 ****
  3     4       0.00000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       0
! 2     4       0
! 3     4       0
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.00000000
--- 1182,1190 ----
  3     4       0.00000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       1.9708095987452e-17
! 2     4       1.9712988154832e-18
! 3     4       9.1019119466255e-18
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.00000000
***************
*** 1208,1216 ****
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       0
! 2     4       0
! 3     4       0
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
--- 1208,1216 ----
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       1.9708095987452e-17
! 2     4       1.9712988154832e-18
! 3     4       9.1019119466255e-18
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
***************
*** 1233,1241 ****
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       0
! 2     4       0
! 3     4       0
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
--- 1233,1241 ----
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       1.9708095987452e-17
! 2     4       1.9712988154832e-18
! 3     4       9.1019119466255e-18
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
-------------------------------------------------------
Please follow the instructions outlined at
http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html
to find the reason to this problem and how to report this.

Result from queries before failure can be found in r/func_group.log

Aborting: func_group failed in default mode. To continue, re-run with '--force'.
Stopping All Servers

How to repeat:
Create a current BK clone of 5.0 or 5.1 and compile it using BUILD/compile-dist. Enter the mysql-test directory and run "./mysql-test-run.pl func_group"
[24 Jan 2007 17:23] Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.0-BK on Linux. Works OK with 5.1-BK:

openxs@suse:~/dbs/5.0/mysql-test> ./mysql-test-run.pl func_group
Logging: ./mysql-test-run.pl func_group
MySQL Version 5.0.36
Using ndbcluster when necessary, mysqld supports it
Skipping SSL, mysqld not compiled with SSL
mysql-test-run: WARNING: Could not find all required ndb binaries, all ndb tests
 will fail, use --skip-ndbcluster to skip testing it.
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 NDBCLUSTER_PORT       = 9310
Using IM_PORT               = 9312
Using IM_MYSQLD1_PORT       = 9313
Using IM_MYSQLD2_PORT       = 9314
Killing Possible Leftover Processes
Removing Stale Files
Creating Directories
Installing Master Database
Installing Master Database
=======================================================
Starting Tests in the 'main' suite

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

func_group                     [ fail ]

Errors are (from /home/openxs/dbs/5.0/mysql-test/var/log/mysqltest-time) :
mysqltest: Result length mismatch
(the last lines may be the most important ones)
Below are the diffs between actual and expected results:
-------------------------------------------------------
*** r/func_group.result 2007-01-24 16:42:59.000000000 +0300
--- r/func_group.reject 2007-01-24 18:42:25.000000000 +0300
***************
*** 1182,1190 ****
  3     4       0.00000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       0
! 2     4       0
! 3     4       0
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.00000000
--- 1182,1190 ----
  3     4       0.00000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       1.9708095987452e-17
! 2     4       1.9712988154832e-18
! 3     4       9.1019119466255e-18
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.00000000
***************
*** 1208,1216 ****
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       0
! 2     4       0
! 3     4       0
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
--- 1208,1216 ----
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       1.9708095987452e-17
! 2     4       1.9712988154832e-18
! 3     4       9.1019119466255e-18
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
***************
*** 1233,1241 ****
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       0
! 2     4       0
! 3     4       0
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
--- 1233,1241 ----
  3     4       0.000000000000000000000000000000
  select i, count(*), std(o1/o2) from bug22555 group by i order by i;
  i     count(*)        std(o1/o2)
! 1     4       1.9708095987452e-17
! 2     4       1.9712988154832e-18
! 3     4       9.1019119466255e-18
  select i, count(*), std(e1/e2) from bug22555 group by i order by i;
  i     count(*)        std(e1/e2)
  1     4       0.000000000000000000000000000000
-------------------------------------------------------
Please follow the instructions outlined at
http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html
to find the reason to this problem and how to report this.

Result from queries before failure can be found in r/func_group.log

Aborting: func_group failed in default mode. To continue, re-run with '--force'.

Stopping All Servers
openxs@suse:~/dbs/5.0/mysql-test> cd ../../5.1/
openxs@suse:~/dbs/5.1> cd mysql-test/
openxs@suse:~/dbs/5.1/mysql-test> ./mysql-test-run.pl func_group
Logging: ./mysql-test-run.pl func_group
MySQL Version 5.1.15
Using binlog format 'mixed'
Using ndbcluster when necessary, mysqld supports it
Skipping SSL, mysqld not compiled with SSL
mysql-test-run: WARNING: Could not find all required ndb binaries, all ndb tests
 will fail, use --skip-ndbcluster to skip testing it.
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 NDBCLUSTER_PORT       = 9310
Using NDBCLUSTER_PORT_SLAVE = 9311
Using IM_PORT               = 9312
Using IM_MYSQLD1_PORT       = 9313
Using IM_MYSQLD2_PORT       = 9314
Killing Possible Leftover Processes
Removing Stale Files
Creating Directories
Installing Master Database
Installing Master Database
=======================================================
Starting Tests in the 'main' suite

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

func_group                     [ pass ]           1483
-------------------------------------------------------
Stopping All Servers
All 1 tests were successful.
The servers were restarted 1 times
Spent 1.483 seconds actually executing testcases
[20 Feb 2007 16:30] Lenz Grimmer
Still occurs in 5.0 and 5.1 as of today, blocking the creation of the daily snapshot builds we publish on http://snaps.mysql.com ...
[20 Feb 2007 16:33] Mads Martin Joergensen
I'm setting this to P1 and tagging it, since it's a test failure which blocks our daily snapshot builds.
[21 Feb 2007 18:43] Daniel Fischer
This bug is different from bug#22555. I isolated this behaviour to builds with -O3 in CXXFLAGS, which is the default of the scripts in the BUILD directory. From my outdated understanding of assembly, the key difference is that with -O3,  sql/item_sum.cc:variance_fp_recurrence_next is inlined. The test case passes if this inlining is prevented. There are (at least) two workarounds that worked for me:

1.) Use CXXFLAGS=-O2 BUILD/compile-dist etc. to build
 
2.) Use the following patch to prevent inlining for this specific function if compiled with GCC:
--- build-1/sql/item_sum.cc     2007-02-20 08:14:22.000000000 +0100
+++ build-2/sql/item_sum.cc     2007-02-21 18:53:38.000000000 +0100
@@ -1216,6 +1216,10 @@
   variance.  The difference between the two classes is that the first is used
   for a mundane SELECT, while the latter is used in a GROUPing SELECT.
 */
+#ifdef __GNUC__
+/* prevent bug#25384 */
+static void variance_fp_recurrence_next(double *m, double *s, ulonglong *count, double nr) __attribute__((__noinline__));
+#endif
 static void variance_fp_recurrence_next(double *m, double *s, ulonglong *count, double nr)
 {
   *count += 1;

This patch was effective both on my home workstation and on the host that builds our daily snapshot builds.

Please comment.
[27 Feb 2007 7:02] 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/20624

ChangeSet@1.2444, 2007-02-27 11:01:58+04:00, ramil@mysql.com +2 -0
  Fix for bug #25834: Test failure in "func_group"
  
  Round the results of std() for some calls with double arguments
  to avoid double math precision problems.
[8 Mar 2007 21:35] Timothy Smith
pushed to 5.0.38, 5.1.17
[13 Mar 2007 1:49] Paul DuBois
No changelog entry needed.