Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Ключи, используемые в запросах и ответах

В этом разделе описаны ключи iproto, содержащиеся в запросах и ответах. Ключи – это константы Tarantool, которые определены или упомянуты в файле iproto_constants.h.

Хотя сами ключи являются 8-битными целыми числами без знака, их значения могут иметь разные типы.

Базовое описание

Общие

Имя

Код и
тип значения

Описание

IPROTO_VERSION

0x54
MP_UINT

Версия бинарного протокола, поддерживаемая клиентом

IPROTO_FEATURES

0x55
MP_ARRAY

Поддерживаемые функции бинарного протокола

IPROTO_SYNC

0x01
MP_UINT

Уникальный идентификатор запроса

IPROTO_SCHEMA_VERSION

0x05
MP_UINT

Версия схемы базы данных

IPROTO_TIMESTAMP

0x04
MP_DOUBLE

Время в секундах с начала эпохи Unix

IPROTO_REQUEST_TYPE

0x00
MP_UINT

Тип запроса или тип ответа

IPROTO_ERROR

0x52
MP_ERROR

Ответ с ошибкой

IPROTO_ERROR_24

0x31
MP_STR

Ошибка в виде строки

IPROTO_DATA

0x30
MP_OBJECT

Данные, переданные в транзакции. Могут быть пустыми. Используются во всех запросах и ответах

IPROTO_SPACE_ID

0x10
MP_UINT

Идентификатор спейса

IPROTO_INDEX_ID

0x11
MP_UINT

Идентификатор индекса

IPROTO_TUPLE

0x21
MP_ARRAY

Кортеж, аргументы, операции или пара аутентификации. Подробнее

IPROTO_KEY

0x20
MP_ARRAY

Массив ключей индекса в запросе. См. space_object:select()

IPROTO_LIMIT

0x12
MP_UINT

Максимальное количество кортежей в спейсе

IPROTO_OFFSET

0x13
MP_UINT

Количество кортежей, пропускаемых при выборке

IPROTO_ITERATOR

0x14
MP_UINT

Тип итератора

IPROTO_INDEX_BASE

0x15
MP_UINT

Указывает, начинается ли нумерация полей с 1 или с 0

IPROTO_FUNCTION_NAME

0x22
MP_STR

Имя вызываемой функции. Используется в IPROTO_CALL

IPROTO_USER_NAME

0x23
MP_STR

Имя пользователя. Используется в IPROTO_AUTH

IPROTO_OPS

0x28
MP_ARRAY

Массив операций. Используется в IPROTO_UPSERT

IPROTO_EXPR

0x27
MP_STR

Аргумент команды. Используется в IPROTO_EVAL

IPROTO_AUTH_TYPE

0x5b
MP_STR

Протокол, используемый для генерации данных аутентификации пользователя

IPROTO_AFTER_POSITION

0x2e
MP_STR

Позиция кортежа, после которой space_object:select() начинает поиск

IPROTO_AFTER_TUPLE

0x2f
MP_ARRAY

Кортеж, после которого space_object:select() начинает поиск

IPROTO_FETCH_POSITION

0x1f
MP_BOOL

Если true, space_object:select() возвращает позицию последнего выбранного кортежа

IPROTO_POSITION

0x35
MP_STR

Если IPROTO_FETCH_POSITION равно true, возвращает строку в кодировке base64, представляющую позицию последнего выбранного кортежа

Потоки

Имя

Код и
тип

Описание

IPROTO_STREAM_ID

0x0a
MP_UINT

Уникальный идентификатор потока

IPROTO_TIMEOUT

0x56
MP_DOUBLE

Время ожидания в секундах, по истечении которого транзакции откатываются

IPROTO_TXN_ISOLATION

0x59
MP_UINT

Уровень изоляции транзакций

Общая репликация

Имя

Код и
тип

Описание

IPROTO_REPLICA_ID

0x02
MP_INT

Идентификатор реплики

IPROTO_INSTANCE_UUID

0x24
MP_STR

UUID экземпляра

IPROTO_VCLOCK

0x26
MP_MAP

Векторные часы (vclock) экземпляра

IPROTO_VCLOCK_SYNC

0x5a
MP_UINT

Идентификатор запроса синхронизации векторных часов. Начиная с версии 2.11

IPROTO_REPLICASET_UUID

0x25
MP_STR

До версии Tarantool 2.11 IPROTO_REPLICASET_UUID назывался IPROTO_CLUSTER_UUID.

IPROTO_LSN

0x03
MP_UINT

Порядковый номер транзакции в журнале (LSN)

IPROTO_TSN

0x08
MP_UINT

Порядковый номер транзакции

IPROTO_BALLOT_IS_RO_CFG

0x01
MP_BOOL

True, если экземпляр настроен как read_only. Начиная с версии 2.6.1

IPROTO_BALLOT_VCLOCK

0x02
MP_MAP

Текущие векторные часы экземпляра

IPROTO_BALLOT_GC_VCLOCK

0x03
MP_MAP

Векторные часы самой старой записи WAL экземпляра

IPROTO_BALLOT_IS_RO

0x04
MP_BOOL

True, если экземпляр недоступен для записи: настроен как read_only, имеет статус orphan или является ведомым узлом Raft. Начиная с версии 2.6.1

IPROTO_BALLOT_IS_ANON

0x05
MP_BOOL

True, если реплика анонимная. Соответствует replication.anon. Начиная с версии 2.7.1

IPROTO_BALLOT_IS_BOOTED

0x06
MP_BOOL

True, если экземпляр завершил процесс начальной загрузки или восстановления. Начиная с версий 2.7.3, 2.8.2, 2.10.0

IPROTO_BALLOT_CAN_LEAD

0x07
MP_BOOL

True, если box.cfg.election_mode имеет значение candidate или manual. Начиная с версий 2.7.3 и 2.8.2

IPROTO_BALLOT_BOOTSTRAP_LEADER_UUID

0x08
MP_STR

UUID лидера начальной загрузки. UUID кодируется как строка из 36 байт. Начиная с версии 2.11

IPROTO_BALLOT_REGISTERED_REPLICA_UUIDS

0x09
MP_ARRAY

Массив элементов MP_STR, содержащий UUID участников, зарегистрированных в наборе реплик. Каждый UUID кодируется как строка из 36 байт. Начиная с версии 2.11

IPROTO_BALLOT_INSTANCE_NAME

0x0a
MP_STR

Имя экземпляра. Начиная с версии 3.0

IPROTO_FLAGS

0x09
MP_UINT

Вспомогательные данные для указания состояния последнего сообщения транзакции. Включаются в заголовок любого DML-запроса, записываемого в WAL.

IPROTO_SERVER_VERSION

0x06
MP_UINT

Версия Tarantool подписывающегося узла в компактном представлении

IPROTO_REPLICA_ANON

0x50
MP_BOOL

Необязательный ключ, используемый в запросе SUBSCRIBE. True, если подписывающаяся реплика анонимная

IPROTO_ID_FILTER

0x51
MP_ARRAY

Необязательный ключ, используемый в запросе SUBSCRIBE, за которым следует массив идентификаторов экземпляров, строки которых не будут переданы реплике. Начиная с версии 2.10.0

IPROTO_REPLICASET_NAME

0x5c
MP_STR

Необязательный ключ, используемый для передачи имени экземпляра-инициатора в запросах JOIN, SUBSCRIBE и REGISTER.

IPROTO_INSTANCE_NAME

0x5d
MP_STR

Необязательный ключ, используемый для передачи имени набора реплик экземпляра в запросах SUBSCRIBE.

Синхронная репликация

Имя

Код и
тип

Описание

IPROTO_TERM

0x53
MP_UINT

Терм RAFT на экземпляре

IPROTO_RAFT_TERM

0x00
MP_UINT

Терм RAFT на экземпляре. Ключ используется только для запросов типа IPROTO_RAFT.

IPROTO_RAFT_VOTE

0x01
MP_UINT

Голос экземпляра в текущем терме (если есть)

IPROTO_RAFT_STATE

0x02
MP_UINT

Состояние RAFT. Возможные значения: 1 – ведомый, 2 – кандидат, 3 – лидер

IPROTO_RAFT_VCLOCK

0x03
MP_MAP

Текущие векторные часы экземпляра

IPROTO_RAFT_LEADER_ID

0x04
MP_UINT

Идентификатор текущего лидера, каким его видит узел, отправляющий запрос. Начиная с версии 2.10.0

IPROTO_RAFT_IS_LEADER_SEEN

0x05
MP_BOOL

True, если узел имеет прямое соединение с узлом-лидером. Начиная с версии 2.10.0

Все ключи IPROTO_RAFT_* используются только в запросах IPROTO_RAFT*.

События и подписки

Имя

Код и
тип

Описание

IPROTO_EVENT_KEY

0x57
MP_STR

Имя ключа события

IPROTO_EVENT_DATA

0x58
MP_OBJECT

Данные события, отправляемые удалённому наблюдателю

Подробнее о событиях и подписках в iproto см. box-protocol-watchers.

Специфичные для SQL

Эти ключи используются с SQL в специфичных для SQL запросах и ответах, таких как IPROTO_EXECUTE и IPROTO_PREPARE.

Имя

Код и
тип

Описание

IPROTO_SQL_TEXT

0x40
MP_STR

Текст SQL-запроса

IPROTO_STMT_ID

0x43
MP_INT

Идентификатор подготовленного запроса

IPROTO_OPTIONS

0x2b
MP_ARRAY

Параметры SQL-транзакции. Обычно пустые

IPROTO_METADATA

0x32
MP_ARRAY of MP_MAP items

Метаданные SQL-транзакции

IPROTO_FIELD_NAME

0x00
MP_STR

Имя поля. Вложено в IPROTO_METADATA

IPROTO_FIELD_TYPE

0x01
MP_STR

Тип поля. Вложено в IPROTO_METADATA

IPROTO_FIELD_COLL

0x02
MP_STR

Правила сортировки поля. Вложено в IPROTO_METADATA

IPROTO_FIELD_IS_NULLABLE

0x03
MP_BOOL

True, если поле может содержать NULL. Вложено в IPROTO_METADATA.

IPROTO_FIELD_IS_AUTOINCREMENT

0x04
MP_BOOL

True, если поле автоинкрементное. Вложено в IPROTO_METADATA.

IPROTO_FIELD_SPAN

0x05
MP_STR or MP_NIL

Исходное выражение в SELECT. Вложено в IPROTO_METADATA. См. box.execute()

IPROTO_BIND_METADATA

0x33
MP_ARRAY

Имена и типы связываемых переменных

IPROTO_BIND_COUNT

0x34
MP_INT

Количество параметров для привязки

IPROTO_SQL_BIND

0x41
MP_ARRAY

Значения параметров для подстановки вместо плейсхолдеров ? или :name

IPROTO_SQL_INFO

0x42
MP_MAP

Дополнительные параметры, связанные с SQL

SQL_INFO_ROW_COUNT

0x00
MP_UINT

Количество изменённых строк. Равно 0 для запросов, не изменяющих строки. Вложено в IPROTO_SQL_INFO

SQL_INFO_AUTO_INCREMENT_IDS

0x01
MP_ARRAY of MP_UINT items

Новое значение (или значения) первичного ключа для INSERT в таблицу, определённую с PRIMARY KEY AUTOINCREMENT. Вложено в IPROTO_SQL_INFO

Подробности об отдельных ключах

IPROTO_VERSION

Код: 0x54.

IPROTO_VERSION – целое число, отражающее версию протокола, которую поддерживает клиент. Последняя версия IPROTO_VERSION – IPROTO_VERSION.

IPROTO_FEATURES

Код: 0x55.

Доступные IPROTO_FEATURES:

  • IPROTO_FEATURE_STREAMS = 0 – поддержка потоков: IPROTO_STREAM_ID в заголовке запроса.

  • IPROTO_FEATURE_TRANSACTIONS = 1 – поддержка транзакций: команды IPROTO_BEGIN, IPROTO_COMMIT и IPROTO_ROLLBACK (с IPROTO_STREAM_ID в заголовке запроса). Подробнее см. отправку команд транзакций.

  • IPROTO_FEATURE_ERROR_EXTENSION = 2 – поддержка расширения MP_ERROR MsgPack. Клиенты, не поддерживающие эту возможность, получают ответы об ошибках на IPROTO_EVAL и IPROTO_CALL в виде строковых сообщений об ошибках.

  • IPROTO_FEATURE_WATCHERS = 3 – поддержка удаленных наблюдателей: команды IPROTO_WATCH, IPROTO_UNWATCH и IPROTO_EVENT.

  • IPROTO_FEATURE_INSERT_ARROW = 12 – поддержка вставки данных в формате Arrow. Подробнее об этой возможности. Доступно начиная с версии 3.3.0.

IPROTO_SYNC

Код: 0x01.

Это беззнаковое целое число, которое должно увеличиваться так, чтобы быть уникальным для каждого запроса. Это число также возвращается функцией box.session.sync().

Значение IPROTO_SYNC в ответе должно совпадать со значением IPROTO_SYNC в запросе.

IPROTO_SCHEMA_VERSION

Код: 0x05.

Версия схемы базы данных – беззнаковое число, которое увеличивается при значительном изменении схемы.

В заголовке запроса IPROTO_SCHEMA_VERSION является необязательным, поэтому при его отсутствии версия проверяться не будет.

В заголовке ответа IPROTO_SCHEMA_VERSION присутствует всегда, и проверка того, изменилась ли версия, выполняется на стороне клиента.

IPROTO_ITERATOR

Код: 0x14.

Возможные значения (см. iterator_type.h):

0

EQ

1

REQ

2

ALL, все кортежи

3

LT, меньше чем

4

LE, меньше или равно

5

GE, больше или равно

6

GT, больше чем

7

BITS_ALL_SET, все биты значения установлены в ключе

8

BITS_ANY_SET, хотя бы один бит значения установлен

9

BITS_ALL_NOT_SET, биты не установлены

10

OVERLAPS, пересекается с прямоугольником или параллелепипедом

11

NEIGHBOR, соседствует с прямоугольником или параллелепипедом

IPROTO_STREAM_ID

Код: 0x0a.

Используется только в потоках. Это беззнаковое число, которое должно быть уникальным для каждого потока.

В запросах IPROTO_STREAM_ID используется для двух целей: обеспечения выполнения запросов внутри транзакций отдельными группами и обеспечения строго консистентного выполнения запросов (вне зависимости от того, выполняются ли они внутри транзакций).

В ответах IPROTO_STREAM_ID не используется.

См. Бинарный протокол – потоки.

IPROTO_TXN_ISOLATION

IPROTO_TXN_ISOLATION – уровень изоляции транзакций. Может принимать следующие значения:

  • TXN_ISOLATION_DEFAULT = 0 – использовать уровень по умолчанию из box.cfg (значение по умолчанию)
  • TXN_ISOLATION_READ_COMMITTED = 1 – чтение зафиксированных, но еще не подтвержденных изменений
  • TXN_ISOLATION_READ_CONFIRMED = 2 – чтение подтвержденных изменений
  • TXN_ISOLATION_BEST_EFFORT = 3 – определять уровень изоляции автоматически

См. Бинарный протокол – потоки, чтобы узнать больше о потоковых транзакциях в бинарном протоколе.

IPROTO_REQUEST_TYPE

Код: 0x00.

Этот ключ используется как в запросах, так и в ответах. Он указывает тип запроса или ответа и в качестве значения содержит имя запроса или ответа (например: IPROTO_AUTH). Запросы и ответы см. в разделах взаимодействие клиента и сервера, репликация, события и подписки, потоки и интерактивные транзакции.

IPROTO_ERROR

Код: 0x52.

В случае ошибки тело ответа содержит IPROTO_ERROR и IPROTO_ERROR_24 вместо IPROTO_DATA.

Подробнее об ответах с ошибками см. в разделе Формат запросов и ответов.

IPROTO_ERROR_24

Код: 0x31.

IPROTO_ERROR_24 используется в версиях Tarantool до 2.4.1. Ключ содержит ошибку в строковом формате.

Начиная с Tarantool 2.4.1 Tarantool упаковывает ошибки как расширение MP_ERROR MessagePack, которое включает дополнительную информацию. В теле ответа с ошибкой передаются два ключа: IPROTO_ERROR и IPROTO_ERROR_24.

Подробнее об ответах с ошибками см. в разделе Формат запросов и ответов.

IPROTO_TUPLE

Код: 0x21.

Несколько операций используют этот ключ по-разному:

IPROTO_INSERT, IPROTO_REPLACE, IPROTO_UPSERT

Кортеж для вставки

IPROTO_UPDATE

Операции для выполнения

IPROTO_AUTH Массив из 2 полей: механизм аутентификации и scramble, зашифрованный в соответствии с указанным механизмом. Подробнее см. в описании последовательности [аутентификации](../../box_protocol/authentication#box_protocol-authentication_sequence).

IPROTO_CALL, IPROTO_EVAL

IPROTO_FLAGS

Код: 0x09.

При репликации синхронных транзакций ключ IPROTO_FLAGS включается в заголовок. Ключ содержит значение MP_UINT с одним или несколькими битами:

  • IPROTO_FLAG_COMMIT (0x01) устанавливается, если это последнее сообщение транзакции.

  • IPROTO_FLAG_WAIT_SYNC (0x02) устанавливается, если это последнее сообщение транзакции, которая не может быть завершена немедленно.

  • IPROTO_FLAG_WAIT_ACK (0x04) устанавливается, если это последнее сообщение синхронной транзакции.

Пример:

SVG diagram

IPROTO_TERM

Код: 0x53.

Ключи vclock

Vclock (векторные часы) – это карта порядковых номеров журнала, определяющая версию набора данных, хранящегося на узле. Фактически она представляет количество логических операций, выполненных на конкретном узле. Vclock выглядит так:

SVG diagram

Существует пять ключей, соответствующих векторным часам в различных контекстах репликации. Все они имеют тип MP_MAP:

  • IPROTO_VCLOCK (0x26) передается новому экземпляру, присоединяющемуся к набору реплик.

  • IPROTO_VCLOCK_SYNC (0x5a) используется в heartbeat-сообщениях репликации. Мастер отправляет свои heartbeat-сообщения реплике, включая этот монотонно возрастающий ключ. Как только реплика получает heartbeat с ненулевым значением IPROTO_VCLOCK_SYNC, она начинает отвечать с тем же значением во всех подтверждениях. Этот ключ был добавлен в версии 2.11.

  • IPROTO_BALLOT_VCLOCK (0x02) включается в сообщение IPROTO_BALLOT. IPROTO_BALLOT отправляется в ответ на запрос IPROTO_VOTE. Этот ключ был добавлен в /release/2.6.1.

  • IPROTO_BALLOT_GC_VCLOCK (0x03) также включается в сообщение IPROTO_BALLOT. IPROTO_BALLOT отправляется в ответ на запрос IPROTO_VOTE. Это vclock самой старой записи WAL на экземпляре. Соответствует box.info.gc().vclock. Этот ключ был добавлен в /release/2.6.1.

  • IPROTO_RAFT_VCLOCK (0x03) включается в сообщение IPROTO_RAFT. Присутствует только на экземплярах в состоянии "candidate" (IPROTO_RAFT_STATE == 2).

Ключи IPROTO_BALLOT

Все ключи IPROTO_BALLOT* используются только в запросах IPROTO_BALLOT. Начиная с версий /release/2.7.3, /release/2.8.2 и /release/2.10.0 были произведены следующие переименования:

  • IPROTO_BALLOT_IS_RO_CFG (0x01) ранее назывался IPROTO_BALLOT_IS_RO.
  • IPROTO_BALLOT_IS_RO (0x04) ранее назывался IPROTO_BALLOT_IS_LOADING.

IPROTO_METADATA

Код: 0x32.

Используется с SQL в рамках IPROTO_EXECUTE.

Ключ содержит массив карт колонок, при этом каждая карта колонки содержит как минимум IPROTO_FIELD_NAME (0x00) и MP_STR, а также IPROTO_FIELD_TYPE (0x01) и MP_STR.

Кроме того, если sql_full_metadata в системном пространстве _session_settings имеет значение TRUE, то массив содержит дополнительные карты колонок, соответствующие компонентам, описанным в разделе box.execute().

IPROTO_SQL_BIND

Код: 0x41.

Используется с SQL в рамках IPROTO_EXECUTE.

IPROTO_SQL_BIND – это массив значений параметров для подстановки вместо плейсхолдеров. Может содержать значения любого типа, включая MP_MAP.

  • Значения, не являющиеся MP_MAP, заменяют плейсхолдеры ? в запросе.

  • Значения MP_MAP должны иметь формат {[name] = value}, где name – именованный параметр в запросе. Пример такого запроса:

    tarantool> conn:execute('SELECT ?, ?, :name1, ?, :name2, :name1', {1, 2, {[':name1'] = 5}, 'str', {[':name2'] = true}})---- metadata:- name: COLUMN_1    type: integer- name: COLUMN_2    type: integer- name: COLUMN_3    type: integer- name: COLUMN_4    type: text- name: COLUMN_5    type: boolean- name: COLUMN_6    type: booleanrows:- [1, 2, 5, 'str', true, 5]