[MDEV-593] LP:955089 - Failure to open a CSV table will give Out-of-memory message even if the problem is not related to memory Created: 2012-03-14  Updated: 2022-09-08

Status: Open
Project: MariaDB Server
Component/s: None
Affects Version/s: 5.1.67, 5.2.14, 5.3.12, 5.5.36, 10.0.9
Fix Version/s: 5.5

Type: Bug Priority: Trivial
Reporter: Sergei Petrunia Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: Launchpad, upstream

Attachments: XML File LPexportBug955089.xml    

 Description   

One can get out-of-memory errors when the server fails to open a CSV table. That is, an error like this:

120314 15:10:06 [ERROR] Failed to write to mysql.general_log: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space

can be caused by:

  • stopping the server
  • removing the general_log.CSV file (but leaving general_log.CSM and general_log.frm files intact)
  • starting the server back
  • running some query.

The error message is rather misleading.

One can think that missing CSV file is a very much edge-case. However, the whole point of using CSV storage engine is to allow the user to mess with the server's data files, so I could argue that missing table.CSV file is a more frequent scenario than, say, a missing table.MYI file.



 Comments   
Comment by Sergei Petrunia [ 2012-03-14 ]

Re: Failure to open a CSV table will give Out-of-memory message even if the problem is not related to memory
The "Out of memory" error is caused by his code in storage/csv/ha_tina.cc:

int ha_tina::open(const char *name, int mode, uint open_options)
{
DBUG_ENTER("ha_tina::open");

if (!(share= get_share(name, table)))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);

^^^ That is, all errors that occur when opening a table are reported back as "Out of memory".

Comment by Rasmus Johansson (Inactive) [ 2012-03-14 ]

Launchpad bug id: 955089

Comment by Elena Stepanova [ 2014-03-26 ]

MTR test case. Run as ./mysql-test-run.pl mdev593 --mysqld=--log-output=TABLE

let $datadir = `SELECT @@datadir`;
 
--enable_reconnect
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
wait
EOF
--shutdown_server 60
 
--remove_file $datadir/mysql/general_log.CSV
 
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
restart
EOF
 
--source include/wait_until_connected_again.inc
 
SELECT @@log_output;

Also reproducible on MySQL 5.1-5.7.

Generated at Thu Feb 08 06:29:54 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.