MDEV-12230 include/my_sys.h:600:43: error: unknown type name ‘PSI_file_key’" when -DWITHOUT_SERVER=1

cherry-pick 2c2bd8c155 (MDEV-12261 build failure without P_S) from 10.0
This commit is contained in:
Sergei Golubchik 2017-04-18 12:35:05 +02:00
parent 0001049be0
commit 4fe65ca33a
7 changed files with 61 additions and 17 deletions

View File

@ -580,8 +580,7 @@ extern File my_create_with_symlink(const char *linkname, const char *filename,
myf MyFlags); myf MyFlags);
extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags); extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
extern int my_symlink(const char *content, const char *linkname, myf MyFlags); extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
extern int my_handler_delete_with_symlink(PSI_file_key key, const char *name, extern int my_handler_delete_with_symlink(const char *filename, myf sync_dir);
const char *ext, myf sync_dir);
extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags); extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags);
extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset, extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset,

View File

@ -434,6 +434,20 @@
inline_mysql_file_create_with_symlink(P1, P2, P3, P4, P5) inline_mysql_file_create_with_symlink(P1, P2, P3, P4, P5)
#endif #endif
/**
@def mysql_file_delete_with_symlink(K, P1, P2, P3)
Instrumented delete with symbolic link.
@c mysql_file_delete_with_symlink is a replacement
for @c my_handler_delete_with_symlink.
*/
#ifdef HAVE_PSI_INTERFACE
#define mysql_file_delete_with_symlink(K, P1, P2, P3) \
inline_mysql_file_delete_with_symlink(K, __FILE__, __LINE__, P1, P2, P3)
#else
#define mysql_file_delete_with_symlink(K, P1, P2, P3) \
inline_mysql_file_delete_with_symlink(P1, P2, P3)
#endif
/** /**
@def mysql_file_rename_with_symlink(K, P1, P2, P3) @def mysql_file_rename_with_symlink(K, P1, P2, P3)
Instrumented rename with symbolic link. Instrumented rename with symbolic link.
@ -1305,6 +1319,7 @@ inline_mysql_file_rename(
return result; return result;
} }
static inline File static inline File
inline_mysql_file_create_with_symlink( inline_mysql_file_create_with_symlink(
#ifdef HAVE_PSI_INTERFACE #ifdef HAVE_PSI_INTERFACE
@ -1334,6 +1349,38 @@ inline_mysql_file_create_with_symlink(
return file; return file;
} }
static inline int
inline_mysql_file_delete_with_symlink(
#ifdef HAVE_PSI_INTERFACE
PSI_file_key key, const char *src_file, uint src_line,
#endif
const char *name, const char *ext, myf flags)
{
int result;
char fullname[FN_REFLEN];
#ifdef HAVE_PSI_INTERFACE
struct PSI_file_locker *locker= NULL;
PSI_file_locker_state state;
#endif
fn_format(fullname, name, "", ext, MY_UNPACK_FILENAME | MY_APPEND_EXT);
#ifdef HAVE_PSI_INTERFACE
if (likely(PSI_server != NULL))
{
locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_DELETE,
fullname, &locker);
if (likely(locker != NULL))
PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line);
}
#endif
result= my_handler_delete_with_symlink(fullname, flags);
#ifdef HAVE_PSI_INTERFACE
if (likely(locker != NULL))
PSI_server->end_file_wait(locker, (size_t) 0);
#endif
return result;
}
static inline int static inline int
inline_mysql_file_rename_with_symlink( inline_mysql_file_rename_with_symlink(
#ifdef HAVE_PSI_INTERFACE #ifdef HAVE_PSI_INTERFACE

View File

@ -170,22 +170,20 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
in this case both the symlink and the symlinked file are deleted, in this case both the symlink and the symlinked file are deleted,
but only if the symlinked file is not in the datadir. but only if the symlinked file is not in the datadir.
*/ */
int my_handler_delete_with_symlink(PSI_file_key key, const char *name, int my_handler_delete_with_symlink(const char *filename, myf sync_dir)
const char *ext, myf sync_dir)
{ {
char orig[FN_REFLEN], real[FN_REFLEN]; char real[FN_REFLEN];
int res= 0; int res= 0;
DBUG_ENTER("my_handler_delete_with_symlink"); DBUG_ENTER("my_handler_delete_with_symlink");
fn_format(orig, name, "", ext, MY_UNPACK_FILENAME | MY_APPEND_EXT); if (my_is_symlink(filename))
if (my_is_symlink(orig))
{ {
/* /*
Delete the symlinked file only if the symlink is not Delete the symlinked file only if the symlink is not
pointing into datadir. pointing into datadir.
*/ */
if (!(my_realpath(real, orig, MYF(0)) || mysys_test_invalid_symlink(real))) if (!(my_realpath(real, filename, MYF(0)) || mysys_test_invalid_symlink(real)))
res= mysql_file_delete(key, real, MYF(MY_NOSYMLINKS | MY_WME | sync_dir)); res= my_delete(real, MYF(MY_NOSYMLINKS | sync_dir));
} }
DBUG_RETURN(mysql_file_delete(key, orig, MYF(MY_WME | sync_dir)) || res); DBUG_RETURN(my_delete(filename, MYF(sync_dir)) || res);
} }

View File

@ -3381,7 +3381,7 @@ int handler::delete_table(const char *name)
for (const char **ext=bas_ext(); *ext ; ext++) for (const char **ext=bas_ext(); *ext ; ext++)
{ {
if (my_handler_delete_with_symlink(key_file_misc, name, *ext, 0)) if (mysql_file_delete_with_symlink(key_file_misc, name, *ext, 0))
{ {
if (my_errno != ENOENT) if (my_errno != ENOENT)
{ {

View File

@ -1085,7 +1085,7 @@ static bool find_db_tables_and_rm_known_files(THD *thd, MY_DIR *dirp,
We ignore ENOENT error in order to skip files that was deleted We ignore ENOENT error in order to skip files that was deleted
by concurrently running statement like REPAIR TABLE ... by concurrently running statement like REPAIR TABLE ...
*/ */
if (my_handler_delete_with_symlink(key_file_misc, filePath, "", MYF(0)) && if (mysql_file_delete_with_symlink(key_file_misc, filePath, "", MYF(0)) &&
my_errno != ENOENT) my_errno != ENOENT)
{ {
my_error(EE_DELETE, MYF(0), filePath, my_errno); my_error(EE_DELETE, MYF(0), filePath, my_errno);
@ -1206,7 +1206,7 @@ long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path)
continue; continue;
} }
strxmov(filePath, org_path, "/", file->name, NullS); strxmov(filePath, org_path, "/", file->name, NullS);
if (my_handler_delete_with_symlink(key_file_misc, filePath, "", MYF(MY_WME))) if (mysql_file_delete_with_symlink(key_file_misc, filePath, "", MYF(MY_WME)))
{ {
goto err; goto err;
} }

View File

@ -86,8 +86,8 @@ int maria_delete_table_files(const char *name, myf sync_dir)
{ {
DBUG_ENTER("maria_delete_table_files"); DBUG_ENTER("maria_delete_table_files");
if (my_handler_delete_with_symlink(key_file_kfile, name, MARIA_NAME_IEXT, sync_dir) || if (mysql_file_delete_with_symlink(key_file_kfile, name, MARIA_NAME_IEXT, sync_dir) ||
my_handler_delete_with_symlink(key_file_dfile, name, MARIA_NAME_DEXT, sync_dir)) mysql_file_delete_with_symlink(key_file_dfile, name, MARIA_NAME_DEXT, sync_dir))
DBUG_RETURN(my_errno); DBUG_RETURN(my_errno);
DBUG_RETURN(0); DBUG_RETURN(0);
} }

View File

@ -28,8 +28,8 @@ int mi_delete_table(const char *name)
check_table_is_closed(name,"delete"); check_table_is_closed(name,"delete");
#endif #endif
if (my_handler_delete_with_symlink(mi_key_file_kfile, name, MI_NAME_IEXT, 0) || if (mysql_file_delete_with_symlink(mi_key_file_kfile, name, MI_NAME_IEXT, 0) ||
my_handler_delete_with_symlink(mi_key_file_dfile, name, MI_NAME_DEXT, 0)) mysql_file_delete_with_symlink(mi_key_file_dfile, name, MI_NAME_DEXT, 0))
DBUG_RETURN(my_errno); DBUG_RETURN(my_errno);
DBUG_RETURN(0); DBUG_RETURN(0);
} }