Description:
Hello, I found a bug in 8.0.35-cluster version of MYSQL cluster. It will cause "error 499".
The detail is as follow. It need at least 4 nodes.
Node 1:
Poc:
```
update mytest100.test6 set
column1 = cast(coalesce(mytest100.test6.column4,
mytest100.test6.column3) as float),
column2 = case when EXISTS (
select ref_19.column2 as c0,
ref_19.column59 as c1,
mytest100.test6.column4 as c2,
ref_20.column2 as c3
from
mytest100.test7 as ref_19
inner join mytest100.test4 as ref_20
on (true)
where ref_19.column1 is NULL
limit 13) then mytest100.test6.column4 else mytest100.test6.column4 end
;
```
result:
```
1713655678.495958 to 1713655679.821072 received:mysql_store_result() failed:Lock wait timeout exceeded; try restarting transaction
```
Node 2:
Poc:
```
update mytest100.test6 set column2 = mytest100.test6.column4;
```
result:
```
1713655678.494852 to 1713655679.826581 received:mysql_store_result() failed:Got temporary error 499 'Scan take over error, restart scan transaction' from NDBCLUSTER
```
Node 3:
Poc:
```
UPDATE mytest100.test6 SET column2 = 31.84, column3 = 63.81, column4 = 94.55 WHERE ((column2 > NULL) OR column1 < 18.93) AND column1 < 11.61;
```
result:
```
1713655678.498583 to 1713655679.838596 received:Query executed successfully, but no result set was returned.
```
Node 4:
Poc:
```
UPDATE mytest100.test6 SET column1 = 97.34, column2 = 74.85, column4 = 90.49 WHERE (column2 > NULL) OR column3 < 63.94;
```
result:
```
1713655678.476508 to 1713655678.548571 received:Query executed successfully, but no result set was returned.
```
This bug requires injecting pocs from node1 to node3 at the same time as node4's poc is executing, and if a lock timeout can be triggered, there is a high probability that the bug will be reproduced.
Architecture Information:
'''
[NDBD DEFAULT]
NoOfReplicas =2
DataMemory = 512M
IndexMemory = 64M
[NDB_MGMD]
NodeId=1
hostname =192.172.10.8
datadir =/var/lib/mysql-cluster
[NDBD]
NodeId =2
hostname =192.172.10.9
datadir =/usr/local/mysql-cluster/data
NodeGroup=0
[NDBD]
NodeId =3
hostname =192.172.10.10
datadir =/usr/local/mysql-cluster/data
NodeGroup=1
[NDBD]
NodeId =4
hostname =192.172.10.11
datadir =/usr/local/mysql-cluster/data
NodeGroup=0
[NDBD]
NodeId =5
hostname =192.172.10.12
datadir =/usr/local/mysql-cluster/data
NodeGroup=1
[mysqld]
NodeId =6
hostname =192.172.10.9
[mysqld]
NodeId =7
hostname =192.172.10.10
[mysqld]
NodeId =8
hostname =192.172.10.11
[mysqld]
NodeId =9
hostname =192.172.10.12
'''
How to repeat:
导入我提供的data文件,然后按一定次序执行poc,就可以复现。
Suggested fix:
It looks like there is a problem with the scanning part of update, possibly related to the temp table.