Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
66b869d6
Commit
66b869d6
authored
Oct 07, 2009
by
Luis Soares
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BUG#40611, BUG#44779: reverted in mysql-5.1-rep+2.
parent
3c98da71
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
14 additions
and
174 deletions
+14
-174
mysql-test/suite/binlog/r/binlog_max_extension.result
mysql-test/suite/binlog/r/binlog_max_extension.result
+0
-8
mysql-test/suite/binlog/t/binlog_max_extension.test
mysql-test/suite/binlog/t/binlog_max_extension.test
+0
-92
sql/log.cc
sql/log.cc
+14
-61
sql/log.h
sql/log.h
+0
-13
No files found.
mysql-test/suite/binlog/r/binlog_max_extension.result
deleted
100644 → 0
View file @
3c98da71
call mtr.add_suppression("Next log extension: 2147483647. Remaining log filename extensions: 0.");
call mtr.add_suppression("Log filename extension number exhausted:");
call mtr.add_suppression("Can't generate a unique log-filename");
RESET MASTER;
FLUSH LOGS;
Warnings:
Warning 1098 Can't generate a unique log-filename master-bin.(1-999)
mysql-test/suite/binlog/t/binlog_max_extension.test
deleted
100644 → 0
View file @
3c98da71
# BUG#40611: MySQL cannot make a binary log after sequential number beyond
# unsigned long.
#
# Problem statement
# =================
#
# Extension for log file names might be created with negative
# numbers (when counter used would wrap around), causing server
# failure when incrementing -00001 (reaching number 000000
# extension).
#
# Test
# ====
# This tests aims at testing the a patch that removes negatives
# numbers from log name extensions and checks that the server
# reports gracefully that the limit has been reached.
#
# It instruments index file to point to a log file close to
# the new maximum and calls flush logs to get warning.
#
call
mtr
.
add_suppression
(
"Next log extension: 2147483647. Remaining log filename extensions: 0."
);
call
mtr
.
add_suppression
(
"Log filename extension number exhausted:"
);
call
mtr
.
add_suppression
(
"Can't generate a unique log-filename"
);
--
source
include
/
have_log_bin
.
inc
RESET
MASTER
;
--
let
$MYSQLD_DATADIR
=
`select @@datadir`
###############################################
# check hitting maximum file name extension:
###############################################
##########
# Prepare
##########
# 1. Stop master server
--
write_file
$MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
1.
expect
wait
EOF
--
shutdown_server
10
--
source
include
/
wait_until_disconnected
.
inc
# 2. Prepare log and index file
--
copy_file
$MYSQLD_DATADIR
/
master
-
bin
.
index
$MYSQLD_DATADIR
/
master
-
bin
.
index
.
orig
--
copy_file
$MYSQLD_DATADIR
/
master
-
bin
.
000001
$MYSQLD_DATADIR
/
master
-
bin
.
2147483646
--
append_file
$MYSQLD_DATADIR
/
master
-
bin
.
index
master
-
bin
.
2147483646
EOF
# 3. Restart the server
--
append_file
$MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
1.
expect
restart
EOF
--
enable_reconnect
--
source
include
/
wait_until_connected_again
.
inc
###########
# Assertion
###########
# assertion: should throw warning
FLUSH
LOGS
;
##############
# Clean up
##############
# 1. Stop the server
--
write_file
$MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
1.
expect
wait
EOF
--
shutdown_server
10
--
source
include
/
wait_until_disconnected
.
inc
# 2. Undo changes to index and log files
--
remove_file
$MYSQLD_DATADIR
/
master
-
bin
.
index
--
copy_file
$MYSQLD_DATADIR
/
master
-
bin
.
index
.
orig
$MYSQLD_DATADIR
/
master
-
bin
.
index
--
remove_file
$MYSQLD_DATADIR
/
master
-
bin
.
index
.
orig
--
remove_file
$MYSQLD_DATADIR
/
master
-
bin
.
2147483646
--
remove_file
$MYSQLD_DATADIR
/
master
-
bin
.
2147483647
# 3. Restart the server
--
append_file
$MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
1.
expect
restart
EOF
--
enable_reconnect
--
source
include
/
wait_until_connected_again
.
inc
sql/log.cc
View file @
66b869d6
...
...
@@ -53,7 +53,7 @@ LOGGER logger;
MYSQL_BIN_LOG
mysql_bin_log
(
&
sync_binlog_period
);
static
bool
test_if_number
(
const
char
*
str
,
u
long
*
res
,
bool
allow_wildcards
);
long
*
res
,
bool
allow_wildcards
);
static
int
binlog_init
(
void
*
p
);
static
int
binlog_close_connection
(
handlerton
*
hton
,
THD
*
thd
);
static
int
binlog_savepoint_set
(
handlerton
*
hton
,
THD
*
thd
,
void
*
sv
);
...
...
@@ -1835,27 +1835,22 @@ static void setup_windows_event_source()
/**
Find a unique filename for 'filename.#'.
Set '#' to the number next to the maximum found in the most
recent log file extension.
This function will return nonzero if: (i) the generated name
exceeds FN_REFLEN; (ii) if the number of extensions is exhausted;
or (iii) some other error happened while examining the filesystem.
Set '#' to a number as low as possible.
@return
nonzero if not possible to get unique filename
.
nonzero if not possible to get unique filename
*/
static
int
find_uniq_filename
(
char
*
name
)
{
long
number
;
uint
i
;
char
buff
[
FN_REFLEN
]
,
ext_buf
[
FN_REFLEN
]
;
char
buff
[
FN_REFLEN
];
struct
st_my_dir
*
dir_info
;
reg1
struct
fileinfo
*
file_info
;
ulong
max_found
=
0
,
next
=
0
,
number
=
0
;
ulong
max_found
=
0
;
size_t
buf_length
,
length
;
char
*
start
,
*
end
;
int
error
=
0
;
DBUG_ENTER
(
"find_uniq_filename"
);
length
=
dirname_part
(
buff
,
name
,
&
buf_length
);
...
...
@@ -1863,15 +1858,15 @@ static int find_uniq_filename(char *name)
end
=
strend
(
start
);
*
end
=
'.'
;
length
=
(
size_t
)
(
end
-
start
+
1
);
length
=
(
size_t
)
(
end
-
start
+
1
);
if
(
!
(
dir_info
=
my_dir
(
buff
,
MYF
(
MY_DONT_SORT
))))
if
(
!
(
dir_info
=
my_dir
(
buff
,
MYF
(
MY_DONT_SORT
))))
{
// This shouldn't happen
strmov
(
end
,
".1"
);
// use name+1
DBUG_RETURN
(
1
);
DBUG_RETURN
(
0
);
}
file_info
=
dir_info
->
dir_entry
;
for
(
i
=
dir_info
->
number_off_files
;
i
--
;
file_info
++
)
for
(
i
=
dir_info
->
number_off_files
;
i
--
;
file_info
++
)
{
if
(
bcmp
((
uchar
*
)
file_info
->
name
,
(
uchar
*
)
start
,
length
)
==
0
&&
test_if_number
(
file_info
->
name
+
length
,
&
number
,
0
))
...
...
@@ -1881,44 +1876,9 @@ static int find_uniq_filename(char *name)
}
my_dirend
(
dir_info
);
/* check if reached the maximum possible extension number */
if
((
max_found
==
MAX_LOG_UNIQUE_FN_EXT
))
{
sql_print_error
(
"Log filename extension number exhausted: %06lu. \
Please fix this by archiving old logs and \
updating the index files."
,
max_found
);
error
=
1
;
goto
end
;
}
next
=
max_found
+
1
;
sprintf
(
ext_buf
,
"%06lu"
,
next
);
*
end
++=
'.'
;
/*
Check if the generated extension size + the file name exceeds the
buffer size used. If one did not check this, then the filename might be
truncated, resulting in error.
*/
if
(((
strlen
(
ext_buf
)
+
(
end
-
name
))
>=
FN_REFLEN
))
{
sql_print_error
(
"Log filename too large: %s%s (%lu). \
Please fix this by archiving old logs and updating the \
index files."
,
name
,
ext_buf
,
(
strlen
(
ext_buf
)
+
(
end
-
name
)));
error
=
1
;
goto
end
;
}
sprintf
(
end
,
"%06lu"
,
next
);
/* print warning if reaching the end of available extensions. */
if
((
next
>
(
MAX_LOG_UNIQUE_FN_EXT
-
LOG_WARN_UNIQUE_FN_EXT_LEFT
)))
sql_print_warning
(
"Next log extension: %lu. \
Remaining log filename extensions: %lu. \
Please consider archiving some logs."
,
next
,
(
MAX_LOG_UNIQUE_FN_EXT
-
next
));
end:
DBUG_RETURN
(
error
);
sprintf
(
end
,
"%06ld"
,
max_found
+
1
);
DBUG_RETURN
(
0
);
}
...
...
@@ -2117,13 +2077,6 @@ int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name)
{
if
(
find_uniq_filename
(
new_name
))
{
/*
This should be treated as error once propagation of error further
up in the stack gets proper handling.
*/
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_NO_UNIQUE_LOGFILE
,
ER
(
ER_NO_UNIQUE_LOGFILE
),
log_name
);
sql_print_error
(
ER
(
ER_NO_UNIQUE_LOGFILE
),
log_name
);
return
1
;
}
...
...
@@ -4841,11 +4794,11 @@ void MYSQL_BIN_LOG::set_max_size(ulong max_size_arg)
@retval
1 String is a number
@retval
0
String is not a numbe
r
0
Erro
r
*/
static
bool
test_if_number
(
register
const
char
*
str
,
u
long
*
res
,
bool
allow_wildcards
)
long
*
res
,
bool
allow_wildcards
)
{
reg2
int
flag
;
const
char
*
start
;
...
...
sql/log.h
View file @
66b869d6
...
...
@@ -121,19 +121,6 @@ extern TC_LOG_DUMMY tc_log_dummy;
#define LOG_CLOSE_TO_BE_OPENED 2
#define LOG_CLOSE_STOP_EVENT 4
/*
Maximum unique log filename extension.
Note: setting to 0x7FFFFFFF due to atol windows
overflow/truncate.
*/
#define MAX_LOG_UNIQUE_FN_EXT 0x7FFFFFFF
/*
Number of warnings that will be printed to error log
before extension number is exhausted.
*/
#define LOG_WARN_UNIQUE_FN_EXT_LEFT 1000
class
Relay_log_info
;
typedef
struct
st_log_info
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment