Почему расширение ошибки MessagePack (0x03) имеет MP_MAP верхнего уровня? - PullRequest
1 голос
/ 27 мая 2020

В Tarantool 2.4.1 появился новый пакет MessagePack extension для сериализации ошибок. На самом верхнем уровне тела расширения находится карта только с одним элементом - стеком ошибок (массив, состоящий из карт ошибок). Интересно, может ли эта карта верхнего уровня содержать более одного элемента, а если нет, то зачем она вообще нужна? Почему бы просто не использовать стек ошибок в качестве тела расширения?

1 Ответ

3 голосов
/ 01 июня 2020

Краткий ответ.

В настоящее время (в 2.4.1) он содержит только одно поле, IPROTO_ERROR_STACK (0). Но в будущем к этой карте могут быть добавлены другие поля. Формат MP_MAP с одним ключом выбран для лучшей расширяемости. Все соединители должны иметь возможность анализировать ключ IPROTO_ERROR_STACK и пропускать любой другой ключ. Таким образом, даже если в будущих версиях Tarantool на карту будут добавлены новые поля, старые коннекторы все равно смогут анализировать ответы.

Длинный ответ. протокол (IProto) имеет форму карты MessagePack: MP_MAP. Даже если на этой карте всего 1 или 2 поля, это все равно MP_MAP, а не MP_ARRAY, и, конечно, не просто неформатированный байтовый массив. Некоторые такие ответы существуют уже много лет. Появляется множество коннекторов к Tarantool, которые могут отправлять / получать и анализировать ответы от Tarantool по протоколу IProto. И когда возникает необходимость что-то изменить в этих ответах после всех лет эксплуатации со всеми Созданное программное обеспечение для обработки ответов, MP_MAP приходит на помощь. С помощью MP_MAP можно легко добавлять новые поля в ответ, не нарушая все старые соединители. Предполагая, что они готовы к получению новых неизвестных ключей, они их просто пропускают. Вот почему MP_MAP часто используется в Tarantool как верхний уровень типа ответа. Старый код легко расширить и не сломать. Формат пакета сообщений об ошибке с IPROTO_ERROR_STACK - MP_MAP по той же причине. В будущем к объекту ошибки могут быть добавлены дополнительные ключи.

...