Tarantool 1.6 - Тонкости IProto

310 views
Skip to first unread message

Денис Шилкин

unread,
Apr 29, 2015, 5:52:28 AM4/29/15
to tarant...@googlegroups.com
Всем привет! Вопрос по первому полю заголовка IProto - "BODY + HEADER SIZE"

Я реализовал IProto на C++ с сипользованием msgpack-c. msgpack-c сериализует длину сообщения как POSITIVE INTEGER, естественно, в диапазоне "int format family": 0xcc, 0xcd, 0xce, 0xcf.
Стало быть и размер сериализованной длинны сообщения зависит от того, сколько значимых разрядов в числе: 2, 3, 5, 9 байт соответственно.
В IProto размер поля "BODY + HEADER SIZE" - 5 байт, т.е. это соответсвует спеке msgpack, как POSITIVE INTEGER 0xce.

Сейчас мой заголовок не соответсвует спецификации IProto, но при этом tarantool распаковывает его нормально, т.к. не опирается на то, что длина сообщения будет строго в первых 5-и байтах.

Вопрос.
Могу ли продолжать пользоваться описанной схемой запаковки с использованием спеки msgpack, без боязни, что tarantool перестанет меня понимать?

Предложение.
Если ответ на предыдущий вопрос положительный, то может поправить спеку IProto в части размера поля "BODY + HEADER SIZE", т.е. не фиксировать его 5-ю байтами, а сказать что это просто POSITIVE INTEGER?

Konstantin Osipov

unread,
Apr 29, 2015, 6:35:31 AM4/29/15
to tarant...@googlegroups.com
* Денис Шилкин <shilki...@gmail.com> [15/04/29 12:55]:

> Вопрос.
> Могу ли продолжать пользоваться описанной схемой запаковки с использованием
> спеки msgpack, без боязни, что tarantool перестанет меня понимать?

Да.

> Предложение.
> Если ответ на предыдущий вопрос положительный, то может поправить спеку
> IProto в части размера поля "BODY + HEADER SIZE", т.е. не фиксировать его
> 5-ю байтами, а сказать что это просто POSITIVE INTEGER?

Мы, тем не менее, отвечаем 5ю байтами, и менять это не хотим.
Это нужно для того чтобы упростить потоковый парсинг на клиентской
стороне. Можно это всё разъяснить в iproto документации.

Может пришлёте пулл реквест?

--
http://tarantool.org - a NoSQL database in a Lua script

Денис Шилкин

unread,
Apr 29, 2015, 6:56:51 AM4/29/15
to tarant...@googlegroups.com
Ок, постараюсь сформулировать. Спасибо.

среда, 29 апреля 2015 г., 13:35:31 UTC+3 пользователь Konstantin Osipov написал:

Eugene Leonovich

unread,
May 6, 2015, 3:14:16 AM5/6/15
to tarant...@googlegroups.com

Мы, тем не менее, отвечаем 5ю байтами, и менять это не хотим.

Значит ли это, что старший байт можно просто ингорировать при пасинге длины и сразу читать следующие за ним 4 байта? 

Konstantin Osipov

unread,
May 6, 2015, 10:26:39 AM5/6/15
to tarant...@googlegroups.com
* Eugene Leonovich <gen....@gmail.com> [15/05/06 10:47]:
> > Мы, тем не менее, отвечаем 5ю байтами, и менять это не хотим.
> >
>
> Значит ли это, что старший байт можно просто ингорировать при пасинге длины
> и сразу читать следующие за ним 4 байта?

Да.

Михаил Подмогов

unread,
Feb 11, 2016, 4:24:57 AM2/11/16
to tarantool-ru
Доброго дня, чтобы не плодить темы, спрошу тут. Пытаюсь реализовать IProto на C#, столкнулся с проблемой со строками а именно интересует кодировка. Насколько я понял должна использоваться ASCII?
Хотя ее пробовал не получается, сижу сравниваю с GO коннектором и пакет (AUTH) получается разный и именно после преобразования данных к строке.

Eugene Leonovich

unread,
Feb 11, 2016, 4:55:08 AM2/11/16
to tarantool-ru
Строки в msgpack это либо binary array либо utf-8. Первые кодируются как (0xc4|0xc5|0xc6)xxx, вторые - (101xxxxx|0xd9|0xda|0xdb)xxx.
В чем сообственно проблема в вашем случае?

Konstantin Osipov

unread,
Feb 11, 2016, 5:01:29 AM2/11/16
to tarant...@googlegroups.com
* Михаил Подмогов <podm...@gmail.com> [16/02/11 12:25]:
utf-8.

Вы можете посмотреть какой получается пакет в бинарном виде и
прислать нам? Мы скажем что с ним не так.

--
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.org - www.twitter.com/kostja_osipov

Михаил Подмогов

unread,
Feb 11, 2016, 5:38:24 AM2/11/16
to tarantool-ru
0000   ce 00 00 00 35 82 00 07 01 ce 00 00 00 00 82 23  ....5..........#
0010   a8 70 6f 64 6d 6f 67 6f 76 21 92 a9 63 68 61 70  .podmogov!..chap
0020   2d 73 68 61 31 b4 2d 07 3f 46 35 12 1a 26 3f 3f  -sha1.-.?F5..&??
0030   2d 40 3f 24 3f 3f 3f 73 71 3f                               -@?$???sq?

Сравнивая с Go реализацией, данные правильные и похоже я неправильно пакую msgpack строку scramble

четверг, 11 февраля 2016 г., 13:01:29 UTC+3 пользователь Konstantin Osipov написал:
Reply all
Reply to author
Forward
0 new messages