mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge 10.1 into 10.2
This commit is contained in:
@ -318,13 +318,28 @@ int wsrep_write_cache(wsrep_t* const wsrep,
|
||||
|
||||
void wsrep_dump_rbr_buf(THD *thd, const void* rbr_buf, size_t buf_len)
|
||||
{
|
||||
char filename[PATH_MAX]= {0};
|
||||
int len= snprintf(filename, PATH_MAX, "%s/GRA_%lld_%lld.log",
|
||||
int len= snprintf(NULL, 0, "%s/GRA_%lld_%lld.log",
|
||||
wsrep_data_home_dir, (longlong) thd->thread_id,
|
||||
(longlong) wsrep_thd_trx_seqno(thd));
|
||||
if (len >= PATH_MAX)
|
||||
if (len < 0)
|
||||
{
|
||||
WSREP_ERROR("RBR dump path too long: %d, skipping dump.", len);
|
||||
WSREP_ERROR("snprintf error: %d, skipping dump.", len);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
len doesn't count the \0 end-of-string. Use len+1 below
|
||||
to alloc and pass as an argument to snprintf.
|
||||
*/
|
||||
|
||||
char *filename= (char *)malloc(len+1);
|
||||
int len1= snprintf(filename, len+1, "%s/GRA_%lld_%lld.log",
|
||||
wsrep_data_home_dir, (longlong) thd->thread_id,
|
||||
(long long)wsrep_thd_trx_seqno(thd));
|
||||
|
||||
if (len > len1)
|
||||
{
|
||||
WSREP_ERROR("RBR dump path truncated: %d, skipping dump.", len);
|
||||
free(filename);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -343,6 +358,7 @@ void wsrep_dump_rbr_buf(THD *thd, const void* rbr_buf, size_t buf_len)
|
||||
WSREP_ERROR("Failed to open file '%s': %d (%s)",
|
||||
filename, errno, strerror(errno));
|
||||
}
|
||||
free(filename);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -448,19 +464,34 @@ void wsrep_dump_rbr_buf_with_header(THD *thd, const void *rbr_buf,
|
||||
{
|
||||
DBUG_ENTER("wsrep_dump_rbr_buf_with_header");
|
||||
|
||||
char filename[PATH_MAX]= {0};
|
||||
File file;
|
||||
IO_CACHE cache;
|
||||
Log_event_writer writer(&cache);
|
||||
Format_description_log_event *ev=NULL;
|
||||
|
||||
int len= my_snprintf(filename, PATH_MAX, "%s/GRA_%lld_%lld_v2.log",
|
||||
wsrep_data_home_dir, (longlong) thd->thread_id,
|
||||
(long long) wsrep_thd_trx_seqno(thd));
|
||||
|
||||
if (len >= PATH_MAX)
|
||||
longlong thd_trx_seqno= (long long)wsrep_thd_trx_seqno(thd);
|
||||
int len= snprintf(NULL, 0, "%s/GRA_%lld_%lld_v2.log",
|
||||
wsrep_data_home_dir, (longlong)thd->thread_id,
|
||||
thd_trx_seqno);
|
||||
/*
|
||||
len doesn't count the \0 end-of-string. Use len+1 below
|
||||
to alloc and pass as an argument to snprintf.
|
||||
*/
|
||||
char *filename;
|
||||
if (len < 0 || !(filename= (char*)malloc(len+1)))
|
||||
{
|
||||
WSREP_ERROR("RBR dump path too long: %d, skipping dump.", len);
|
||||
WSREP_ERROR("snprintf error: %d, skipping dump.", len);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
int len1= snprintf(filename, len+1, "%s/GRA_%lld_%lld_v2.log",
|
||||
wsrep_data_home_dir, (longlong) thd->thread_id,
|
||||
thd_trx_seqno);
|
||||
|
||||
if (len > len1)
|
||||
{
|
||||
WSREP_ERROR("RBR dump path truncated: %d, skipping dump.", len);
|
||||
free(filename);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -501,6 +532,7 @@ cleanup2:
|
||||
end_io_cache(&cache);
|
||||
|
||||
cleanup1:
|
||||
free(filename);
|
||||
mysql_file_close(file, MYF(MY_WME));
|
||||
|
||||
if (!thd->wsrep_applier) delete ev;
|
||||
|
Reference in New Issue
Block a user