Развести номера ADR: 064/065/066 этой ветки → 073/074/075
Ветка отведена от 522ba89, где последним был ADR-063, и заняла
064–072. Тем временем в main через #3 и #4 пришли свои 064
(строка ввода — div вместо form), 065 (стороны сообщений)
и 066 (серверного перца нет).
Переезжают три ADR этой ветки, 067–072 остаются на месте:
их номера свободны, а внутренние ссылки менять незачем.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QR8uS3zGkybzWRW4GEY1oz
This commit is contained in:
@@ -70,7 +70,7 @@ const (
|
||||
dropEvery = time.Minute
|
||||
)
|
||||
|
||||
// Чтение тела ответа push-сервиса ради кода причины (ADR-064).
|
||||
// Чтение тела ответа push-сервиса ради кода причины (ADR-073).
|
||||
const (
|
||||
// maxReasonBody — сколько байт тела читаем. Код причины стоит в начале
|
||||
// ответа; остальное дочитывается в никуда, ради переиспользования
|
||||
@@ -331,7 +331,7 @@ func (s *Sender) deliver(j job) {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
// Начало тела нужно ради кода причины (ADR-064), остаток дочитывается
|
||||
// Начало тела нужно ради кода причины (ADR-073), остаток дочитывается
|
||||
// в никуда: иначе соединение не переиспользуется.
|
||||
head, _ := io.ReadAll(io.LimitReader(resp.Body, maxReasonBody))
|
||||
io.Copy(io.Discard, resp.Body)
|
||||
@@ -432,7 +432,7 @@ func (s *Sender) report(format string, args ...any) {
|
||||
}
|
||||
|
||||
// status — ответ push-сервиса для журнала: код и, если он разобран,
|
||||
// короткий код причины из тела (ADR-064).
|
||||
// короткий код причины из тела (ADR-073).
|
||||
func status(code int, body []byte) string {
|
||||
if r := serviceReason(body); r != "" {
|
||||
return fmt.Sprintf("%d (%s)", code, r)
|
||||
@@ -443,7 +443,7 @@ func status(code int, body []byte) string {
|
||||
// serviceReason достаёт из тела ответа короткий код причины: APNs отвечает
|
||||
// {"reason":"BadJwtToken"}, Mozilla — {"errno":…,"error":"Not Found"}.
|
||||
// Код — диагностика вендора, а не данные пользователя, и без него отказ
|
||||
// не читается: голый «403» сутки выглядел как «что-то с пушами» (ADR-064).
|
||||
// не читается: голый «403» сутки выглядел как «что-то с пушами» (ADR-073).
|
||||
//
|
||||
// Тело всё же приходит снаружи, поэтому в журнал идёт не оно, а то, что
|
||||
// прошло safeReason.
|
||||
|
||||
@@ -193,7 +193,7 @@ func TestVAPIDSubjectInToken(t *testing.T) {
|
||||
}
|
||||
|
||||
// Отказ push-сервиса читается по журналу: статус и код причины из тела
|
||||
// (ADR-064). Без кода 403 от APNs неотличим от любого другого отказа.
|
||||
// (ADR-073). Без кода 403 от APNs неотличим от любого другого отказа.
|
||||
func TestServiceStatusInLog(t *testing.T) {
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
io.Copy(io.Discard, r.Body)
|
||||
@@ -225,7 +225,7 @@ func TestServiceStatusInLog(t *testing.T) {
|
||||
|
||||
// Код причины берётся из тела ответа, но телом распоряжается чужая
|
||||
// сторона: всё, что на короткий код не похоже, в журнал не идёт вовсе
|
||||
// (ADR-064, docs/deploy.md, «Логи»).
|
||||
// (ADR-073, docs/deploy.md, «Логи»).
|
||||
func TestServiceReason(t *testing.T) {
|
||||
const endpoint = "web.push.apple.com"
|
||||
cases := []struct{ body, want string }{
|
||||
|
||||
Reference in New Issue
Block a user