Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.1(EOL)
-
None
-
Linux x64
-
10.1.11
Description
We noticed after upgrading from MySQL 5.5 to MariaDB 10.1 that looping over a table through the C API doesn't return all rows. It only happens on a sufficiently large table.
Attached is a small Python script which produces such a table, and a C program that triggers the bug. Running make will compile the C file and produce a file setup.sql which you can import in your database. When it is imported, MYSQLPASSWORD= ./main -s (other flags might be needed, see ./main -h) shows the number of rows received, which should of course agree with SELECT COUNT(*) FROM foo; from the mysql client.
We have bisected the issue to this commit: https://github.com/MariaDB/server/commit/7a387c01586ae5107f2c2c64d3cdd420de83e168
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
Description |
We noticed after upgrading from MySQL 5.5 to MariaDB 10.1 that looping over a table through the C API doesn't return all rows. It only happens on a sufficiently large table. Attached is a small Python script which produces such a table, and a C program that triggers the bug. Running {{make}} will compile the C file and produce a file {{setup.sql}} which you can import in your database. When it is imported, {{MYSQLPASSWORD= ./main -s}} shows the number of rows received, which should of course agree with {{SELECT COUNT(*) FROM foo;}} from the mysql client. We have bisected the issue to this commit: https://github.com/MariaDB/server/commit/7a387c01586ae5107f2c2c64d3cdd420de83e168 |
We noticed after upgrading from MySQL 5.5 to MariaDB 10.1 that looping over a table through the C API doesn't return all rows. It only happens on a sufficiently large table. Attached is a small Python script which produces such a table, and a C program that triggers the bug. Running {{make}} will compile the C file and produce a file {{setup.sql}} which you can import in your database. When it is imported, {{MYSQLPASSWORD= ./main -s}} (other flags might be needed, see {{./main -h}}) shows the number of rows received, which should of course agree with {{SELECT COUNT(*) FROM foo;}} from the mysql client. We have bisected the issue to this commit: https://github.com/MariaDB/server/commit/7a387c01586ae5107f2c2c64d3cdd420de83e168 |
Description |
We noticed after upgrading from MySQL 5.5 to MariaDB 10.1 that looping over a table through the C API doesn't return all rows. It only happens on a sufficiently large table. Attached is a small Python script which produces such a table, and a C program that triggers the bug. Running {{make}} will compile the C file and produce a file {{setup.sql}} which you can import in your database. When it is imported, {{MYSQLPASSWORD= ./main -s}} (other flags might be needed, see {{./main -h}}) shows the number of rows received, which should of course agree with {{SELECT COUNT(*) FROM foo;}} from the mysql client. We have bisected the issue to this commit: https://github.com/MariaDB/server/commit/7a387c01586ae5107f2c2c64d3cdd420de83e168 |
We noticed after upgrading from MySQL 5.5 to MariaDB 10.1 that looping over a table through the C API doesn't return all rows. It only happens on a sufficiently large table. Attached is a small Python script which produces such a table, and a C program that triggers the bug. Running {{make}} will compile the C file and produce a file {{setup.sql}} which you can import in your database. When it is imported, {{MYSQLPASSWORD= ./main -s}} (other flags might be needed, see {{./main -h}}) shows the number of rows received, which should of course agree with {{SELECT COUNT(\*) FROM foo;}} from the mysql client. We have bisected the issue to this commit: https://github.com/MariaDB/server/commit/7a387c01586ae5107f2c2c64d3cdd420de83e168 |
Affects Version/s | 10.1.4 [ 18400 ] |
Fix Version/s | 10.1 [ 16100 ] |
Affects Version/s | 10.1 [ 16100 ] | |
Affects Version/s | 10.1.4 [ 18400 ] |
Assignee | Sergei Golubchik [ serg ] |
Sprint | 10.1.11 [ 30 ] |
Rank | Ranked lower |
Assignee | Sergei Golubchik [ serg ] | Michael Widenius [ monty ] |
Status | Open [ 1 ] | In Progress [ 3 ] |
Component/s | Optimizer [ 10200 ] | |
Component/s | Storage Engine - Aria [ 10126 ] | |
Fix Version/s | 10.1.11 [ 21202 ] | |
Fix Version/s | 10.1 [ 16100 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 73347 ] | MariaDB v4 [ 149952 ] |
What happens here:
if (insert_order)
{
uint last_insert_page= share->last_insert_page;
uint byte= 6 * (last_insert_page / 16);
first_pattern= last_insert_page % 16;
DBUG_ASSERT(data + byte < end);
data+= byte;
}