mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
Fix Bug #59390 row_merge_build_indexes() fails to register tmpfd for PFS
rb://582 approved by Marko
This commit is contained in:
parent
5d2239e118
commit
fe4e126849
1 changed files with 47 additions and 23 deletions
|
@ -2158,13 +2158,15 @@ row_merge_drop_temp_indexes(void)
|
|||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Create a merge file. */
|
||||
static
|
||||
void
|
||||
row_merge_file_create(
|
||||
/*==================*/
|
||||
merge_file_t* merge_file) /*!< out: merge file structure */
|
||||
Creates temperary merge files, and if UNIV_PFS_IO defined, register
|
||||
the file descriptor with Performance Schema.
|
||||
@return File descriptor */
|
||||
UNIV_INLINE
|
||||
int
|
||||
row_merge_file_create_low(void)
|
||||
/*===========================*/
|
||||
{
|
||||
int fd;
|
||||
#ifdef UNIV_PFS_IO
|
||||
/* This temp file open does not go through normal
|
||||
file APIs, add instrumentation to register with
|
||||
|
@ -2176,14 +2178,46 @@ row_merge_file_create(
|
|||
"Innodb Merge Temp File",
|
||||
__FILE__, __LINE__);
|
||||
#endif
|
||||
merge_file->fd = innobase_mysql_tmpfile();
|
||||
fd = innobase_mysql_tmpfile();
|
||||
#ifdef UNIV_PFS_IO
|
||||
register_pfs_file_open_end(locker, fd);
|
||||
#endif
|
||||
return(fd);
|
||||
}
|
||||
/*********************************************************************//**
|
||||
Create a merge file. */
|
||||
static
|
||||
void
|
||||
row_merge_file_create(
|
||||
/*==================*/
|
||||
merge_file_t* merge_file) /*!< out: merge file structure */
|
||||
{
|
||||
merge_file->fd = row_merge_file_create_low();
|
||||
merge_file->offset = 0;
|
||||
merge_file->n_rec = 0;
|
||||
#ifdef UNIV_PFS_IO
|
||||
register_pfs_file_open_end(locker, merge_file->fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Destroy a merge file. And de-register the file from Performance Schema
|
||||
if UNIV_PFS_IO is defined. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
row_merge_file_destroy_low(
|
||||
/*=======================*/
|
||||
int fd) /*!< in: merge file descriptor */
|
||||
{
|
||||
#ifdef UNIV_PFS_IO
|
||||
struct PSI_file_locker* locker = NULL;
|
||||
PSI_file_locker_state state;
|
||||
register_pfs_file_io_begin(&state, locker,
|
||||
fd, 0, PSI_FILE_CLOSE,
|
||||
__FILE__, __LINE__);
|
||||
#endif
|
||||
close(fd);
|
||||
#ifdef UNIV_PFS_IO
|
||||
register_pfs_file_io_end(locker, 0);
|
||||
#endif
|
||||
}
|
||||
/*********************************************************************//**
|
||||
Destroy a merge file. */
|
||||
static
|
||||
|
@ -2192,20 +2226,10 @@ row_merge_file_destroy(
|
|||
/*===================*/
|
||||
merge_file_t* merge_file) /*!< out: merge file structure */
|
||||
{
|
||||
#ifdef UNIV_PFS_IO
|
||||
struct PSI_file_locker* locker = NULL;
|
||||
PSI_file_locker_state state;
|
||||
register_pfs_file_io_begin(&state, locker, merge_file->fd, 0, PSI_FILE_CLOSE,
|
||||
__FILE__, __LINE__);
|
||||
#endif
|
||||
if (merge_file->fd != -1) {
|
||||
close(merge_file->fd);
|
||||
row_merge_file_destroy_low(merge_file->fd);
|
||||
merge_file->fd = -1;
|
||||
}
|
||||
|
||||
#ifdef UNIV_PFS_IO
|
||||
register_pfs_file_io_end(locker, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
|
@ -2600,7 +2624,7 @@ row_merge_build_indexes(
|
|||
row_merge_file_create(&merge_files[i]);
|
||||
}
|
||||
|
||||
tmpfd = innobase_mysql_tmpfile();
|
||||
tmpfd = row_merge_file_create_low();
|
||||
|
||||
/* Reset the MySQL row buffer that is used when reporting
|
||||
duplicate keys. */
|
||||
|
@ -2642,7 +2666,7 @@ row_merge_build_indexes(
|
|||
}
|
||||
|
||||
func_exit:
|
||||
close(tmpfd);
|
||||
row_merge_file_destroy_low(tmpfd);
|
||||
|
||||
for (i = 0; i < n_indexes; i++) {
|
||||
row_merge_file_destroy(&merge_files[i]);
|
||||
|
|
Loading…
Reference in a new issue