Подмодуль box.iproto
Начиная с версии 2.11.0.
Подмодуль box.iproto предназначен для работы с сетевой подсистемой
Tarantool. Функциональность IPROTO можно расширять из
Lua. С помощью этого подмодуля можно:
- переопределять поведение существующих и неизвестных типов запросов в бинарном протоколе Подмодуль экспортирует все константы и возможности IPROTO в Lua.
Константы IPROTO в пространстве имен box.iproto записываются
заглавными буквами без префикса IPROTO_. Константы разделены на
несколько групп:
- ключ. Пример: IPROTO_SYNC.
- тип запроса. Пример: IPROTO_OK.
- флаг. Пример: IPROTO_COMMIT.
- ключ ballot. Пример: IPROTO_FLAG_COMMIT.
- ключ метаданных. Пример: IPROTO_FIELD_IS_NULLABLE.
- ключ RAFT. Пример: IPROTO_TERM. Каждая группа находится в соответствующем подпространстве имен без префикса. Например:
box.iproto.key.SYNC = 0x01-- ...box.iproto.type.SELECT = 1-- ...box.iproto.flag.COMMIT = 1-- ...box.iproto.ballot_key.VCLOCK = 2-- ...box.iproto.metadata_key.IS_NULLABLE = 3-- ...box.iproto.raft_key.TERM = 0-- ...
Подмодуль экспортирует:
- текущую версию протокола IPROTO (box.iproto.protocol_version)
- набор возможностей протокола IPROTO, поддерживаемых сервером (box.iproto.protocol_features)
- возможности протокола IPROTO с соответствующими кодами (box.iproto.feature) Пример
В примере названия возможностей из набора box.iproto.protocol_features
преобразуются в коды:
-- Features supported by the serverbox.iproto.protocol_features = {streams = true,transactions = true,error_extension = true,watchers = true,pagination = true,}-- Convert the feature names into codesfeatures = {}for name in pairs(box.iproto.protocol_features) dotable.insert(features, box.iproto.feature[name])endreturn features -- [0, 1, 2, 3, 4]
У каждого IPROTO-запроса есть статический обработчик. То есть до версии 2.11.0 любой неизвестный запрос вызывал ошибку. Начиная с версии 2.11.0 добавлен новый тип запроса – IPROTO_UNKNOWN. Этот тип используется для переопределения обработчиков неизвестных типов запросов IPROTO. Подробнее см. функции box.iproto.override() и box_iproto_override.
В таблице перечислены все доступные функции и данные подмодуля:
Имя | Назначение |
|---|---|
Ключи запросов | |
Типы запросов | |
Флаги из ключа IPROTO_FLAGS | |
Ключи из запросов IPROTO_BALLOT | |
Ключи, вложенные в ключ IPROTO_METADATA | |
Ключи из запросов | |
Текущая версия протокола IPROTO | |
Набор поддерживаемых возможностей протокола IPROTO | |
Возможности протокола IPROTO | |
Установка нового обработчика запросов IPROTO для заданного типа запроса | |
Отправка IPROTO-пакета через сокет сессии |