수정 알림이 생성되는 경우를 내가 완전히 이해하지 못했거나, 이 문제가 내가 생각했던 것보다 훨씬 광범위한 문제일 수 있다는 것을 방금 깨달았습니다.
주요 가정
사용자 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데이터 누락이 보이는지 확인하고 보고해 주시겠습니까?
