Bug #40140 Falcon bit indexes are broken
Submitted: 19 Oct 2008 11:57 Modified: 5 Nov 2008 22:18
Reporter: Philip Stoev Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S1 (Critical)
Version:6.0-falcon-team OS:Any
Assigned to: Assigned Account CPU Architecture:Any
Tags: F_INDEX

[19 Oct 2008 11:57] Philip Stoev
Description:
Transactional non-concurrent inserts and updates on a bit index lead to different results as compared to Innodb.

How to repeat:
A test case will be uploaded shortly.
[19 Oct 2008 11:59] Philip Stoev
YY file

Attachment: falcon_bit.yy (application/octet-stream, text), 302 bytes.

[19 Oct 2008 11:59] Philip Stoev
ZZ file

Attachment: falcon_bit.zz (text/plain), 166 bytes.

[19 Oct 2008 12:03] Philip Stoev
To reproduce with the Random Query Generator:

$ perl runall.pl \
  --basedir=/build/bzr/6.0-falcon-team \
  --vardir1=/build/vardir1 \
  --vardir2=/build/vardir2 \
  --mysqld1=--default-storage-engine=Falcon \
  --mysqld2=--default-storage-engine=Innodb \
  --threads=1 \
  --grammar=conf/falcon_bit.yy \
  --gendata=conf/falcon_bit.zz \
  --queries=500 \
  --validators=ResultsetComparator \
  --reporters=

This will print errors on all queries that return different results for Falcon and Innodb. Finally, it will dump and compare the two databases and will print the diff.

This example requires the diff and sort GNU utilities, available from mysql-test-extra-6.0/mysql-test/gentest/bin.
[5 Nov 2008 22:18] Kevin Lewis
The fix for Bug#40122 also fixed this bug.  

After running the Random Query Generator test described here by Philip, InnoDB created a file like this;

mysql> select hex(bit_key), count(*) from table100_falcon group by bit_key;
+--------------+----------+
| hex(bit_key) | count(*) |
+--------------+----------+
| 1            |      205 |
+--------------+----------+
1 row in set (0.02 sec)

Before the fix for Bug#40112, Falcon would end up with a file like this;

mysql> select hex(bit_key), count(*) from table100_falcon group by bit_key;
+--------------+----------+
| hex(bit_key) | count(*) |
+--------------+----------+
| 0            |      204 |
| 1            |        1 |
+--------------+----------+
2 rows in set (0.08 sec)

With the fix, both the InnoDB and Falcon files were the same.
The other similar bug is Bug#40130