В общем, я это починил. Пока сильно грязно, но постараюсь форкнуть и сделать МР, как только разберусь в формате ошибки которую возвращает тарантул.
Проблема в следующем, есть класс который называется ErrorResponsePacketConverter. Он, похоже, очень старый и вообще не понимает ошибки от тарантула. (тут очень примерно) так как тарантул не вернул нам хорошего ответа, а его ошибки мы не поняли, так как при парсинге ошибки всё время умираем на вот этой проверке:
if (length != 1u)
{
throw ExceptionHelper.InvalidMapLength(length, 1u);
}
Клиент уходит в бесконечный ступор. Теперь, в случае ошибки, нам приходит в reader.ReadMapLength(); не 1, а 2... чтобы это не значило. Сделав доп ветку я смог таки из него получать вот такие вполне адекватные ошибки:
Tarantool returns an error for request with id: 82, code: 0x00008017 and message: LTuple field 6 type does not match one required by operation: expected stringR�?��?�ClientError���)/usr/src/tarantool/src/box/tuple_format.c�LTuple field 6 type does not match one required by operation: expected s.
Теперь ничего не повисает.
Мне кажется, что то, что я сейчас получаю - это ClientError вот отсюда:
https://github.com/tarantool/tarantool/blob/2.3/src/box/error.hИ мне надо правильно его из MsgPack извлечь. Но надо передохнуть чуть-чуть.
Ошибки можно почти нормально осознать, но бандлить своё приложение с той поделкой, что я сделал мне совсем не хочется, поэтому хочется поскорее пофиксить, выкатит в основную либу пулл реквест и получить всё как положено из nuget'a. Надеюсь поревьюить и запаблишить у вас время найдётся.