Änderungen werden nicht in der Tabelle user_actions gespeichert

Mir ist gerade aufgefallen, dass ich entweder die Fälle, in denen eine Bearbeitungsmeldung erstellt wird, nicht vollständig verstehe, oder dass dies ein weit verbreitetes Problem ist, das ich unterschätzt habe.

Hauptannahmen

Wenn Benutzer A etwas bearbeitet, das Benutzer B geschrieben hat, passieren mehrere Dinge:

  • Eine neue Zeile wird in der Tabelle post_revisions hinzugefügt.
  • Eine neue Zeile wird in der Tabelle user_actions mit action_type = 11 hinzugefügt.
  • Unter /u/userB/notifications/edits kann Benutzer B sehen, dass Benutzer A eine neue Bearbeitung vorgenommen hat (dies hängt von user_actions ab).
  • Wenn Benutzer B auf das Stiftsymbol in seinem Beitrag klickt, kann er die tatsächliche Bearbeitung sehen, die Benutzer A vorgenommen hat (dies hängt von post_revisions ab).

Test

Wenn die oben genannten Annahmen korrekt sind, sollte diese Abfrage alle Zeilen in der Tabelle post_revisions für Beiträge anzeigen, die von Benutzer B (in diesem Fall ID 259) erstellt wurden und von einem beliebigen Benutzer (außer sich selbst oder dem Systembenutzer) bearbeitet wurden, zusammen mit den entsprechenden Zeilen in user_actions für action_type = 11.

with my_user_posts as (
  select
    p.id,
    p.user_id
  from
    posts p
  where
    p.user_id = 259 -- eine Benutzer-ID auswählen
)
select
  up.user_id as my_user_id,
  ua.user_id as target_user_id,
  pr.post_id,
  ua.target_post_id,
  pr.user_id as editor_user_id,
  ua.acting_user_id,
  ua.action_type,
  pr.created_at as edit_created_at,
  ua.created_at as action_created_at
from
  post_revisions pr
  inner join my_user_posts up on up.id = pr.post_id
  and up.user_id != pr.user_id -- keine Selbstbearbeitungen
  and pr.user_id != -1 -- keine Systembearbeitungen
  left join user_actions ua on ua.target_post_id = pr.post_id
  and ua.action_type = 11 -- nur BEARBEITEN-Aktionen
order by
  pr.post_id,
  pr.created_at;

Erwartete Ausgabe

Jede Zeile enthält sowohl post_revisions-Daten als auch user_actions-Daten.

Tatsächliche Ausgabe

Einige der post_revisions-Zeilen haben keine passenden user_actions-Daten. Daher kann der Benutzer die Revisionen sehen, indem er auf den Stift in jedem Beitrag klickt, wurde jedoch nicht über mehrere empfangene Bearbeitungen benachrichtigt.

Versuchte Maßnahmen

  • Hinzufügen einer zusätzlichen Bearbeitung an einem alten Beitrag ohne user_action-Daten. Ergebnis: Die user_action-Daten erschienen ebenfalls nicht.
  • Erstellen eines gefälschten Benutzers, Kopieren des Inhalts vor der Bearbeitung eines Beitrags ohne user_action-Daten, Erstellen eines Beitrags damit und Anwenden derselben Bearbeitung, die von einem anderen Benutzer durchgeführt wurde. Ergebnis: Die user_action-Daten wurden korrekt angezeigt.
  • Wiederholen der oben genannten Verfahren, wenn der Benutzer aktiv oder offline ist. Ergebnis: Keine Änderung.
  • Wiederholen der oben genannten Verfahren unter Änderung der Bearbeitungsfrist. Ergebnis: Keine Änderung.

Schlussfolgerungen

  • Das Problem scheint nicht zu sein:

    • benutzerspezifisch. Es tritt bei praktisch jedem Benutzer auf.
    • verbindungspezifisch. Der Umstand, ob der Benutzer aktiv oder offline ist, ändert die Ausgabe nicht.
    • zeitspezifisch. Die Änderung der Bearbeitungsfrist hatte keine Auswirkung.
  • Das Problem scheint zu sein:

    • aktionsspezifisch. Ich habe keine Probleme bei der Benachrichtigung über andere Aktionen (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION oder QUOTE) festgestellt. Das einzige Problem betrifft BEARBEITEN-Aktionen.

    • beitragspezifisch. Es tritt nicht bei jedem Beitrag auf, sondern nur bei bestimmten (scheinbar zufälligen) Beiträgen.

  • Eine Möglichkeit ist, dass während der Erstellung bestimmter Beiträge etwas passiert, das verhindert, dass BEARBEITEN-user_actions gespeichert werden, aber ich habe keine Ahnung, was das sein könnte.

  • Es ist auch möglich, dass dies absichtlich so gestaltet ist und dass es bestimmte Bedingungen gibt, unter denen Benutzer nicht über Bearbeitungen benachrichtigt werden, aber ich habe dies nirgendwo dokumentiert gefunden.

Nächste Schritte

  • Wenn Sie einen Grund wissen, warum Bearbeitungsmeldungen nicht jedes Mal ausgelöst werden, wenn eine Bearbeitung erfolgt, lassen Sie es mich bitte wissen.
  • Wenn Sie eine eigene Discourse-Instanz haben, könnten Sie die oben genannte SQL-Abfrage auf einigen Ihrer Benutzer-IDs ausführen, um zu prüfen, ob Sie ebenfalls fehlende user_actions-Daten sehen, und mir Rückmeldung geben?