Сейчас идёт тестирование: код на GitHub будет открыт после завершения.

E · Ошибка

Структураrefresh

Ответ на запрос, который нельзя обработать. Текст reason занимает место key. Key не возвращается, поэтому по frame нельзя понять, какой pipelined запрос ошибся. Поэтому каждый Econnection-fatal. Сервер по возможности flush E и закрывает соединение; официальные клиенты также отбрасывают session. Любой acquire, от которого отправлен хотя бы один byte без окончательного ответа, завершается как Indeterminate, а не предполагаемый успех или отказ.

reasonПричинаСоединение
auth_failedнесовпадение дайджеста аутентификационного хендшейказакрыто
bad_opнеизвестный код opзакрыто
bad_requestслишком короткий fixed header (10 bytes для A, 8 для R)закрыто
bad_leaselease равен 0 или 251..255закрыто
bad_keyключ отсутствует / превышает 128 Б / содержит пробел или перевод строки / не UTF-8закрыто
line_too_longкадр превышает 192 Бзакрыто
no_leader(кластер) текущий лидер неизвестен — идут выборы. Повторите попытку чуть позжезакрыто
not_activeузел завершает работу и не может обслуживать запросызакрыто
  • Эти восемь причин — полный список, и каждая закрывает соединение. Raw client может использовать их для диагностики, но не должен ресинхронизировать и повторно использовать stream.
  • Официальные клиенты проверяют key и время до отправки; bad_* не является обычным API-результатом.
  • no_leader и not_active временны, но в E нет owner/key. Отбросьте session; в новом соединении можно пробовать лишь неотправленные запросы. Никогда автоматически не повторяйте отправленный acquire.
  • M, L, no_leader и not_active бывают только в cluster.
  • Переполнение capacity возвращает B (busy), а не E, поскольку echo owner и key.

Обозначение байтов: op — символ ASCII, reason — текст ASCII (переменной длины, N в структуре). Завершающий \n — это 0A.

Поток

Клиент
Сервер
неверный frame (например, >192B)
E · line_too_long
flush E, затем закрытие
отправленный acquire остаётся Indeterminate
запросответ

E даёт диагностическую информацию, но не разрешает безопасное повторное использование stream. Для восстанавливаемого отказа capacity служит B (busy) с owner и key.