RSS-каналы таинственно исчезают

Мы используем плагин rss-polling для импорта записей из десятков лент. Время от времени некоторые ленты просто исчезают из списка. Мы не знаем, при каких условиях это происходит, не понимаем, как именно, и не можем найти никаких логов подобных действий. Мы также не обнаружили какой-либо закономерности. Они просто исчезают, и нам приходится заново создавать их записи (когда мы замечаем их отсутствие, что при таком количестве лент не всегда очевидно).

Существует ли в коде функция, которая удаляет RSS-ленту при определённых условиях? Есть ли лог, который фиксирует такие случаи?

В прошлом году @blake перенёс бэкенд-хранилище в базу данных.

Кажется, сейчас есть только одно место, которое удаляет ленты, — это обновление:

Особенно если «feed_settings» каким-то образом установлены в пустое значение, так что, возможно, здесь задействован человек?

Как часто это происходило?

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

Может быть, это какая-то автоматизация, которая отправляет [] (пустое значение) и не передаёт полное состояние при обновлении лент?

3 лайка

Единственное, что мы делаем с RSS-лентами, — это вручную создаём новые на странице /admin/plugins/rss_polling. Ничего больше.

Я заметил, что порядок отображения RSS-лент на этой странице периодически меняется, что уже странно. Это затрудняет отладку проблем, так как теряется хронологический порядок создания лент, а новое сортирование, похоже, не следует ни алфавитному, ни числовому порядку.

Мы не знаем, как часто возникает эта проблема, поскольку не можем сразу её обнаружить. В лучшем случае мы можем лишь ждать, пока владелец ленты сообщит, что новые записи не появляются, или сами заметим, что, например, еженедельный подкаст давно не обновлялся на форуме.

У меня складывается впечатление, что эта проблема может быть связана с ситуациями, когда загрузка процессора приближается к 100% или когда какой-либо другой ресурс сервера достигает максимальной нагрузки. Даже если планировщик хорошо справляется с опросом только пяти лент одновременно, в аналитике хостинга видно, что при обновлении RSS-лент загрузка процессора практически достигает 100%.

Возможно, именно поэтому форумы с всего парой лент не замечают этой проблемы, но если добавить множество лент, что-то может время от времени ломаться, несмотря на работу планировщика?

См. связанную тему: Are there any upper limits to the RSS Polling plugin? - #4 by icaria36

3 лайка

(Думая дальше)

В любом случае, интересно, почему Discourse вообще должен удалять RSS-каналы, да ещё и молча. Если RSS-канал по какой-то причине проблемный, его можно просто пропустить в этот раз и записать проблему в лог. С этого момента возможны два варианта:

  1. Проблема была разовой, и следующие запуски планировщика пройдут без сбоев. Запись в логе будет забыта.
  2. Проблема сохраняется, каждый пропуск оставляет запись в журнале ошибок, и когда кто-то обнаруживает проблему, администраторы могут проверить журнал ошибок и найти детали.

В идеале администраторы должны получать какое-то уведомление, но я понимаю, если это усложнит потенциальное решение. Пропуск вместо удаления + запись в журнал ошибок уже станет большим улучшением.

И чтобы пояснить, какое влияние эта проблема оказывает на наш проект. У нас есть портал независимых подкастов; авторы подкастов связываются с нами для включения в агрегацию, мы создаем канал (подкатегорию), куда импортируются их программы, и где слушатели могут ставить лайки и оставлять комментарии… Когда они узнают, что мы прекратили их агрегацию, и нам приходится отвечать, что somehow их канал был удалён, это создаёт очень плохое впечатление о нашем проекте и о платформе Discourse.

1 лайк

:grimacing: Этот «временный» код, который уже более года находится здесь, скорее всего, и является причиной. Я займусь этим.

5 лайков

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

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

@icaria36, если вы обновите свой плагин, вы получите это последнее изменение. Я снова напишу, когда будут готовы новые улучшения.

3 лайка

Спасибо за исправление! Я сразу обновился до новой версии и добавил недостающие RSS-каналы (около 20!), но сегодня проверил и… каналы снова бесшумно исчезли. :frowning: Не знаю, когда, не знаю, как, до сих пор не знаю, какие именно, но отсутствует около дюжины. Никакого диалога с запросом о каналах перед их удалением я не видел, да и вообще ничего. Кроме того, я добавил RSS-каналы снова, когда загрузка процессоров сервера была нормальной, чтобы избежать времени опроса RSS, просто исключив этот фактор из уравнения.

У меня складывается впечатление, что существует связь между тем, что список меняет порядок сортировки, и тем, что каналы исчезают. Что бы ни вызывало изменение сортировки, это может быть достаточно травмирующим, чтобы также привести к потерям. Полезный вопрос мог бы звучать так: почему список вообще меняет порядок сортировки? Исчезновение каналов при неизменной сортировке списка было бы столь же плохо, но это выглядело бы… более аккуратно. :slight_smile:

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

Отличным помощником в отладке было бы отображение строки с общим количеством каналов в /admin/plugins/rss_polling, например, просто «N каналов». Или же можно было бы пронумеровать список.

1 лайк

Ах, жаль, я так и думал, но спасибо за обновление. Теперь, когда праздники закончились, я займусь правильным исправлением этой проблемы.

1 лайк

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

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

2 лайка

Большое спасибо за вашу оперативную реакцию! Сегодня вечером я обновлю систему, проверю, что все наши каналы включены, и отпишусь здесь, если возникнут какие-либо проблемы (хотя, надеюсь, их не будет).

1 лайк

Вау, это стало намного лучше! Каждый канал редактируется отдельно, с сохранением изменений по одному. Сохранение нового канала происходит мгновенно. Раньше, когда у вас было много каналов, добавление нового канала и нажатие кнопки «Сохранить» занимало несколько секунд, прежде чем обновлялся весь список. Теперь всё работает надёжно и стабильно. Большое спасибо!

Я подожду пару недель, чтобы убедиться, что ни один канал не потеряется.

Несколько предложений по улучшению интерфейса, на случай, если они окажутся полезными и будут уместны:

Знак «+» для добавления нового канала находится вверху, но новая строка добавляется внизу. Если список каналов длиннее экрана, пользователь нажимает «+» и не видит никаких изменений. Я хорошо знаком с этой страницей, но сначала подумал, что кнопка сломана. Затем я решил проверить конец списка и обнаружил там новую строку, ожидающую, как и раньше.

  • Размещение новой строки в начале списка, сразу под кнопкой «+», могло бы стать хорошей альтернативой. Если это поместит новый канал в начало списка, это тоже хорошо, особенно если он первым попадает в планировщик. Новые каналы с большей вероятностью принесут больше работы и потребуют проверки, чем уже устоявшиеся.

Есть несколько надписей «Настройки каналов» и «Настройки Discourse», которые кажутся просто висящими в воздухе. «Настройки каналов» кажется избыточным, поскольку список находится прямо ниже и сам по себе понятен. Предназначена ли надпись «Настройки Discourse» как ссылка на /admin/site_settings/category/plugins?filter=plugin%3Adiscourse-rss-polling? Или, возможно, они должны быть вкладками для двух разных подстраниц?

  • Одной из альтернатив могло бы стать просто их удаление.

2 лайка

Отлично! :slight_smile:

Да, хороший момент. Я буду это иметь в виду. У нас есть новая тема на Creating consistent admin interfaces, и я думаю, что некоторые улучшения плагина rss-polling появятся благодаря ей. Скорее всего, мы создадим отдельный экран редактирования, как это делаем для других плагинов, вместо редактирования непосредственно в строке.

Да, спасибо, что обратили на это внимание. Я понимаю, как это может запутать. «Настройки ленты» — это метка для первых двух столбцов, указывающая, что эти столбцы влияют на RSS-ленту. Метка «Настройки Discourse» относится к последним трем столбцам, указывая, что при их изменении затрагиваются элементы в Discourse.

3 лайка

Прошла неделя, мы добавили несколько десятков RSS-каналов к уже имеющимся более чем ста, и список теперь абсолютно надёжен. Мы не обнаружили никаких проблем!

3 лайка

Эта тема была автоматически закрыта через 36 дней. Новые ответы больше не принимаются.