Unstable changed page tracking tests due to trying to delete a non-existent file | Valgrind error at log_online_should_overwrite()
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Percona Server moved to https://jira.percona.com/projects/PS |
Fix Released
|
Critical
|
Laurynas Biveinis | ||
5.1 |
Invalid
|
Medium
|
Unassigned | ||
5.5 |
Invalid
|
Medium
|
Unassigned | ||
5.6 |
Fix Released
|
Critical
|
Laurynas Biveinis |
Bug Description
A number of bitmap tests fail on certain Jenkins slaves as follows:
innodb.
innodb.
innodb.
innodb.
innodb.
Test ended at 2013-05-21 10:50:42
Server log is:
2013-05-21 17:50:41 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_
2013-05-21 17:50:42 25398 [Note] Plugin 'FEDERATED' is disabled.
2013-05-21 17:50:42 2aeb6bfcb170 InnoDB: Warning: Using innodb_
2013-05-21 17:50:42 25398 [Note] InnoDB: The InnoDB memory heap is disabled
2013-05-21 17:50:42 25398 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2013-05-21 17:50:42 25398 [Note] InnoDB: Compressed tables use zlib 1.2.3
2013-05-21 17:50:42 25398 [Note] InnoDB: CPU does not support crc32 instructions
2013-05-21 17:50:42 25398 [Note] InnoDB: Using Linux native AIO
2013-05-21 17:50:42 25398 [Note] InnoDB: Initializing buffer pool, size = 8.0M
2013-05-21 17:50:42 25398 [Note] InnoDB: Completed initialization of buffer pool
2013-05-21 17:50:42 25398 [Note] InnoDB: Highest supported file format is Barracuda.
2013-05-21 17:50:42 2aeb6bfcb170 InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
2013-05-21 17:50:42 2aeb6bfcb170 InnoDB: File name ./ib_modified_
2013-05-21 17:50:42 2aeb6bfcb170 InnoDB: File operation call: 'delete' returned OS error 71.
2013-05-21 17:50:42 2aeb6bfcb170 InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
2013-05-21 17:50:42 25398 [ERROR] InnoDB: cannot create './ib_modified_
Related branches
- Stewart Smith (community): Approve
-
Diff: 1321 lines (+545/-145)18 files modifiedPercona-Server/mysql-test/suite/innodb/r/percona_changed_page_bmp.result (+8/-1)
Percona-Server/mysql-test/suite/innodb/r/percona_changed_pages.result (+59/-33)
Percona-Server/mysql-test/suite/innodb/r/percona_changed_pages_empty.result (+1/-0)
Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp.test (+34/-4)
Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_flush.test (+2/-2)
Percona-Server/mysql-test/suite/innodb/t/percona_changed_pages.test (+100/-28)
Percona-Server/mysql-test/suite/innodb/t/percona_changed_pages_empty.test (+4/-2)
Percona-Server/mysql-test/suite/sys_vars/r/all_vars.result (+0/-2)
Percona-Server/mysql-test/suite/sys_vars/r/innodb_max_changed_pages_basic.result (+78/-0)
Percona-Server/mysql-test/suite/sys_vars/t/innodb_max_changed_pages_basic.test (+60/-0)
Percona-Server/storage/innobase/handler/i_s.cc (+8/-6)
Percona-Server/storage/innobase/include/log0log.h (+3/-1)
Percona-Server/storage/innobase/include/log0online.h (+2/-0)
Percona-Server/storage/innobase/include/os0file.h (+4/-2)
Percona-Server/storage/innobase/log/log0log.cc (+13/-3)
Percona-Server/storage/innobase/log/log0online.cc (+165/-56)
Percona-Server/storage/innobase/log/log0recv.cc (+4/-3)
Percona-Server/storage/innobase/os/os0file.cc (+0/-2)
The code path in question must be this
- a call to log_online_ should_ overwrite( bitmap file) finding a 0-sized file :
/* Currently, it's OK to overwrite 0-sized files only */ get_status( path, &file_info, false);
success = os_file_
return success && file_info.size == 0LL;
- then log_online_ start_bitmap_ file() trying to delete it and failing because the file is not found, and then aborting the file create.
/* Check for an old file that should be deleted first */ should_ overwrite( log_bmp_ sys->out. name)) {
if (log_online_
success = static_cast<ibool>( delete( innodb_ file_bmp_ key,
log_ bmp_sys- >out.name) );
os_file_
}
...
if (UNIV_UNLIKELY( !success) ) {
/* The following call prints an error message */ get_last_ error(TRUE) ; IB_LOG_ LEVEL_ERROR, sys->out. name); sys->out. file = -1;
os_file_
ib_logf(
"cannot create \'%s\'\n", log_bmp_
log_bmp_
return FALSE;
}
The immediate fix is to ignore file-not-found for the delete attempt. This would be correct, but the fact that the file disappears between checking and deleting is still very suspicious and needs investigating.