box.iproto.override()
Начиная с версии 2.11.0. Задаёт новый обработчик IPROTO-запросов для указанного типа запроса.
Параметры:
-
request_type(number) — код типа запроса. Возможные значения: -
код типа из box.iproto.type (кроме
box.iproto.type.UNKNOWN) — переопределение существующего обработчика типа запроса. -
box.iproto.type.UNKNOWN— переопределение обработчика неизвестных типов запросов. -
handler(function) — обработчик IPROTO-запросов. Сигнатура функции-обработчика:function(sid, header, body), гдеheader(userdata): заголовок запроса, закодированный как msgpack_objectbody(userdata): тело запроса, закодированное как msgpack_object Возвращаетtrueпри успешном выполнении, иначеfalse. Приfalseпроисходит откат к обработчику по умолчанию. Также ошибку можно сигнализировать выбросом исключения. В этом случае возвращаемое значение —false, но это не всегда означает неудачу. Чтобы сбросить обработчик запросов, задайте значениеnilдля параметраhandler.
Возвращает
нет
Возможные ошибки:
Если Lua-обработчик выбрасывает исключение, поведение аналогично вызову удаленной процедуры. Клиенту возвращаются следующие ошибки через IPROTO (см. src/lua/utils.h):
ER_PROC_LUA— исключение выброшено из Lua-обработчика, диагностика не задана.- диагностики из
src/box/errcode.h— исключение выброшено, диагностика задана.
Подробнее см. src/box/errcode.h.
Пример:
Определение функции-обработчика для типа запроса
box.iproto.type.SELECT:
local function iproto_select_handler_lua(header, body)if body.space_id == 512 thenbox.iproto.send(box.session.id(),{ request_type = box.iproto.type.OK,sync = header.SYNC,schema_version = box.info.schema_version },{ data = { 1, 2, 3 } })return trueendreturn falseend
Переопределение обработчика box.iproto.type.SELECT:
box.iproto.override(box.iproto.type.SELECT, iproto_select_handler_lua)
Сброс обработчика box.iproto.type.SELECT:
box.iproto.override(box.iproto.type.SELECT, nil)
Переопределение функции-обработчика для неизвестного типа запроса:
box.iproto.override(box.iproto.type.UNKNOWN, iproto_unknown_request_handler_lua)