Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Readyset returns wrong results if restart happens #1275

Open
altmannmarcelo opened this issue Jun 21, 2024 · 0 comments
Open

Readyset returns wrong results if restart happens #1275

altmannmarcelo opened this issue Jun 21, 2024 · 0 comments

Comments

@altmannmarcelo
Copy link
Contributor

Description

Sport this while testing perf of hash joins for straddle joins. If we have a cache and then restart readyset, when the migration is happening and we keep running the same query, it returns wrong results.

for f in $(seq 1 20000)
do
  mysql -e "INSERT INTO tb1 VALUES (${f}, '10', now())" test
  mysql -e "INSERT INTO tb2 VALUES (10, ${f}, '${f}', now())" test
  mysql -e "INSERT INTO tb2 VALUES (10, ${f}, '${f}', now())" test
done

Readyset (requires you to start with --enable-experimental-straddled-joins):

CREATE CACHE FROM SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;

mysql> SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
+--------------------------+
| count(`test`.`tb1`.`ID`) |
+--------------------------+
|                    20000 |
+--------------------------+
1 row in set (0,05 sec)

Restart RS and execute the query multiple times:

Note: Result with column name COUNT(tb1.ID) are from upstream, results with `count(`test`.`tb1`.`ID`)` are from readyset

mysql> SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    8
Current database: *** NONE ***

+---------------+
| COUNT(tb1.ID) |
+---------------+
|         20000 |
+---------------+
1 row in set (0,03 sec)

mysql>
mysql>
mysql> SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
+---------------+
| COUNT(tb1.ID) |
+---------------+
|         20000 |
+---------------+
1 row in set (0,02 sec)

mysql> SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
+---------------+
| COUNT(tb1.ID) |
+---------------+
|         20000 |
+---------------+
1 row in set (0,02 sec)

mysql> SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
+---------------+
| COUNT(tb1.ID) |
+---------------+
|         20000 |
+---------------+
1 row in set (0,02 sec)

mysql> SELECT COUNT(tb1.ID) FROM tb1 JOIN tb2 ON tb2.id1 = tb1.ID WHERE tb1.name = '10' AND tb2.ID = 10;
+--------------------------+
| count(`test`.`tb1`.`ID`) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (3,88 sec)

Change in user-visible behavior

Requires documentation change

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant