메가토픽에 속한 게시물이 있을 때 "모든 게시물 삭제"를 사용할 수 없습니다

커뮤니티에서 문제가 발생하고 있습니다. 특정 사용자의 "모든 게시물 삭제"를 실행할 수 없습니다. 제가 파악한 바로는 게시물 수가 많은 오래된 계정에서만 이런 문제가 발생하는 것 같습니다. 새로운 계정에서는 이런 문제가 없습니다.

사이트 설정을 확인하고 ‘모든 게시물 삭제’ 한도를 10,000으로 늘렸습니다.

현재 게시물 수가 약 900개인 사용자를 삭제하려고 시도하고 있습니다. 해당 사용자는 익명화를 원하지 않으며, 계정과 게시물이 삭제되지 않으면 법적 조치를 취하겠다고 위협하고 있습니다. ‘모든 게시물 삭제’ 버튼을 누르면 약 1분 후에 다음과 같은 메시지가 표시됩니다:

브라우저 콘솔에서 게시물에 대해 502 오류가 표시되고 있습니다:
image

서버 로그를 확인해 보니, 삭제 시도를 한 후 다음과 같은 내용이 기록됩니다:

TypeError: undefined is not an object (evaluating ‘s.users’)
Url: https://myserver.com/assets/ember_jquery-d430881a3fb1403871256e5a02423c4b20a78793685e92088613ca9a701baf88.js
Line: 9
Column: 8994
Window Location: https://myserver/t/topic/64828/2502

문제의 원인을 찾기 위해 어디를 살펴볼 수 있을까요? 로그를 확인해야 하나요?

1개의 좋아요

관리자 / 로그 / 오류 로그로 이동해 보세요. 그리고 다시 게시물을 삭제해 보세요. 문제를 일으키는 게시물에 대한 로그 항목이 남아 있기를 바랍니다.

4개의 좋아요

모든 게시물을 삭제하려고 시도한 후 로그에 표시되는 오류입니다:

TypeError: undefined is not an object (evaluating ‘s.users’)
Url: https://myserver.com/assets/ember_jquery-d430881a3fb1403871256e5a02423c4b20a78793685e92088613ca9a701baf88.js
Line: 9
Column: 8994
Window Location: https://myserver.com/t/topic/64828/2502
1개의 좋아요

오류 다이얼로그가 표시되기 전에 몇 개의 게시글(약 5개)이 삭제되는 것을 확인했습니다. 이것이 관련이 있는지 모르겠습니다.

음, 게시글을 더 자세히 읽어야 했네요.

64828 ID의 주제에서 실패하는 것 같습니다. 해당 주제에 사용자가 게시글을 작성했나요?

죄송합니다. 자세히 살펴본 결과, 해당 오류는 다른 문제와 관련이 있는 것 같습니다.
현재 이 오류를 확인 중이며, 요청의 타임아웃 때문일 것으로 추정됩니다:

image

API 요청을 통해 삭제 작업을 시도해 보았지만, UI를 통해 실행하는 것과 동일한 결과가 나올 것 같습니다.

자신의 설치 환경에서 discourse API를 호출하는 작은 앱을 작성했습니다. 이 앱은 일괄 처리 대신 각 게시물을 개별적으로 삭제합니다. 따라서 700개의 게시물이 있으면 700번의 API 호출이 이루어집니다. 가장 효율적인 방법은 아니었지만 도움이 되었습니다.

현재 20개의 문제 있는 게시물이 있는 것을 확인했습니다. “모두 삭제” 기능이 이 중 하나에 도달하면 멈추고 삭제할 수 없는 것 같습니다. API도 어떤 이유로 인해 이 게시물들을 삭제하지 못했습니다. 이제 대부분은 게시물을 직접 들어가서 일반 관리자처럼 삭제 버튼을 눌러 수동으로 삭제했습니다.

아직 약 5개는 API를 통해서든, 일반 방법으로든 삭제할 수 없습니다. 이 게시물들 사이에 공통점을 찾지 못했습니다. 어떤 것은 거대한 주제 안에 있고, 어떤 것은 작은 주제 안에 있습니다. 어떤 것은 답변이고, 좋아요가 있거나 이미지가 있는 반면, 그렇지 않은 것도 있습니다. 표준 UI를 통해 삭제하려고 하면 다음과 같은 오류 대화상자가 표시됩니다:

몇몇 사용자들이 자신의 게시물을 삭제하려고 할 때 동일한 대화상자를 받는다고 보고했습니다. 대부분 모바일에서 접속하고 있어 연결 문제라고 가정했지만, 다른 원인일 수도 있습니다.

수동으로 삭제하려고 하면 다음과 같은 로그가 나옵니다:
23

어떤 아이디어나 조언이 있을까요?

문제가 있는 5개의 게시글은 모두 두 개의 대형 주제 안에 있습니다. 최근 이 두 주제는 규모가 너무 커져서 모두 닫았습니다. 한 주제는 55,000개의 게시글, 다른 주제는 17,000개의 게시글을 보유하고 있습니다. 이렇게 큰 주제에서 게시글이 삭제될 때 상당한 처리 과정이 일어나고, 이로 인해 어떤 종류의 타임아웃이 발생하는 것 같습니다. 하지만 이것은 추측일 뿐입니다.

1개의 좋아요

지금 막혀 있습니다. 큰 주제들 안의 게시물을 삭제할 수도 없고, 주제 자체를 삭제할 수도 없습니다. 두 경우 모두 502 게이트웨이 오류 메시지가 표시됩니다.

:scream:

콘솔을 사용해 이 5개의 게시물을 삭제해 보셨나요?

./launcher enter app
rails c
Post.find(THE_POST_ID).destroy
2개의 좋아요

맞아요! 그 방법이 효과가 있습니다. 저는 Ruby나 Rails에 대해 전혀 알지 못하지만, 이렇게 여러 게시글을 한 명령어로 연쇄적으로 삭제할 수 있습니다:

Post.find(POST1_ID).destroy; Post.find(POST2_ID).destroy

나중에 몇몇 게시글이 고착되는 상황이 생기면 이 방법을 사용할 가능성이 높습니다. 이 방식으로 주제(Topic)도 삭제할 수 있을까요? (그리고 안전할까요?)

일반적으로 Discourse의 게시글은 하드 삭제(hard-delete)가 아니라 소프트 삭제(soft-delete) 처리됩니다. destroy 명령을 사용하면 데이터베이스에서 해당 게시글이 완전히 삭제되며, 제가 이 명령을 사용하도록 한 이유는 삭제하려는 게시글이 매우 긴 주제(topic)에 속해 있었기 때문입니다.

게시글이든 주제이든 이 방법을 사용하는 것을 권장하지 않습니다. 이 방식으로 삭제된 내용은 복구할 수 없으며, 제 이해에 따르면 현재 운영 중인 사이트의 데이터베이스를 다루고 있으므로, 문제가 발생할 경우 사이트 전체가 손상될 위험이 있습니다. 그럼에도 불구하고 destroy 명령을 사용하려는 경우, 그렇게 하셔도 무방합니다. 이 유형의 명령을 사용할 계획이라면 항상 백업을 수행해야 합니다.

주제를 영구적으로 삭제하려면 다음을 실행하세요.

Topic.find(THE_TOPIC_ID).destroy
1개의 좋아요

이러한 유형의 성능 문제를 방지하기 위해 메가토픽 생성을 피할 수 있는 설정도 도입했습니다. 자세한 내용은 The MEGATOPIC: public good, or public menace? 를 참고하세요 :arrow_up:

2개의 좋아요

조언해 주셔서 감사합니다. 예상했던 내용과 비슷하고, destroy 명령은 최후의 수단으로만 사용하겠습니다.

보통은 게시글을 소프트 삭제하는 것인데, 단순히 레코드를 삭제하는 대신 다른 것들을 많이 기록하는 것 같습니다. 그래서 메가 토픽에서 게시글을 삭제할 때 제대로 작동하지 않는 건가요? 해야 할 일이 너무 많아 타임아웃에 걸리는 건가요?

위험한 콘솔 명령에 의존하지 않고 이 문제를 해결할 수 있는 방법이 있으면 좋겠습니다.

감사합니다. 최대 토픽 수 한도를 2,500으로 변경했습니다. 얼마 전부터 사용자들 사이에서 한도를 없애달라는 요구가 이어졌고, 이로 인해 초대형 토픽들이 생겨났습니다. 하지만 초대형 토픽은 포럼에 좋지 않습니다. 많은 사람이 동시에 답글을 남기는 피크 시간대에 서버 성능이 크게 저하되었기 때문입니다. 이런 상황을 막기 위해 해당 토픽을 닫았지만, 여전히 다른 문제를 일으키는 거대한 토픽들이 남아 있는 상태입니다.

가장 간단한 해결책은 일부 관리자가 나서서 메가토픽을 여러 개의 토픽으로 나누기(그리고 닫기) 시작하는 것입니다. 예를 들어 다음과 같이요.

  • :lock:[메가토픽 제목] 1부
  • :lock:[메가토픽 제목] 2부
  • :lock:[메가토픽 제목] 3부
  • :lock:[메가토픽 제목] […]
  • :unlock:[메가토픽 제목] 10부

각 부분은 이전과 다음 부분에 자동으로 링크되므로 사용자가 탐색에 어려움을 겪지 않을 것이며, 성능 문제도 확실히 해결할 수 있을 것입니다.

네, 지루한 작업이 될 수 있지만, 이것이 바로 55,000개나 17,000개의 게시글이 있는 토픽이 전혀 쓸모없는 이유 중 하나이기도 합니다. 아무도 그걸 읽지 않으니까요.

4개의 좋아요

이러한 용도를 위해 정확히 해당되는 기능(사이트 설정)이 이제 있습니다!

4개의 좋아요