Documentation
¶
Overview ¶
Package refusaltext — ОДНА проба для всех переводчиков отказа службы: текст, который получает вызывающий на признаке недоступности, ФИКСИРОВАН и причины не несёт.
Почему помощник, а не копия утверждения у каждого переводчика ¶
Переводчиков в службе несколько, и предмет у них ОДИН. Копия утверждения в каждом пакете разошлась бы с остальными на первом же уточнении — ровно тем способом, каким разошлись сами переводчики (задача #2464): канонический был переведён на фиксированный текст, а копии остались, и расхождение никем не решалось. Утверждение живёт в одном месте; вызывающий приносит только свой переводчик и своего законного близнеца.
Проба утверждает СООБЩЕНИЕ, а не код ¶
Проба, сверяющая лишь код ответа, остаётся зелёной при вернувшемся эхе: код `UNAVAILABLE` верен в обоих случаях. Именно такая проба и стояла у канонического соседа, поэтому расхождение прожило незамеченным.
Index ¶
Constants ¶
const CauseMarker = "PROBE-CAUSE-MARKER-MUST-NOT-REACH-THE-WIRE"
CauseMarker — синтетическая подробность цепочки: то, что переводчик обязан оставить журналу и НИКОГДА не отдать вызывающему.
Значение намеренно НЕПРАВДОПОДОБНО. Правдоподобная строка (адрес узла, имя базы) прошла бы за настоящую и в отказе пробы читалась бы как утечка свидетельства, а не как её проверка; кроме того, обе рабочие копии этого дерева публичны.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Probe ¶
type Probe struct {
// Translate — перевод отказа в gRPC-статус: то, что вызывающий увидит.
Translate func(error) error
// Positive / PositiveCode / PositiveMessage — отказ, чей текст ОБЯЗАН
// доехать дословно. Без него отрицание вакуумно: переводчик, отвечающий
// фиксированным текстом НА ВСЁ, прошёл бы каждое утверждение ниже и при
// этом перестал бы говорить вызывающему хоть что-нибудь.
Positive error
PositiveCode codes.Code
PositiveMessage string
}
Probe — переводчик под пробой и его ЗАКОННЫЙ БЛИЗНЕЦ.