Bug #34164 falcon_bug_22151 test runs into assertion
Submitted: 30 Jan 2008 13:11 Modified: 2 May 2008 1:36
Reporter: Vladislav Vaintroub Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S3 (Non-critical)
Version:6.0.5BK OS:Any
Assigned to: Kevin Lewis
Tags: assert serializable isolation
Triage: D1 (Critical) / R2 (Low) / E2 (Low)

[30 Jan 2008 13:11] Vladislav Vaintroub
Description:
running the test  runs into assertion in Transaction.cpp,
Transaction::visible() on this line
	// This is REPEATABLE_READ
-->	ASSERT (IS_REPEATABLE_READ(isolationLevel));

the isolationLevel is 
TRANSACTION_SERIALIZABLE     = 16

How to repeat:
Have falcon compiled in debug mode:
reenable the test, as it is currently disabled in mysql-test/suite/falcon/t/disabled.def

perl mysql-test-run.pl --suite=falcon falcon_bug_22151

Suggested fix:
Don't know. If SERIALIZABLE is not supported, make SET TRANSACTION ISOLATION LEVEL return error. If it is supported, remove or correct the ASSERT statement.
[30 Jan 2008 13:25] Godofredo Miguel Solorzano
Thank you for the bug report.
[30 Jan 2008 15:30] Ann Harrison
Falcon does not yet support serializable mode.  It does return
an error from ha_falcon.cpp under some circumstances, but apparently
misses this case.
[30 Jan 2008 19:37] Kevin Lewis
Falcon returns a warning when you try to use an unsupported isolation level.  

1568; Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ instead.

As the warning indicates, it should use the default isolation instead.  It should not crash.  I think at some previous time it did actually convert serializable to repeatable-read.  But now it asserts!  This fix is easy and low-risk
[31 Jan 2008 17:17] Kevin Lewis
Added code to allow serializable mode and read-uncommitted mode to be automatically switched with the current version of repeatable read.  That is, it looks at the current value of falcon_consistent_read and sets the the atctual isolation accordingly.
[31 Jan 2008 17:20] 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/41515

ChangeSet@1.2794, 2008-01-31 11:19:15-06:00, klewis@klewis-mysql. +2 -0
  Bug#34164 - Added code to allow serializable mode and read-uncommitted 
  mode to be automatically switched with the current version of repeatable read.  
  That is, it looks at the current value of falcon_consistent_read and sets 
  the the atctual isolation accordingly.
[31 Jan 2008 17:50] Hakan Küçükyılmaz
What does that mean in practice? If I run in REPEATABLE-READ and set the isolation level to SERIALIZABLE, then Falcon will silently ignore it and stay with REPEATABLE-READ?
[31 Jan 2008 22:09] Kevin Lewis
In practive, when someone chooses a serializable transaction and then access tables in Falcon, there will be a warning on each transactional SQL statement. But then, Falcon will use its default repeatable read isolation instead.  No errors, just warnings.  For example;

SHOW VARIABLES LIKE 'tx_isolation';
Variable_name	Value
tx_isolation	SERIALIZABLE
SHOW VARIABLES LIKE 'falcon_consistent_read';
Variable_name	Value
falcon_consistent_read	OFF
START TRANSACTION;
SELECT * FROM t1;
a	b
Warnings:
Warning	1568	Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ instead.
INSERT INTO t1 VALUES (1,1);
Warnings:
Warning	1568	Falcon does not support SERIALIZABLE ISOLATION, using REPEATABLE READ instead.
COMMIT;
SELECT * FROM t1;
a	b
1	1
[31 Jan 2008 22:49] 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/41531

ChangeSet@1.2796, 2008-01-31 16:48:23-06:00, klewis@klewis-mysql. +3 -0
  Bug#34164 - Add a testcase and improve code to convert serializable
  and read-uncommitted modes into the current version of repeatable-read.
[5 Feb 2008 7:06] 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/41687

ChangeSet@1.2804, 2008-02-05 01:05:47-06:00, klewis@klewis-mysql. +3 -0
  Bug#34164 - Re-wrote test case for 34164 so that it displays 
  the autoselected repetable-read mode in a more straightforward
  manner, using updates on previously committed record
  instead of inserts.  Settings are made more carefully
  using 4 new connections.
[11 Feb 2008 20:54] Kevin Lewis
Patch is in mysql-6.0-falcon-team and mysql-6.0-release version 6.0.4
[12 Mar 2008 23:02] Bugs System
Pushed into 6.0.4-alpha
[2 May 2008 1:36] Paul Dubois
Noted in 6.0.4 changelog.

Attempting to set the isolation level to a value not supported by
Falcon caused a Falcon assertion failure.