MDEV-33763 : Buffered error logging for Galera #3672
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is adaptation of feature by Zsolt Parragi [email protected] for Percona XtraDB Cluster to MariaDB. Original feature is documented at https://www.percona.com/blog/introducing-buffered-error-logging-in-percona-server-for-mysql/.
In this adaptation variable names are changed and integration to server code is different.
Commit adds new variables
wsrep_buffered_error_log_buffer_size ulong default 0 dynamic
Size of buffer used in buffered error logging. Because
wsrep debug setting produces large number of messages
it is recomended to set this variable around 1-100Mb.
When wsrep_buffered_error_log_buffer_size is specified and non zero, a buffer is
allocated with the specified size, and log messages are
written there. This includes also wsrep debug messages.
When this buffer gets full, the server shuts down, or crashes, the
buffer is written to wsrep_buffered_error_log_filename.
When log files reaches configured size limit log is rotated and
only configured amount of log files are kept.
This is useful in situations where debug logs create lots of output and
slow down normal server operation, but are helpful for figuring out
issues, as writing to a memory buffer has less overhead.
Warning: When this feature is used server will write big number
of messages to error log. Therefore, it is recomended to store
these logs on separate location to avoid filling up your
database disk. Furthermore, it is recomended to set up
logrotate to delete old log files.
Detailed changes:
wsrep.h
Log printing is now controlled by wsrep_debug_mode variable and
controlled by wsrep_debug and wsrep_buffered_error_log_buffer_size
variables.
sql/log.cc
Added sql_print_debug to log wsrep debug messages (WSREP_DEBUG()).
print_buffer_to_file
Actual buffered error logging if enabled will happen in this
function.
sql/mysqld.cc
Buffered error logging is initialized and shutdown here if it is
configured.
sql/signal_handler.cc
If buffered error logging is enabled remaining buffer is written
before continuing signal handling.
sql/sys_vars.cc
New variables are defined here.
sql/wsrep_buffered_error_log.cc
sql/wsrep_buffered_error_log.h
Buffered error log implementation using logger API (mysys/file_logger.c).
sql/wsrep_var.cc
New variables update and check functions.
Description
TODO: fill description here
Release Notes
TODO: What should the release notes say about this change?
Include any changed system variables, status variables or behaviour. Optionally list any https://mariadb.com/kb/ pages that need changing.
How can this PR be tested?
TODO: modify the automated test suite to verify that the PR causes MariaDB to behave as intended.
Consult the documentation on "Writing good test cases".
If the changes are not amenable to automated testing, please explain why not and carefully describe how to test manually.
Basing the PR against the correct MariaDB version
main
branch.PR quality check