Перейти к содержанию

Управление плагинами

В данном разделе приведены примеры команд для управления плагинами в Picodata с помощью команд языка SQL.

Общие сведения

Плагин — набор кода на языке Rust для добавления новой функциональности к Picodata. Плагин имеет собственный жизненный цикл, т.е. может быть независимо от остальных плагинов подключен, отключен, и использован вместе с другими плагинами.

Управлять плагинами может только Администратор СУБД. В свою очередь, плагины также работают с административными правами и имеют полный доступ к системе.

Запуск Picodata с поддержкой плагинов

Для использования плагинов запустите Picodata c параметром picodata run --plugin-dir

В этой директории Picodata будет искать плагины. Требуется, чтобы структура директорий плагина соответствовали схеме:

корень plugin-dir
    └── имя_плагина
        └── версия_плагина

В качестве примера рассмотрим установку и использование тестового плагина weather_cache, который позволяет узнать температуру воздуха по заданным координатам. Плагин принимает на вход долготу и широту, проверяет погоду в указанных координатах с помощью публичного сервиса OpenWeather и возвращает температуру в градусах Цельсия. Данные кэшируются: при повторных запросах они будут прочитаны из Picodata.

Подготовка плагина

Исходный код плагина требуется сначала скомпилировать, для чего понадобятся Rust и Cargo 1.76 или новее. Используйте следующую команду:

make artifacts

Результат сборки появится в директории build. Перенесите файлы в поддиректорию плагина так, чтобы получилась следующая структура:

└── weather_cache
    └── 0.1.0
        ├── manifest.yaml
        ├── migrations
        │   └── 0001_weather.db
        └── weather_cache.so

Структура плагина

Манифест

Файл манифеста (manifest.yaml) содержит описание плагина, список его сервисов и их конфигурации, а также список необходимых миграций. Содержимое файла в тестовом плагине:

name: weather_cache
description: That one is created as an example of Picodata's plugin
version: 0.1.0
services:
  - name: weather_service
    description: This service provides HTTP route for a throughput weather cache
    default_configuration:
      openweather_timeout: 5
migration:
  - migrations/0001_weather.db

Сервисы

Тестовый плагин содержит один сервис weather_service, для которого установлена конфигурация по умолчанию (таймаут ожидания ответа от службы OpenWeather).

Миграции

Миграция представляет собой набор SQL-команд, которые необходимы для создания нужных плагину объектов (pico.UP) и их удаления (pico.DOWN). Файлы миграций должны располагаться внутри поддиректории с версией плагина (путь к каждому файлу миграции прописывается в манифесте отдельно).

Содержимое файла 0001_weather.db тестового плагина
-- pico.UP

CREATE TABLE "weather" (
    id UUID NOT NULL,
    latitude NUMBER NOT NULL,
    longitude NUMBER NOT NULL,
    temperature NUMBER NOT NULL,
    PRIMARY KEY (id)
)
USING memtx
DISTRIBUTED BY (latitude, longitude);

-- pico.DOWN
DROP TABLE "weather";

Добавление плагина

Добавление плагина означает его регистрацию в кластере. Подключитесь к консоли администратора инстанса Picodata, запущенного с поддержкой плагинов, и введите SQL-команду CREATE PLUGIN:

CREATE PLUGIN weather_cache 0.1.0;

После успешного добавления в системных таблицах появятся записи о новом плагине.

В таблице _pico_plugin со списком добавленных плагинов:

picodata> SELECT * FROM _pico_plugin;
+-------------+---------+-------------+---------+-------------+------------+
| name        | enabled | services    | version | description | migration_ |
|             |         |             |         |             | list       |
+==========================================================================+
| "weather_ca | false   | ["weather_s | "0.1.0" | "That one   | ["migratio |
| che"        |         | ervice"]    |         | is created  | ns/0001_we |
|             |         |             |         | as an       | ather.db"] |
|             |         |             |         | example of  |            |
|             |         |             |         | Picodata's  |            |
|             |         |             |         | plugin"     |            |
+-------------+---------+-------------+---------+-------------+------------+
(1 rows)

В таблице _pico_plugin_config с конфигурацией сервисов плагина:

picodata> SELECT * FROM _pico_plugin_config;
+-----------------+---------+-------------------+------------------+-------+
| plugin          | version | entity            | key              | value |
+==========================================================================+
| "weather_cache" | "0.1.0" | "weather_service" | "openweather_tim | 5     |
|                 |         |                   | eout"            |       |
+-----------------+---------+-------------------+------------------+-------+
(1 rows)

В таблице _pico_service со списком сервисов плагина (но пока без привязки к тиру):

picodata> SELECT * FROM _pico_service;
+-----------------+-------------------+---------+-------+------------------+
| plugin_name     | name              | version | tiers | description      |
+==========================================================================+
| "weather_cache" | "weather_service" | "0.1.0" | []    | "This service    |
|                 |                   |         |       | provides HTTP    |
|                 |                   |         |       | route for a      |
|                 |                   |         |       | throughput       |
|                 |                   |         |       | weather cache"   |
+-----------------+-------------------+---------+-------+------------------+
(1 rows)

Запуск миграции плагина

Процесс миграции означает создание или изменение необходимой для плагина схемы данных. На данном этапе таблица weather, указанная в файле 0001_weather.db еще не создана, т.к. миграции не были запущены. Для их запуска введите следующую команду ALTER PLUGIN:

ALTER PLUGIN weather_cache MIGRATE TO 0.1.0;

Успешная миграция означает, что в БД появилась новая таблица weather:

picodata> SELECT * FROM weather;
+----+----------+-----------+-------------+
| id | latitude | longitude | temperature |
+=========================================+
+----+----------+-----------+-------------+
(0 rows)

Данные плагина в системных таблицах и таблицах, созданных в результате миграции pico.UP, персистентны и сохраняются между циклами включения/отключения плагина.

Включение сервисов плагина

Основная функциональность плагина реализуется через его сервисы, которые должны быть включены в явном виде. Сервисы работают с привязкой к тирам: если конфигурация тиров в кластере не была явно задана, то в примере с тестовым плагином укажите тир по умолчанию default в команде ALTER PLUGIN:

ALTER PLUGIN weather_cache 0.1.0 ADD SERVICE weather_service TO TIER default;

После успешного включения плагина в системной таблице _pico_service появится привязка сервиса к указанному тиру:

picodata> SELECT * FROM _pico_service;
+----------------+----------------+---------+-------------+----------------+
| plugin_name    | name           | version | tiers       | description    |
+==========================================================================+
| "weather_cache | "weather_servi | "0.1.0" | ["default"] | "This service  |
| "              | ce"            |         |             | provides HTTP  |
|                |                |         |             | route for a    |
|                |                |         |             | throughput     |
|                |                |         |             | weather cache" |
+----------------+----------------+---------+-------------+----------------+
(1 rows)

Включение и отключение плагина

Включите плагин следующей командой:

ALTER PLUGIN weather_cache 0.1.0 ENABLE;

После успешного включения в колонке enabled в системной таблице _pico_plugin установится значение true:

picodata> SELECT * FROM _pico_plugin;
+-------------+---------+-------------+---------+-------------+------------+
| name        | enabled | services    | version | description | migration_ |
|             |         |             |         |             | list       |
+==========================================================================+
| "weather_ca | true    | ["weather_s | "0.1.0" | "That one   | ["migratio |
| che"        |         | ervice"]    |         | is created  | ns/0001_we |
|             |         |             |         | as an       | ather.db"] |
|             |         |             |         | example of  |            |
|             |         |             |         | Picodata's  |            |
|             |         |             |         | plugin"     |            |
+-------------+---------+-------------+---------+-------------+------------+
(1 rows)

Примечание

Нельзя включить больше одной версии плагина в кластере

Для отключения плагина используйте следующую команду:

ALTER PLUGIN weather_cache 0.1.0 DISABLE;

Конфигурация плагина

Конфигурация плагина хранится в манифесте и предполагает настройку входящих в него сервисов. Например, для изменения таймаута для вызова OpenMeteo в тестовом плагине введите следующую команду ALTER PLUGIN:

ALTER PLUGIN weather_cache 0.1.0 SET weather_service.openweather_timeout='7';

См. также:

Проверка работы плагина

Запустите отдельное окно терминала и введите следующую команду для проверки работы тестового плагина:

curl "localhost:8081/api/v1/weather?longitude=55&latitude=66"

Удаление плагина

Перед удалением плагина его необходимо отключить.

Введите команду DROP PLUGIN для удаления плагина:

DROP PLUGIN weather_cache 0.1.0;

При удалении плагина с помощью указанной выше команды его схема данных (записи в системных таблицах), а также таблицы, созданные ранее миграцией pico.UP, остаются в кластере. Для очистки этих данных следует при удалении плагина использовать параметр WITH DATA, например:

DROP PLUGIN weather_cache 0.1.0 WITH DATA;

В таком случае будут запущена миграция pico.DOWN, а также удалены записи плагина и его сервисов из системных таблиц.

См. также: