Исчезающие закладки и ожидаемое поведение /bookmarks

Наше сообщество сообщает, что после обновления до Discourse 3.0 примерно 2 месяца назад закладки иногда таинственным образом исчезают. Я сузил круг жалоб до пользователей, которые в основном используют /bookmarks (а не /my/activity/bookmarks) — между ними есть связанная проблема удобства использования, но к этому я вернусь позже.

Сейчас меня больше всего смущает ожидаемое поведение /bookmarks, так как там отображаются не все закладки пользователей (как это показано в /my/activity/bookmarks). Почему так? Для моего собственного аккаунта разница составляет почти треть отсутствующих закладок: разве эти два раздела не должны отображать одинаковое количество закладок/тем?

Я думал, что /bookmarks поддерживает только закладки на сообщения (а не на темы), но, похоже, это не так: наши пользователи последовательно закладывают сообщение/тему, видят их корректно в /bookmarks в течение нескольких часов или дней, а затем они просто… исчезают? :confused: Если они удаляют закладку и создают её снова, она появляется на время, а затем снова исчезает. Чтобы прояснить: закладки всегда корректно отображаются в /my/activity/bookmarks, то есть сама закладка существует — но по какой-то причине не показывается в /bookmarks через некоторое время. Должна быть разница в содержимом этих двух разделов, но я её не вижу — что я упускаю? :thinking:


Теперь о том, почему это особенно раздражает наших пользователей: они считают /my/activity/bookmarks непригодным для их основной задачи — поиска тем с закладками, которые получили обновления (в определённой категории или на всём форуме).

Я вижу много полезного функционала в интерфейсе /my/activity/bookmarks, но он всё ещё не решает их главную задачу: возможность сортировать по последнему обновлению и одновременно видеть, в каких темах есть новые сообщения (количество непрочитанных). Было бы здорово, если бы сортировка работала и там, и отображалось количество непрочитанных сообщений в каждой теме, но я не уверен, как должна работать фильтрация закладок по категориям в /my/activity/bookmarks, поэтому, возможно, наличие /bookmarks оправдано.

В любом случае, возможно, здесь две отдельные проблемы (возможно, ошибка (?) и проблема UX), но они связаны: я призываю сообщество избегать «исчезающих закладок», используя /my/activity/bookmarks, но для их целей это действительно не работает. Возможно, если мы поймём причину «исчезновения» закладок, сможем найти обходной путь — так что: почему не все закладки отображаются в /bookmarks?

5 лайков

Я частично объяснил эту разницу тем, что /bookmarks не включает закладки на личные сообщения, и если в теме есть несколько закладок, то она отображается в /bookmarks только один раз.

Однако закладки всё ещё отсутствуют. У нас есть несколько участников, у которых темы отображаются в разделе /my/activity/bookmarks, но не всегда появляются в /bookmarks. Подчеркну слово всегда, потому что изначально они там всегда есть, но со временем, через несколько часов или дней, исчезают. :anguished:

Опять же, это началось только после обновления до Discourse 3.0, поэтому я подозреваю наличие ошибки.

Мы не можем добавлять закладки на посты, только на темы :thinking:

Я понимаю, что вы можете добавлять в закладки конкретные сообщения; даже несколько сообщений по одной и той же теме:

4 лайка

Ваше понимание действительно верное и обоснованное. Моего — нет.

Когда же это у нас появилось?

Это, наряду с возможностью закладки сообщений чата (что работает только при включённом плагине чата), существует уже некоторое время, по крайней мере с момента FEATURE: Promote polymorphic bookmarks to default and migrate (#16729) · discourse/discourse@fcc2e7e · GitHub.

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

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

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

1 лайк

Теперь я понимаю, что, возможно, стоило разделить свою тему на две: одну для ux и другую для bug, так как моя основная проблема (исчезающие закладки) затмевается проблемой удобства использования.

Тем временем я изучал функцию закладок и обнаружил ещё одну ошибку, но всё ещё не понимаю, почему закладки случайно исчезают из /bookmarks. По какой-то причине это чаще встречается с некоторыми темами, чем с другими, но я не нашёл общей закономерности. Для меня действительно странно то, что после добавления закладки она какое-то произвольное количество часов или дней отображается корректно в /bookmarks, а затем исчезает оттуда и «исправляется» только после удаления закладки и повторного её добавления.

Для ясности: это не проблема настройки напоминания о закладке для её удаления — напоминаний нет, и закладки не удаляются (они всё ещё отображаются в /my/activity/bookmarks) — они просто исчезают из /bookmarks спустя *некоторое время`.

2 лайка

Переместил это в bug, так как Support не относится ни к одной из этих двух категорий, в надежде, что здесь это привлечет больше внимания.

Извините за косвенное поднятие темы, но у нас есть довольно много разочарованных пользователей, крайне недовольных этим. Возможно, тот факт, что /bookmarks не включен по умолчанию (то есть не виден в интерфейсе), несколько снижает заметность этой ошибки, но я не могу представить, чтобы это было специфично только для нашего форума.

1 лайк

Просто хотим сказать, что мы вас не игнорируем. :slight_smile: Мы просто ищем лучший способ решить этот вопрос. Надеемся, скоро у нас будут для вас новости. :crossed_fingers:

1 лайк

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

Сейчас я проигнорирую проблему UX и сосредоточусь на ошибке.

Начну с повторного описания проблемы:

Теоретические шаги для воспроизведения, но не со 100% уверенностью:

  1. Начните без закладок
    • Перейдите на /bookmarks и убедитесь, что в списке нет тем
    • Перейдите на /my/activity/bookmarks и убедитесь, что в списке нет закладок
  2. Добавьте закладки к некоторому количеству постов и тем. (Например, 15 закладок в 10 уникальных темах)
    • Мы не думаем, что здесь играют роль напоминания, но, возможно, это так?
    • Мы пока не знаем, имеет ли значение, закладываете ли вы пост или тему
  3. Запомните, сколько уникальных тем было закладовано
  4. Перейдите на /bookmarks и убедитесь, что в списке 10 тем
  5. Перейдите на /my/activity/bookmarks и убедитесь, что в списке 15 элементов из 10 тем
  6. Подождите
  7. Вернитесь на /my/activity/bookmarks и убедитесь, что в списке всё ещё 15 элементов из 10 тем
  8. Перейдите на /bookmarks и увидите, что в списке меньше 10 тем

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

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

  1. Перейдите на /my/activity/bookmarks и прокрутите страницу до конца.
  2. Посчитайте количество уникальных тем (N)
  3. Перейдите на /bookmarks и прокрутите страницу до конца.
  4. Убедитесь, что в списке меньше N тем
1 лайк

Спасибо, что взялись за это — я понимаю, что это не входит в топ самых захватывающих багов для исправления. :sweat_smile:

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

Тем не менее, из-за случайной природы проблемы (возникает в случайной теме в случайное время и исчезает через произвольный промежуток времени) её может быть сложно воспроизвести, просто выполнив эти шаги, поскольку, похоже, требуется обычное использование, и неясно, есть ли триггер (и что это за триггер, возможно, время): мне не удалось воспроизвести этот баг по требованию, а пользователи, сообщившие о нём, гораздо активнее используют /bookmarks, чем я.

Однако у меня есть сообщения от нескольких разных пользователей, затронутых этой проблемой, которые я проверил через имперсонацию аккаунтов. Я попросил некоторых не добавлять заново хотя бы некоторые из тех тем, которые исчезли из /bookmarks, поэтому, хотя я не могу воспроизвести проблему по требованию, у меня всё ещё есть доступ к аккаунтам, где это происходит, и сравнение /bookmarks и /my/activity/bookmarks показывает различия.

Хотя я не могу предоставить доступ администратора к нашему форуму, я с радостью выполню любые SQL-запросы или запросы к API Discourse нашего экземпляра (даже от имени пользователей, столкнувшихся с этой проблемой), если это поможет. Пожалуйста, напишите мне в личные сообщения с деталями нашего форума, если кто-то захочет разобраться.

Я немного поэкспериментировал с конечными точками /bookmarks.json и /my/activity/bookmarks.json, но не продвинулся далеко: похоже, страница /bookmarks уже загружается с первой страницей результатов и обращается к конечной точке только для получения дополнительных страниц, в отличие от /my/activity/bookmarks, которая, кажется, загружает все данные закладок из конечной точки. Поэтому я не смог полностью сравнить ответы API.

Я не разработчик на Ruby, но попытался понять, где в коде находятся эти две конечные точки, чтобы попытаться разобраться в различиях, но, не зная технологического стека, запутался в контроллере и нашёл только UsersController#bookmarks.

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

Это, вероятно, верно, но я не могу это подтвердить, так как все пользователи нашего форума, затронутые проблемой, являются давними пользователями с множеством существующих закладок, и проблема появилась после обновления до версии 3.0. Однако, поскольку проблема повторяется при удалении закладки и повторном добавлении, я предполагаю, что при начале с чистого листа она тоже возникнет. Один из пользователей сообщил, что проблема чаще встречается сразу после обновления и становится реже… но возможно, они просто теряют закладки, не замечая этого. :sweat_smile:

Я проверил с несколькими пользователями, которые были достаточно терпеливы, чтобы помочь разобраться в этом, и мне сказали:

  • они всегда закладывают темы, а не посты;
  • они никогда не используют напоминания для закладок.

Я предполагаю, что это не означает, что проблема не возникнет с постами и напоминаниями, просто, похоже, она не зависит от этого.

Маленькое замечание: /my/activity/bookmarks также может показывать закладки из личных сообщений, поэтому другое значение N может быть связано и с этим (из-за чего я сам запутался в какой-то момент).


Ещё раз: я с радостью выполню SQL-запросы, запросы к API или предоставлю дополнительную информацию, если это поможет. Я полностью понимаю, что отладка этой проблемы затруднена из-за её случайного поведения, но именно поэтому она вызывает раздражение у пользователей.

1 лайк

Одна из теорий заключается в том, что поле topic_users.bookmarked каким-то образом рассинхронизируется. Если у вас есть идентифицированная проблемная тема, попробуйте выполнить запрос к таблице topic_users для этой комбинации пользователя и темы и проверьте, установлено ли значение bookmarked в true или false.

Также мне интересно, показывает ли новая экспериментальная функция /filter «пропущенные» темы с параметром in:bookmarked, например, Discourse Meta. Можете ли вы также попробовать это и сообщить нам?

1 лайк

Да, похоже, что так и есть.

Я проверил одну из «пропавших» закладок: для неё topic_users.bookmarked был установлен в false. Эта тема не отображается в разделе /bookmarks, но присутствует в /my/activity/bookmarks.

Также не уверен, что это имеет отношение к делу, но topic_users.last_posted_at для этой записи указывает дату почти месячной давности (примерно когда тема исчезла), тогда как в самой теме новые сообщения появляются почти ежедневно с тех пор.

В любом случае, не знаю, что именно меняет флаг bookmarked, но, видимо, стоит обратить на него внимание.

Есть ли что-то ещё, что я могу проверить?

С радостью бы попробовал, но мы используем стабильную версию (3.0.3), поэтому у нас этой функции пока нет.

2 лайка

Это очень полезно. Спасибо. Если вы знаете, какая версия была установлена до обновления до 3.0.3, это поможет нам определить, когда была внесена ошибка.

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

2 лайка

Мы всегда находились на стабильной ветке, поэтому, скорее всего, ранее у нас была версия 2.8.14. Обновление было выполнено 11 марта, вероятно, до версии 3.0.1, а первая жалоба поступила 18 марта. Таким образом, теоретически это могло быть и до версии 3.0.2. К сожалению, между этими версиями было выпущено довольно много бета-версий 2.9.

Если где-то в файловой системе есть лог, позволяющий определить предыдущие версии, я могу это перепроверить, но диапазон 2.8.14...3.0.2 должен быть верным.


Не уверен, поможет ли это, так как я не знаком со схемой данных, но я выполнил следующий запрос:

SELECT
  topic_users.user_id,
  topic_users.topic_id
FROM
  bookmarks,
  topic_users
WHERE
  bookmarks.user_id = topic_users.user_id
  AND bookmarkable_type = 'Topic'
  AND bookmarks.bookmarkable_id = topic_users.topic_id
  AND topic_users.bookmarked = false;

и получил более 3000 совпадений.

Думаю, аналогичный запрос можно выполнить на любой рабочей системе, чтобы найти некоторые «пропущенные» закладки, что, надеюсь, приблизит нас к воспроизведению проблемы. Извините, если я говорю очевидные вещи, просто пытаюсь помочь. :sweat_smile:

2 лайка

Кстати, мы уже на версии 3.1.2, но проблема всё ещё сохраняется.

Пользователи сообщают, что некоторые закладки «исчезают» до 5 раз в день (после каждого повторного добавления). В текущем виде функционал слишком неработоспособен для использования, а хорошей альтернативы с аналогичным уровнем возможностей нет.

Теперь, когда есть способ воспроизвести проблему (через SQL-запрос) и известен диапазон версий, в которых баг был introduced, могу ли я надеяться, что это будет исправлено в будущем?

О, теперь, когда вы на версии 3.1.2, в следующий раз, когда вы увидите это, пожалуйста, проверьте, отсутствуют ли эти темы также в /filter или они там отображаются?

Я думаю, что знание ответа на этот вопрос поможет нам решить, что делать в данном случае.

3 лайка

Я протестировал функцию /filter, и проблема, похоже, проявляется также при поиске с параметром in:bookmarked.

Из-за случайного характера исчезновения я провёл тест следующим образом: сначала нашёл «проблемную» закладку, используя SQL-запрос, который я публиковал ранее, затем impersonated этого пользователя и успешно обнаружил закладку, которая:

  1. присутствует на странице /my/activity/bookmarks (как и ожидалось),
  2. но отсутствует в списке на странице /bookmarks (хотя должна быть),
  3. и не отображается на странице /filter?q=in%3Abookmarked.

При запросе к таблице bookmarks базы данных она, разумеется, там есть. Однако при запросе к таблице topic_users столбец bookmarked установлен в значение false, и я предполагаю, что это может быть связано с проблемой?

Для ясности: у этой учётной записи также есть закладки, которые корректно отображаются во всех трёх местах выше (как и должно быть), но это временное состояние — в конечном итоге они «исчезают». SQL-запрос, похоже, возвращает только проблемные записи. Таким образом, запуск этого запроса на нагруженной продакшн-системе и имперсонация соответствующего пользователя должны позволить воспроизвести проблему.

1 лайк

Спасибо, @mentalstring. Я снова обсудю это с командой, имея в виду эту новую информацию, и посмотрим, что у нас получится дальше.

2 лайка

@mentalstring спасибо за ваше терпение все это время, извините, что так долго пришлось докопаться до сути проблемы. Сегодня, опираясь на предоставленные вами данные и отчет в Data Explorer на Meta, я нашел причину и способ воспроизвести её.

Для воспроизведения:

  • Добавьте тему в закладки, но не добавляйте в закладки ни одного поста внутри неё.
  • Удалите или восстановите любой пост в теме.

Причина в этой задаче (добавленной мной несколько лет назад), которая не учитывает закладки на уровне темы:

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

3 лайка