Commit fed1d21b authored by unknown's avatar unknown

Post review fix (serg).

Added more checks.


storage/maria/ha_maria.cc:
  Let control size to my_get_opts().
storage/maria/ma_loghandler.c:
  Let control size to my_get_opts().
  Removed unused function.
  Assert to check log file size.
  Additional compilation warnings.
storage/maria/ma_loghandler.h:
  New log size bounds.
  Removed unused function.
storage/maria/unittest/ma_test_loghandler-t.c:
  Fixed test to confirm new log size bounds.
parent 1ec645bd
......@@ -2693,7 +2693,7 @@ static void update_log_file_size(MYSQL_THD thd,
void *var_ptr, void *save)
{
uint32 size= (uint32)((ulong)(*(long *)save));
size= translog_set_file_size(size);
translog_set_file_size(size);
*(ulong *)var_ptr= size;
}
......
......@@ -29,7 +29,7 @@
/* number of opened log files in the pagecache (should be at least 2) */
#define OPENED_FILES_NUM 3
/* records buffer size (should be LOG_PAGE_SIZE * n) */
/* records buffer size (should be TRANSLOG_PAGE_SIZE * n) */
#define TRANSLOG_WRITE_BUFFER (1024*1024)
/* min chunk length */
#define TRANSLOG_MIN_CHUNK 3
......@@ -2812,18 +2812,6 @@ static my_bool translog_truncate_log(TRANSLOG_ADDRESS addr)
DBUG_RETURN(0);
}
/**
@brief round correctly transaction log size
@return maximum possible log size less or equal then given one
*/
static uint32 translog_round_log_size(uint32 size)
{
size= (size - (size % TRANSLOG_PAGE_SIZE));
return max(size, TRANSLOG_MIN_FILE_SIZE);
}
/*
Initialize transaction log
......@@ -2857,6 +2845,9 @@ my_bool translog_init(const char *directory,
my_bool version_changed= 0;
DBUG_ENTER("translog_init");
DBUG_ASSERT(translog_inited == 0);
compile_time_assert(TRANSLOG_MIN_FILE_SIZE >
TRANSLOG_WRITE_BUFFER * TRANSLOG_BUFFERS_NO);
compile_time_assert(TRANSLOG_WRITE_BUFFER % TRANSLOG_PAGE_SIZE == 0);
loghandler_init(); /* Safe to do many times */
......@@ -2890,9 +2881,12 @@ my_bool translog_init(const char *directory,
}
log_descriptor.in_buffers_only= LSN_IMPOSSIBLE;
DBUG_ASSERT(log_file_max_size % TRANSLOG_PAGE_SIZE == 0 &&
log_file_max_size >= TRANSLOG_MIN_FILE_SIZE &&
log_file_max_size <= 0xffffffffL);
/* max size of one log size (for new logs creation) */
log_file_size= log_descriptor.log_file_max_size=
translog_round_log_size(log_file_max_size);
log_file_max_size;
/* server version */
log_descriptor.server_version= server_version;
/* server ID */
......@@ -7218,11 +7212,15 @@ uint32 translog_get_file_size()
@return Returns actually set transaction log size
*/
uint32 translog_set_file_size(uint32 size)
void translog_set_file_size(uint32 size)
{
uint32 res;
DBUG_ENTER("translog_set_file_size");
translog_lock();
res= log_descriptor.log_file_max_size= translog_round_log_size(size);
DBUG_PRINT("enter", ("Size: %lu", (ulong) size));
DBUG_ASSERT(size % TRANSLOG_PAGE_SIZE == 0 &&
size >= TRANSLOG_MIN_FILE_SIZE &&
size <= 0xffffffffL);
log_descriptor.log_file_max_size= size;
/* if current file longer then finish it*/
if (LSN_OFFSET(log_descriptor.horizon) >= log_descriptor.log_file_max_size)
{
......@@ -7231,6 +7229,6 @@ uint32 translog_set_file_size(uint32 size)
translog_buffer_unlock(old_buffer);
}
translog_unlock();
return (res);
DBUG_VOID_RETURN;
}
......@@ -21,7 +21,7 @@
/* transaction log default file size */
#define TRANSLOG_FILE_SIZE (1024*1024*1024)
/* minimum possible transaction log size */
#define TRANSLOG_MIN_FILE_SIZE (1024*1024*4)
#define TRANSLOG_MIN_FILE_SIZE (1024*1024*8)
/* transaction log default flags (TODO: make it global variable) */
#define TRANSLOG_DEFAULT_FLAGS 0
......@@ -313,8 +313,7 @@ extern my_bool translog_purge_at_flush();
extern uint32 translog_get_first_file(TRANSLOG_ADDRESS horizon);
extern uint32 translog_get_first_needed_file();
extern char *translog_filename_by_fileno(uint32 file_no, char *path);
extern uint32 translog_get_file_size();
extern uint32 translog_set_file_size(uint32 size);
extern void translog_set_file_size(uint32 size);
/* record parts descriptor */
struct st_translog_parts
......
......@@ -18,12 +18,12 @@ static TRN *trn= &dummy_transaction_object;
#ifdef LONG_LOG_TEST
#define LOG_FLAGS 0
#define LOG_FILE_SIZE (1024L*1024L)
#define LOG_FILE_SIZE (1024L*1024L*8)
#define ITERATIONS (1600*4)
#else
#define LOG_FLAGS (TRANSLOG_SECTOR_PROTECTION | TRANSLOG_PAGE_CRC)
#define LOG_FILE_SIZE (1024L*1024L*3L)
#define LOG_FILE_SIZE (1024L*1024L*8L)
#define ITERATIONS 1600
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment