Skip to content

Commit 7251cbc

Browse files
Alexey Botchkovvuvova
authored andcommitted
MDEV-34680 Asynchronous and Buffered Logging for Audit Plugin.
Buffering with the IO_CACHE added to the file logger.
1 parent 26c8bc9 commit 7251cbc

19 files changed

+505
-271
lines changed

include/mysql/plugin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ typedef struct st_mysql_xid MYSQL_XID;
8181
*/
8282

8383
/** MySQL plugin interface version */
84-
#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0104
84+
#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0105
8585

8686
/** MariaDB plugin interface version */
8787
#define MARIA_PLUGIN_INTERFACE_VERSION 0x010f

include/mysql/plugin_audit.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/plugin_auth.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/plugin_data_type.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/plugin_encryption.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/plugin_ftparser.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/plugin_function.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/plugin_password_validation.h.pp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,36 @@
128128
void (*logger_init_mutexes)();
129129
LOGGER_HANDLE* (*open)(const char *path,
130130
unsigned long long size_limit,
131-
unsigned int rotations);
131+
unsigned int rotations, size_t buffer_size);
132132
int (*close)(LOGGER_HANDLE *log);
133133
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
134134
__attribute__((format(printf, 2, 0)));
135135
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
136136
__attribute__((format(printf, 2, 3)));
137-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
137+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
138138
int (*rotate)(LOGGER_HANDLE *log);
139+
int (*sync)(LOGGER_HANDLE *log);
140+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
141+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
142+
unsigned long long new_file_limit);
143+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
139144
} *logger_service;
140145
void logger_init_mutexes();
141146
LOGGER_HANDLE *logger_open(const char *path,
142147
unsigned long long size_limit,
143-
unsigned int rotations);
148+
unsigned int rotations, size_t buffer_size);
144149
int logger_close(LOGGER_HANDLE *log);
145150
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
146151
__attribute__((format(printf, 2, 0)));
147152
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
148153
__attribute__((format(printf, 2, 3)));
149-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
154+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
150155
int logger_rotate(LOGGER_HANDLE *log);
156+
int logger_sync(LOGGER_HANDLE *log);
157+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
158+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
159+
unsigned long long new_file_limit);
160+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
151161
}
152162
extern "C" {
153163
extern struct my_md5_service_st {

include/mysql/service_logger.h

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,41 +64,58 @@ extern struct logger_service_st {
6464
void (*logger_init_mutexes)();
6565
LOGGER_HANDLE* (*open)(const char *path,
6666
unsigned long long size_limit,
67-
unsigned int rotations);
67+
unsigned int rotations, size_t buffer_size);
6868
int (*close)(LOGGER_HANDLE *log);
6969
int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
7070
ATTRIBUTE_FORMAT_FPTR(printf, 2, 0);
7171
int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...)
7272
ATTRIBUTE_FORMAT_FPTR(printf, 2, 3);
73-
int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size);
73+
int (*write)(LOGGER_HANDLE *log, const void *data, size_t size);
7474
int (*rotate)(LOGGER_HANDLE *log);
75+
int (*sync)(LOGGER_HANDLE *log);
76+
int (*resize_buffer)(LOGGER_HANDLE *log, size_t new_buffer_size);
77+
int (*set_filesize_limit)(LOGGER_HANDLE *log,
78+
unsigned long long new_file_limit);
79+
int (*set_rotations)(LOGGER_HANDLE *log, unsigned int new_rotations);
7580
} *logger_service;
7681

7782
#ifdef MYSQL_DYNAMIC_PLUGIN
7883

7984
#define logger_init_mutexes logger_service->logger_init_mutexes
80-
#define logger_open(path, size_limit, rotations) \
81-
(logger_service->open(path, size_limit, rotations))
85+
#define logger_open(path, size_limit, rotations, buffer_size) \
86+
(logger_service->open(path, size_limit, rotations, buffer_size))
8287
#define logger_close(log) (logger_service->close(log))
8388
#define logger_rotate(log) (logger_service->rotate(log))
8489
#define logger_vprintf(log, fmt, argptr) (logger_service->\
8590
vprintf(log, fmt, argptr))
8691
#define logger_printf (*logger_service->printf)
87-
#define logger_write(log, buffer, size) \
88-
(logger_service->write(log, buffer, size))
92+
#define logger_write(log, data, size) \
93+
(logger_service->write(log, data, size))
94+
#define logger_sync(log) (logger_service->sync(log))
95+
#define logger_resize_buffer(log, new_buffer_size) \
96+
(logger_service->resize_buffer(log, new_buffer_size))
97+
#define logger_set_filesize_limit(log, new_file_limit) \
98+
(logger_service->set_filesize_limit(log, new_file_limit))
99+
#define logger_set_rotations(log, new_rotations) \
100+
(logger_service->set_rotations(log, new_rotations))
89101
#else
90102

91103
void logger_init_mutexes();
92104
LOGGER_HANDLE *logger_open(const char *path,
93105
unsigned long long size_limit,
94-
unsigned int rotations);
106+
unsigned int rotations, size_t buffer_size);
95107
int logger_close(LOGGER_HANDLE *log);
96108
int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr)
97109
ATTRIBUTE_FORMAT(printf, 2, 0);
98110
int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...)
99111
ATTRIBUTE_FORMAT(printf, 2, 3);
100-
int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size);
112+
int logger_write(LOGGER_HANDLE *log, const void *data, size_t size);
101113
int logger_rotate(LOGGER_HANDLE *log);
114+
int logger_sync(LOGGER_HANDLE *log);
115+
int logger_resize_buffer(LOGGER_HANDLE *log, size_t new_buffer_size);
116+
int logger_set_filesize_limit(LOGGER_HANDLE *log,
117+
unsigned long long new_file_limit);
118+
int logger_set_rotations(LOGGER_HANDLE *log, unsigned int new_rotations);
102119
#endif
103120

104121

include/service_versions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#define VERSION_base64 0x0100
2727
#define VERSION_encryption 0x0300
2828
#define VERSION_encryption_scheme 0x0100
29-
#define VERSION_logger 0x0200
29+
#define VERSION_logger 0x0300
3030
#define VERSION_my_crypt 0x0101
3131
#define VERSION_my_md5 0x0100
3232
#define VERSION_my_print_error 0x0200

0 commit comments

Comments
 (0)