Управление плагинами¶
В данном разделе приведены примеры команд для управления плагинами в 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, а также удалены записи
плагина и его сервисов из системных таблиц.
См. также: