Кратко

  • Клиент выполнял DATE перед NEWNEWS и временно удерживал ответ, но поиск запускал от отметки, сохранённой в предыдущем сеансе.
  • Соседние интервалы намеренно перекрывались. Повторный Message-ID можно сверить и объединить; статья, перескоченная новым checkpoint, не оставляет свидетельства о пропуске.
  • Список описывал поступления на конкретный сервер в выбранные группы при доступной команде, а не передавал тексты и не обещал полную мировую историю.

Пробел длиной в восемь секунд

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

У такого сбоя нет удобного объекта. Клиент не видел Message-ID, поэтому не знает, что именно запрашивать снова. Пустота не отличается от периода, когда действительно ничего не поступило.

RFC 3977 закрывает гонку порядком действий. В начале клиент запрашивает DATE и держит значение во временном хранилище. Затем выполняет NEWNEWS от времени, сохранённого в прошлом сеансе. Только после приёма результата старую отметку заменяет значение, уже снятое до начала поиска. Следующий опрос снова охватывает период, когда готовился нынешний ответ.

Сначала каталог идентификаторов

В RFC 977 1986 года команда NEWNEWS принимала группы, дату и время, а возвращала Message-ID статей, опубликованных или принятых после этой границы. Шаблоны расширяли выбор, начальный восклицательный знак исключал ветви, пустой список оставался допустимым ответом.

Тел статей в нём не было. Команда помогала обнаружить кандидатов для последующего получения. Наличие идентификатора доказывало лишь попадание в этот результат, но не загрузку текста, его проверку или вечное хранение.

Исходный синтаксис предусматривал необязательный параметр distribution. RFC 2980 зафиксировал расхождения в его трактовке и отметил, что администраторы часто отключали NEWNEWS. Стандартное имя не означало одинаковую доступность на каждом сервере.

Новизну определял локальный приход

RFC 3977 различает три ключа. Message-ID задуман как глобальная идентичность статьи. Пара «группа и номер» действует на отдельном сервере. Отметка прихода сообщает, когда статья достигла именно этого сервера. Для NEWNEWS решающим является третий ключ.

Дата, написанная автором, не управляет выборкой. Старый по содержанию материал, доставленный с задержкой, сегодня будет новым поступлением. Один и тот же материал получает разные времена на разных ретрансляторах. Команда описывает историю точки наблюдения, а не единую хронологию Usenet.

Граница должна измеряться часами этого же свидетеля. RFC 2980 определил DATE как UTC с точки зрения сервера. RFC 3977 требует использовать тот же источник времени, который ставит отметки прихода статей и создания групп. DATE не заменяет NTP; он даёт клиенту координату, по которой сервер сам будет сравнивать события.

Повтор как страховочный шов

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

RFC 3977 разрешает сдвигать время назад на две-три минуты для мелких погрешностей. В нормативном примере один Message-ID появляется в двух соседних сеансах. Дубликат — не порча данных, а видимый след запаса.

Порядок строк тоже не является курсором. Он не имеет заданного смысла, способен меняться даже в одном сеансе, а один Message-ID может встретиться несколько раз в одном ответе. Несколько появлений означают то же, что одно. Клиенту нужен разбор множества идентичностей, а не доверие к позиции строки.

Чего перекрытие не доказывает

Безопасная граница не исправит неверный шаблон групп. Она не включит отсутствующую способность и не вернёт то, о чём сервер больше не способен сообщить. Неполный многострочный ответ не даёт права продвигать отметку. При смене сервера меняются часы и история прихода, даже если формат cursor прежний.

Реестр параметров NNTP IANA регистрирует NEWNEWS как способность, сообщающую о доступности команды. Запись подтверждает общее имя и ссылку на стандарт, но не включение функции и не полноту конкретного архива.

Сила решения в выборе проверяемой неисправности. У дубликата есть Message-ID: его можно посчитать, сопоставить и свести к одной записи. У статьи, оставшейся за слишком быстро продвинутой границей, в локальных данных нет даже имени.

Checkpoint — это утверждение о прошлом

Курсор обозначает не просто текущее место. Он заявляет, что всё раньше него просмотрено достаточно полно и больше не требует запроса. Время конца ответа может распространить такое утверждение на секунды, которые поиск вообще не охватывал.

NNTP выбрал восстанавливаемое неудобство. Будущая отметка снималась до поиска, старая продолжала действовать во время передачи, а полномочия переходили после приёма. Неопределённость не исчезала, но получала шанс проявиться повторным идентификатором, а не безупречной ложной тишиной.

Источники