Bug #114133 dd corrupt assert lob0impl.cc:1237:total_read == len || total_read == avail_lob
Submitted: 27 Feb 2024 2:39 Modified: 27 Feb 2024 12:38
Reporter: Mikhail Izioumtchenko Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S3 (Non-critical)
Version:8.3.0-debug OS:Oracle Linux (v9, WSL v2 over Windows11)
Assigned to: CPU Architecture:x86

[27 Feb 2024 2:39] Mikhail Izioumtchenko
Description:
Problem 1: mysqld-debug restart was consistently interrupted by this assertion:

Assertion failure: lob0impl.cc:1237:total_read == len || total_read == avail_lob

Problem 2: I have replaced mysqld-debug with mysqld. It started without any assertion. However data dictionary would appear to be corrupted as no new table could be created:

 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > create table t(i int primary key);
ERROR: 1062: Duplicate entry '189' for key 'tablespaces.PRIMARY'
 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > create table t(i int primary key);
ERROR: 1062: Duplicate entry '190' for key 'tablespaces.PRIMARY'

How to repeat:
The assert went away after restarting with non-debugging mysqld. That is, when I switched to mysqld-debug the assert never came back.

Inability to create a new table stayed so it can be reproduced on a small dataset I saved.
[27 Feb 2024 2:56] Mikhail Izioumtchenko
mysqld error log

Attachment: error.log (application/octet-stream, text), 26.13 KiB.

[27 Feb 2024 2:57] Mikhail Izioumtchenko
SQL session: can't create table, non existant table, more

Attachment: b.out (application/octet-stream, text), 2.46 KiB.

[27 Feb 2024 3:13] Mikhail Izioumtchenko
a few extra comments, see attached files:

1.not much info to go on as I was mostly busy deploying MySQL and my stuff on my repaired laptop: Windows 10, WSLv2, OEL v9, brand new memory card.
WSL over Windows 10 is not nearly as good as it is over W11.
I have real OEL on the same laptop but it's for the near future.

2. As such aside of assert and no useful backtrace this is known:
- the test tries to create tables tt1 to tt8 in schema gts1, random structure,
then executes random SQL. It may kill mysqld in the process.
- there are no logs from before the assert. There is no logs of any SQL executed. Table structure cannot be obtained because part of the bug is that the  tables pretend not to exist:

 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > show tables;
+----------------+
| Tables_in_gts1 |
+----------------+
| tt1            |
| tt2            |
| tt3            |
| tt4            |
| tt5            |
| tt6            |
+----------------+
6 rows in set (0.0015 sec)
 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > show create table tt1;
ERROR: 1146: Table 'gts1.tt1' doesn't exist

There is no core dump.

3. Puzzling ever incrementing duplicate PK on CREATE TABLE:

 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > create table t(i int primary key);
ERROR: 1062: Duplicate entry '189' for key 'tablespaces.PRIMARY'
 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > create table t(i int primary key);
ERROR: 1062: Duplicate entry '190' for key 'tablespaces.PRIMARY'
 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > use t

4. I stumbled on a workaround of sorts for table creation. Things improved once I have dropped an existing table. The problem of false 'table does not exist' never fixed itself, though.

 MySQL  127.0.0.1:4302+ ssl  t  SQL > show tables;
+-------------+
| Tables_in_t |
+-------------+
| t           |
+-------------+
1 row in set (0.0015 sec)
 MySQL  127.0.0.1:4302+ ssl  t  SQL > drop table t;
Query OK, 0 rows affected (0.0583 sec)
 MySQL  127.0.0.1:4302+ ssl  t  SQL > show tables;
Empty set (0.0015 sec)
 MySQL  127.0.0.1:4302+ ssl  t  SQL > create table a(i int primary key);
Query OK, 0 rows affected (0.0238 sec)
 MySQL  127.0.0.1:4302+ ssl  t  SQL > create table b(i int primary key);
Query OK, 0 rows affected (0.0578 sec)
 MySQL  127.0.0.1:4302+ ssl  t  SQL > use gts1;
Default schema set to `gts1`.
Fetching global names, object names from `gts1` for auto-completion... Press ^C to stop.
 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > create table t(i int primary key);
Query OK, 0 rows affected (0.0569 sec)
 MySQL  127.0.0.1:4302+ ssl  gts1  SQL > show create table gts1\G
ERROR: 1146: Table 'gts1.gts1' doesn't exist

5. Not sure that the original LOB-related assert is the same bug as the data dictionary problems.
[27 Feb 2024 12:38] MySQL Verification Team
Hi Mr. Izioumtchenko,

Thank you for your bug report.

We have tried to repeat the problems that you are reporting, but without success.

We tried it also on Oracle Linux, again without success.

We tried with 8.3.0 production binary, with 8.3.0 debug binary and 8.30 debug binary with memory-checking software, all without any success.

Hence, we need a fully repeatable test case, step by step, so that we could further process your bug report.

From what you report it seems that your tablespaces or data dictionary is corrupted, but we are not able to repeat that.

We do advise you to restore all your data to the newly created data directory and try again.

Can't repeat.