Spec-Zone .ru
спецификации, руководства, описания, API
|
У плагинов сервера MySQL есть доступ к серверу "службы". Интерфейс служб представляет функциональность сервера, которую могут вызвать плагины. Это дополняет сменный API и имеет эти характеристики:
Службы включают плагинам к коду доступа в сервере, используя вызовы обычной функции.
Службы переносимы и работа над многократными платформами.
Интерфейс включает механизм управления версиями так, чтобы версии службы, поддерживаемые сервером, могли быть проверены во время загрузки против сменных версий. Управление версиями защищает от несовместимостей между версией услуги, которую сервер предоставляет и версия службы, ожидаемой или необходимой плагином.
Текущие службы включают следующий, и другие могут быть реализованы:
my_plugin_log_service
: Служба, которая позволяет
плагинам сообщить об ошибках и определить сообщения об ошибках. Сервер пишет сообщения в журнал ошибок.
my_snprintf
: Форматирующая строку служба, которая
приводит к непротиворечивым результатам через платформы.
my_thd_scheduler
: Служба для плагинов, чтобы выбрать
планировщика потока.
mysql_string
: Служба для обработки строк.
thd_alloc
: Служба выделения памяти.
thd_wait
: Служба для плагинов, чтобы сообщить, когда
они засыпают или останавливаются.
Сменный интерфейс служб отличается от сменного API следующим образом:
Сменный API позволяет плагинам использоваться сервером. Инициатива вызова находится с сервером, чтобы вызвать плагины. Это позволяет плагинам расширить функциональность сервера или регистр, чтобы получить уведомления об обработке сервера.
Сменный интерфейс служб позволяет плагинам вызвать код в сервере. Инициатива вызова находится с плагинами, чтобы вызвать служебные функции. Это добавляет функциональность, уже реализованную в сервере, который будет использоваться многими плагинами; они не должны индивидуально реализовать это непосредственно.
Для разработчиков, которые хотят изменить сервер, чтобы добавить новую службу, см.
Остаток от этого раздела описывает, как плагин использует функциональность сервера, которая доступна как сервис.
См. также источник для плагина "демона" в качестве примера, который использует my_snprintf
служба. В пределах исходного распределения MySQL тот плагин располагается в plugin/daemon_example
каталог.
Чтобы определить, какие службы существуют и что функционирует, они обеспечивают, заглядывают include/mysql
каталог исходного распределения MySQL. Соответствующие файлы:
plugin.h
включает services.h
.
services.h
заголовок "зонтика", который включает все доступные специфичные для службы заголовочные файлы.
У специфичных для службы заголовков есть имена как service_my_snprintf.h
или service_thd_alloc.h
.
Каждый специфичный для службы заголовок должен содержать комментарии, которые обеспечивают полную документацию использования для данной службы, включая то, какие служебные функции доступны, их вызывающие последовательности, и возвращаемые значения.
Чтобы использовать службу или службы изнутри плагина, сменный исходный файл должен включать plugin.h
заголовочный файл к связанной со службой доступа информации:
#include <mysql/plugin.h>
Это не представляет дополнительной стоимости установки. Плагин должен включать тот файл так или иначе, потому что это содержит определения и структуры, в которых нуждается каждый плагин.
Чтобы получить доступ к службе, плагин вызывает служебные функции как любая другая функция. Например, чтобы
отформатировать строку в буфер для того, чтобы напечатать, вызовите my_snprintf()
функция обеспечила службой того же самого имени:
char buffer[BUFFER_SIZE];my_snprintf(buffer, sizeof(buffer),format_string
,argument_to_format
, ...);
Чтобы сообщить ошибка, которую сервер запишет в журнал ошибок, сначала выберите ошибочный уровень. mysql/service_my_plugin_log.h
определяет эти уровни:
enum plugin_log_level{ MY_ERROR_LEVEL, MY_WARNING_LEVEL, MY_INFORMATION_LEVEL};
Затем вызовите my_plugin_log_message()
:
int my_plugin_log_message(MYSQL_PLUGIN *plugin, enum plugin_log_level level, const char *format, ...);
Например:
my_plugin_log_message(plugin_ptr, MY_ERROR_LEVEL, "Cannot initialize plugin");
Когда Вы создаете свой плагин, следует соединиться в libmysqlservices
библиотека.
Используйте -lmysqlservices
флаг во время ссылки. Например, для CMake, помещает это в верхний уровень CMakeLists.txt
файл:
FIND_LIBRARY(MYSQLSERVICES_LIB mysqlservices PATHS "${MYSQL_SRCDIR}/libservices" NO_DEFAULT_PATH)
Вставьте это CMakeLists.txt
файл в каталоге, содержащем сменный источник:
# the plugin needs the mysql services library for error loggingTARGET_LINK_LIBRARIES (your_plugin_library_name
${MYSQLSERVICES_LIB})