수정 내역이 user_actions 테이블에 저장되지 않음

수정 알림이 생성되는 경우를 내가 완전히 이해하지 못했거나, 이 문제가 내가 생각했던 것보다 훨씬 광범위한 문제일 수 있다는 것을 방금 깨달았습니다.

주요 가정

사용자 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 데이터가 올바르게 나타났습니다.
  • 사용자가 활성 상태이거나 오프라인일 때 위의 절차를 반복했습니다. 결과: 변화 없음.
  • 수정 허용 기간(editing grace period)을 변경하면서 위의 절차를 반복했습니다. 결과: 변화 없음.

결론

  • 이 문제는 다음과 같은 원인이 아닌 것 같습니다:

    • 사용자 특정 문제. 사실상 모든 사용자에게 발생합니다.
    • 연결 상태 특정 문제. 사용자가 활성 상태이거나 오프라인인지에 따라 출력이 달라지지 않습니다.
    • 시간 특정 문제. 수정 허용 기간을 변경해도 효과가 없었습니다.
  • 이 문제는 다음과 같은 원인으로 보입니다:

    • 작업(action) 특정 문제. 다른 작업(LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION 또는 QUOTE)에 대한 알림 문제로는 어떤 것도 발견하지 못했습니다. 유일한 문제는 EDIT 작업과 관련되어 있습니다.

    • 게시글 특정 문제. 모든 게시글에서 발생하는 것이 아니라, 특정 게시글(무작위로 보이는)에서만 발생합니다.

  • 특정 게시글 생성 과정에서 EDIT user_actions가 저장되는 것을 방지하는 어떤 일이 일어나고 있을 가능성은 있지만, 그것이 무엇일지는 전혀 알 수 없습니다.

  • 또한 이것이 의도된 동작일 수도 있으며, 사용자가 수정에 대해 알림을 받지 않는 특정 조건이 있을 수 있지만, 어디에도 이에 대한 문서화를 찾지 못했습니다.

다음 단계

  • 수정이 발생할 때마다 수정 알림이 트리거되지 않을 수 있는 이유가 있다면 알려주세요.
  • 독자적인 Discourse 인스턴스가 있다면, 위의 SQL 쿼리를 사용자 id 중 일부에 대해 실행하여 user_actions 데이터 누락이 보이는지 확인하고 보고해 주시겠습니까?