編集通知が作成されるケースを完全に理解していないのか、それとも私が考えているよりもはるかに広範な問題なのか、今気づきました。
主な仮定
ユーザー A がユーザー B が書いた内容を編集すると、以下のことが起こります。
post_revisionsテーブルに新しい行が追加されます。action_type = 11でuser_actionsテーブルに新しい行が追加されます。/u/userB/notifications/editsにアクセスすると、ユーザー B はユーザー A による新しい編集を確認できます(これはuser_actionsに依存します)。- 投稿の鉛筆アイコンをクリックすると、ユーザー B はユーザー A が行った実際の編集を確認できます(これは
post_revisionsに依存します)。
テスト
上記の仮定が正しい場合、このクエリはユーザー B(この場合は ID 259)が作成した投稿の post_revisions テーブル内のすべての行(自分自身またはシステムユーザーによる編集を除く)と、対応する action_type = 11 の user_actions の行を表示するはずです。
with my_user_posts as (
select
p.id,
p.user_id
from
posts p
where
p.user_id = 259 -- ユーザー ID を選択
)
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 -- 自己編集除外
and pr.user_id != -1 -- システム編集除外
left join user_actions ua on ua.target_post_id = pr.post_id
and ua.action_type = 11 -- EDIT アクションのみ
order by
pr.post_id,
pr.created_at;
期待される出力
すべての行に post_revisions データと user_actions データの両方が含まれていること。
実際の出力
一部の post_revisions の行には対応する user_actions データがありません。そのため、ユーザーは各投稿の鉛筆アイコンをクリックしてリビジョンを確認できますが、複数の編集があったことについての通知は受け取っていません。
試したこと
user_actionデータのない古い投稿に追加の編集を行う。結果:user_actionデータも表示されませんでした。- 偽のユーザーを作成し、
user_actionデータのない投稿の編集前の内容をコピーして、それを用いて投稿を作成し、別のユーザーが行ったのと同じ編集を適用する。結果:user_actionデータは正しく表示されました。 - ユーザーがアクティブな場合とオフラインの場合の両方で上記の手順を繰り返す。結果: 変化はありませんでした。
- 編集の猶予期間を変更して上記の手順を繰り返す。結果: 変化はありませんでした。
結論
-
この問題は以下のものではないようです:
- ユーザー固有のもの。実際にはほぼすべてのユーザーで発生します。
- 接続固有のもの。ユーザーがアクティブかオフラインかの違いは出力に影響しません。
- 時間固有のもの。編集の猶予期間を変更しても効果はありませんでした。
-
この問題は以下のもののように見えます:
- アクション固有のもの。他のアクション(LIKE、WAS_LIKED、RESPONSE、REPLY、MENTION、QUOTE)の通知には問題は見当たりません。問題があるのは EDIT アクションのみです。
- 投稿固有のもの。すべての投稿で発生するわけではなく、特定の投稿(一見ランダムに)で発生します。
-
可能性として、特定の投稿の作成時に EDIT
user_actionsの保存を妨げる何かが起こっているかもしれませんが、それが何なのかはわかりません。 -
また、これは設計上のものであり、特定の条件下ではユーザーが編集の通知を受け取らないようになっている可能性もありますが、そのようなドキュメントはどこにも見当たりません。
次のステップ
- 編集通知が編集のたびにトリガーされない理由をご存知の場合は、お知らせください。
- ご自身で Discourse インスタンスをお持ちの場合は、上記の SQL クエリをいくつかのユーザー ID で実行し、
user_actionsデータの欠落が確認できるかどうかを確認し、結果をご報告いただけますでしょうか?
