История о 500-мильной почте.

Jan 27, 2008 17:29

Оригинал
(история немного изменена автором а потом ещё и переводчиком чтобы сделать её интереснее, выбросить нудные или непонятные непосвящённому читателю детали)

Давным-давно, один господин работал админом почтовой системы университетской сети.
И вот, звонит ему начальник отдела статистики.

- У нас проблема, мы не можем отправлять почту за пределы нашего отдела.

- В чём дело? - спрашивает наш bofh.

- Мы не можем отсылать почту на расстояние большее 500 миль - объясняет начальник.

Тут админ подавился своим кофе:

- Как это?

- Мы не можем отсюда посылать почту на расстояние превышающее 500 миль. - повторяет он - Ну, на самом деле немного дальше. Скажем, 520 миль. Но не дальше.

- Ээээ.... Вообще-то почта на самом деле работает немного не так - отвечает админ пытаясь скрыть смех в голосе. Люди не показывают насмешки разговаривая с начальником отдела, даже такого убогого как отдел статистики. - почему вы думаете что не можете отсылать почту дальше 500 миль?

- Я не думаю - раздражённо отвечает начальник - видите ли, когда мы впервые заметили это, несколько дней назад - ...

- Вы ждали несколько ДНЕЙ? - прерывает админчик - и всё это время вы не отсылали почту?

- Мы могли отсылать почту. Просто не дальше чем - ...

- 500 миль, ага. Я уже это понял. Но что же вы не позвонили раньше?

- Ну, ведь до текущего момента у нас не было собрано достаточно данных чтобы удостовериться в том, что происходит. - точно, всё-таки это руководитель отдела *статистики* - ну вот я и попросил одну из наших геостатистиков взглянуть на это - ...

- Геостатистиков...

- да, и она сделала карту, на которой был радиус, в пределах которого мы могли отсылать почту, немногим более 500 миль. В пределах этого радиуса было несколько точек которые мы всё равно не могли достичь, или письма туда доходили неустойчиво, но почту дальше этого радиуса мы слать не могли.

- Ясно - сказал наш bofh, валяясь под столом от ржача. - и когда же это началось? Вы сказали несколько дней назад, может в то время что-то изменилось в вашей системе?

- Ну, приходил консультант, пропатчил наш сервер и перегрузил его. Но я звонил ему, и он сказал что почтовую систему не трогал.

- Ясно. Ну давайте я посмотрю и перезвоню вам. - подыгрывая ему, сказал админ. Это не было первое апреля. И вроде бы админ ни над кем не подшучивал в последнее время.

Он залогинился в сервер их отдела и послал несколько тестовых писем. Тестовое письмо в собственный ящик админа было доставлено без проблем. Успешно ушли письма в несколько соседних городов.

Но затем он послал письмо в город на расстоянии 600 миль. Не проходит. В другой. Не проходит. Ещё. Опять не проходит. Открывает адресную книгу и пытается уточнить радиус.

Админ начал думать что он спятил. Он попытался послать письмо другу который был внутри 500 мильного радиуса, но провайдер его был за пределами 500 мильного радиуса. Слава богу - оно не прошло. Если бы проблема была в географическом положении человека, который получает письмо а не его почтового сервера, админ, наверное, бы разрыдался.

Установив что - невероятно - проблема была описана правильно, и воспроизводима, админ полез в sendmail.cf. В нём всё было в порядке.

Сравнив его с собственной копией он не получил различий - это был тот же самый sendmail.cf который написал наш админ. И он точно не включал опцию FAIL_MAIL_OVER_500_MILES. В растерянности он зателнетился на SMTP порт сервера. Сервер ответил приветствием СанОСовского сендмейла.

Секундочку, приветствие СанОСовского сендмейла? В то время Sun всё ещё поставляла в своей операционке Sendmail 5, не смотря на то что Sendmail 8 был уже широко распространён. Наш bofh был хорошим админом, так что он всюду ставил одну и ту же версию sendmailа - 8. Кроме того он всюду использовал новую замечательную возможность sendmail 8 - легко понятные человеку имена команд и настроек вместо крипто-пунктуации, которая заменяла настроечный язык в Sendmail 5.

Тут всё встало на свои места. Когда консультант "пропатчил сервер" он очевидно проапгрейдил операционку и таким образом продаунгрейдил Sendmail. Апгрейд оставил sendmail.cf нетронутым, даже не смотря на то что версия теперь не подходила.

Кроме того, Sendmail 5 - версия поставляемая в SunOS - не ругался на конфигурационный файл 8 версии, просто игнорируя читабельные имена и посчитав их мусором. Кроме того в Sendmail не было встроено значений по умолчанию для этих параметров. Так что не найдя подходящих значений в конфигурационном файле он установил их в 0.

Одна из настроек, которые были установлены в ноль это таймаут для соединения с удалённым почтовым сервером. Немного экспериментирования показало, что вот именно на этой машине, с её типичной нагрузкой, нулевой таймаут обрывает соединение примерно через три миллисекунды.

Сеть у них там была быстрая, задержки маршрутизации минимальны, так что время соединения с удалённым хостом в близкой сети ограничивается только скоростью света.

Поняв всё это наш bofh вводит в своей командной строке:

$units
1311 units, 63 prefixes

You have: 3 millilightseconds
You want: miles
* 558.84719
/ 0.0017893979

"500 миль или немного дальше."

Ещё один баг из категории "такого не может быть".
Previous post Next post
Up