Skip to content

MDEV-33763 : Buffered error logging for Galera #472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: 11.7
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion include/m_ctype.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
enum loglevel {
ERROR_LEVEL= 0,
WARNING_LEVEL= 1,
INFORMATION_LEVEL= 2
INFORMATION_LEVEL= 2,
DEBUG_LEVEL= 3
};

#ifdef __cplusplus
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_audit.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_auth.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_data_type.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_encryption.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_ftparser.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_function.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
14 changes: 12 additions & 2 deletions include/mysql/plugin_password_validation.h.pp
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;
void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
}
extern "C" {
extern struct my_md5_service_st {
Expand Down
45 changes: 34 additions & 11 deletions include/mysql/service_logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,22 @@
@file
logger service

Log file with rotation implementation.
Log file with buffered writing and rotation implementation.

This service implements logging with possible rotation
of the log files. Interface intentionally tries to be similar to FILE*
related functions.
This service implements logging with possible buffered writing
and rotation of the log files. Interface intentionally tries to
be similar to FILE* related functions.

So that one can open the log with logger_open(), specifying
the limit on the logfile size and the rotations number.
the limit on the logfile size, possible buffer size and the
rotations number.

If buffer size is given, messages are written to buffer.
If size of messages in buffer grow over the specified
limit, they are written to logfile.

Then it's possible to write messages to the log with
logger_printf or logger_vprintf functions.
logger_printf, logger_vprintf or logger_write functions.

As the size of the logfile grows over the specified limit,
it is renamed to 'logfile.1'. The former 'logfile.1' becomes
Expand Down Expand Up @@ -63,37 +68,55 @@ extern struct logger_service_st {
void (*logger_init_mutexes)();
LOGGER_HANDLE* (*open)(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int (*close)(LOGGER_HANDLE *log);
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...);
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
int (*rotate)(LOGGER_HANDLE *log);
int (*rotate)(LOGGER_HANDLE *log, const unsigned int n_rotations);
int (*rename_file)(LOGGER_HANDLE *log, const char *path);
int (*resize_buffer)(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int (*resize_size)(LOGGER_HANDLE *log, unsigned long long size_limit);
int (*flush)(LOGGER_HANDLE *log);
} *logger_service;

#ifdef MYSQL_DYNAMIC_PLUGIN

#define logger_init_mutexes logger_service->logger_init_mutexes
#define logger_open(path, size_limit, rotations) \
(logger_service->open(path, size_limit, rotations))
#define logger_open(path, size_limit, buffer_limit, rotations) \
(logger_service->open(path, size_limit, buffer_limit, rotations))
#define logger_close(log) (logger_service->close(log))
#define logger_rotate(log) (logger_service->rotate(log))
#define logger_rotate(log, rotations) (logger_service->rotate(log, rotations))
#define logger_vprintf(log, fmt, argptr) (logger_service->\
vprintf(log, fmt, argptr))
#define logger_printf (*logger_service->printf)
#define logger_write(log, buffer, size) \
(logger_service->write(log, buffer, size))
#define logger_rename_file(log, path) \
(logger_service->rename_file(log, path))
#define logger_resize_buffer(log, buffer_limit) \
(logger_service->resize_buffer(log, path))
#define logger_resize_size(log, size_limit) \
(logger_service->resize_size(log, size_limit))
#define logger_flush(log) \
(logger_service->flush(log))
#else

void logger_init_mutexes();
LOGGER_HANDLE *logger_open(const char *path,
unsigned long long size_limit,
unsigned long long buffer_limit,
unsigned int rotations);
int logger_close(LOGGER_HANDLE *log);
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr);
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...);
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
int logger_rotate(LOGGER_HANDLE *log);
int logger_rotate(LOGGER_HANDLE *log, const unsigned int n_rotations);
int logger_rename_file(LOGGER_HANDLE *log, const char* path);
int logger_resize_buffer(LOGGER_HANDLE *log, unsigned long long buffer_limit);
int logger_resize_size(LOGGER_HANDLE *log, unsigned long long size_limit);
int logger_flush(LOGGER_HANDLE *log);
#endif


Expand Down
14 changes: 10 additions & 4 deletions include/wsrep.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@
#define IF_WSREP(A,B) A
#define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A)

extern ulong wsrep_debug; // wsrep_mysqld.cc
/** wsrep_debug_mode is controlled by wsrep_debug and
wsrep_buffered_error_log_buffer_size variables.
If any of these are set we output also debug messages. */
extern ulong wsrep_debug_mode; // wsrep_var.cc

extern void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...);

#define WSREP_DEBUG(...) \
if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
#define WSREP_DEBUG(...) \
if (wsrep_debug_mode) \
WSREP_LOG(sql_print_debug, ##__VA_ARGS__)

#define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
#define WSREP_WARN(...) WSREP_LOG(sql_print_warning, ##__VA_ARGS__)
#define WSREP_ERROR(...) WSREP_LOG(sql_print_error, ##__VA_ARGS__)
Expand All @@ -47,7 +53,7 @@ extern void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...);
);

#define WSREP_LOG_CONFLICT(bf_thd, victim_thd, bf_abort) \
if (wsrep_debug || wsrep_log_conflicts) \
if (wsrep_debug_mode || wsrep_log_conflicts) \
{ \
WSREP_INFO("cluster conflict due to %s for threads:", \
(bf_abort) ? "high priority abort" : "certification failure" \
Expand Down
2 changes: 1 addition & 1 deletion mysql-test/include/galera_variables_ok.inc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
--disable_query_log

--let $galera_variables_ok = `SELECT COUNT(*) = 51 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep%'`
--let $galera_variables_ok = `SELECT COUNT(*) = 53 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep%'`

--if (!$galera_variables_ok) {
--skip Galera number of variables has changed!
Expand Down
2 changes: 1 addition & 1 deletion mysql-test/include/galera_variables_ok_debug.inc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
--disable_query_log

--let $galera_variables_ok = `SELECT COUNT(*) = 51 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep%'`
--let $galera_variables_ok = `SELECT COUNT(*) = 53 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep%'`

--if (!$galera_variables_ok) {
--skip Galera number of variables has changed!
Expand Down
Loading