Bug #31321 Partial transaction results with INSERT ... SELECT and cluster replication

Submitted: 1 Oct 2007 17:00 Modified: 6 Dec 2007 17:31
Reporter: Hartmut Holzgraefe Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Documentation Severity:S3 (Non-critical)
Version:5.1, 6.0 OS:Any
Assigned to: Jon Stephens CPU Architecture:Any
Tags: count(), ndb, replication

[1 Oct 2007 17:00] Hartmut Holzgraefe
Description:
Simple 2 node, 2 replica cluster replication setup, using default configuration values.

On the master i create a table 

  CREATE TABLE t1 (id int primary key auto_increment, t text) engine=ndb;

and populate it with 

  INSERT INTO t1 VALUES (0, NULL);

then repeated

  BEGIN; INSERT INTO t1 SELECT 0, NULL FROM t1; COMMIT;

until it reports 16384 lines inserted, so that the table t1 has 32768 rows in total.

Then i set up the slave and start it. While it catches up with the master i do repeated 

  SELECT COUNT(*) FROM t1; 

calls on the slave.

I would expect to only see 1, 2, 4, 8, ... 16384, 32768 as count results, but between 16384 and 32768 there is one moment where the SELECT blocks for a while instead of returning the result right away, and the result returned is something like 23617, 23695, 23956, ... 

The next SELECT COUNT(*) FROM t1 will then return the expected 32768

ndb_use_exact_count is ON and the tx_isolation level is REPEATABLE-READ

  

How to repeat:
see above

Suggested fix:
make sure only real transaction results are visible, do not expose intermediate counts
[2 Oct 2007 5:58] Jonas Oreland
out select count(*) is does only support dirty_read
i.e you should be able to get same result on master.

a program doing read with locks (shared/exclusive) should
  not be able to see "half" epochs...

but this is not "provable" using count(*)....
[2 Oct 2007 10:00] Jon Stephens
Changed category to Docs, reassigned to myself following discussion with Hartmut.
[6 Dec 2007 17:31] Jon Stephens
Discussed with Jonas, updated 5.1/6.0 Cluster Limitations with info he provided.
[3 Mar 2011 23:00] Roberto Spadim
any idea when it should be 'fixed'? maybe a option allowing dirt/non dirt reads (serialized?)

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.052 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.