Bug #27718 Falcon: crash if two connections doing inserts and selects
Submitted: 9 Apr 2007 18:27 Modified: 14 Jun 2007 15:23
Reporter: Peter Gulutzan Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S3 (Non-critical)
Version:5.2.4-falcon-alpha-debug OS:Linux (SUSE 10 64-bit)
Assigned to: CPU Architecture:Any

[9 Apr 2007 18:27] Peter Gulutzan
Description:
I create a Falcon table.
I execute a procedure which repeatedly INSERTs into the table.
I switch connections.
I execute a procedure which repeatedly SELECTs from the table.
Crash.

ChangeSet@1.2571, 2007-04-07

How to repeat:
There will be two connections, T1 and T2.
On T1, create a procedure that repeatedly INSERTs, and call it.
On T2, create a procedure that repeatedly SELECTs, and call it.
The T2 procedure has a continue handler to get around '157' errors.

On T1, say:
delimiter //
use test
create database d//
use d
create table t (s1 int) engine=falcon//
create index i on t (s1)//
create procedure p1 ()
begin
  declare v int default 0;
  while v < 500000 do
    if v mod 100 = 0 then select v; end if;
    insert into t values (v);
    set v = v + 1;
    end while;
  end//
call p1()//

Pause for a few seconds.

On T2, say:
delimiter //
use d
create procedure p3 ()
begin
  declare v int default 0;
  declare continue handler for sqlexception begin end;
  while v < 100000 do
    select v;
    select count(*) from t;
    set v = v + 1;
    end while;
  end//
call p3()//

Example run, as seen on T2:

+------+
| v    |
+------+
| 1630 |
+------+
1 row in set (1.64 sec)

+------+
| v    |
+------+
| 1631 |
+------+
1 row in set (1.64 sec)

+------+
| v    |
+------+
| 1632 |
+------+
1 row in set (1.64 sec)

ERROR 2013 (HY000): Lost connection to MySQL server during query
[9 Apr 2007 18:45] Miguel Solorzano
Thank you for the bug report. Verified as described on F 6 32-bit.

[New Thread -1266914416 (LWP 8818)]
070409 15:37:46 [Note] /home/miguel/dbs/5.1f/libexec/mysqld: ready for connections.
Version: '5.2.4-falcon-alpha-debug'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution
070409 15:37:46 [Note] SCHEDULER: Loaded 0 events
<cut>

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1267315824 (LWP 8906)]
0x084b1573 in NfsStorageTable::external_lock (this=0x9542fd8, thd=0x9524550, lock_type=0) at ha_falcon.cpp:1530
1530                            if (storageConnection->startImplicitTransaction(thd->variables.tx_isolation))
(gdb) bt full
#0  0x084b1573 in NfsStorageTable::external_lock (this=0x9542fd8, thd=0x9524550, lock_type=0) at ha_falcon.cpp:1530
        _db_func_ = 0x883d919 "lock_external"
        _db_file_ = 0x883d3d1 "lock.cc"
        _db_level_ = 13
        _db_framep_ = (char **) 0x304
#1  0x083b5e4c in handler::ha_external_lock (this=0x9542fd8, thd=0x9524550, lock_type=0) at handler.cc:3613
        _db_func_ = 0x883d919 "lock_external"
<cut>
[14 Jun 2007 15:23] Jim Starkey
I can't say when or how we fixed it, but I can't reproduce the crash.