실패한 VersionCheck 작업의 동작

이게 올바른 카테고리가 아니라면 죄송합니다.

저는 Discourse를 평가하고 있으며, 제 환경에서 VersionCheck Job이 실패하고 있습니다.

실패한 작업들이 sidekiq 내에 쌓여가고 있으며, 기본 25회 재시도 후 “dead” 섹션으로 이동될 것 같습니다 (RubyDoc.info: Class: Sidekiq::JobRetry – Documentation for sidekiq (8.1.7) – RubyDoc.info 참조).

실패 원인을 조사해야 한다는 것은 알고 있지만, 여기서 핵심은 이렇습니다: 이러한 작업들을 그곳에 유지하는 것이 합리적인가요? 실패한 버전 확인은 단순히 폐기하고 다음 작업 실행을 기다리는 것이 더 나은 것이 아닌가요?

현재 재시도를 기다리는 VersionCheck 작업이 80개 이상 있으며, 제 생각에는 이것이 자원의 낭비인 것 같습니다(아마도 적은 양일지 모르지만, 여전히 낭비입니다)…

확인해 본 바로는, app/jobs/scheduled/version_check.rb에 sidekiq_options retry: false를 추가하면 이 문제를 해결할 수 있을 것입니다.

제가 놓치고 있는 부분이 있을까요?

어떻게 설치하셨나요? 네트워크 문제나 RAM 문제일 가능성이 있다고 생각하시나요?

맞으실 수도 있지만, 이 문제를 보고하신 분은 (적어도 지금까지는) 당신뿐이므로 최적화 목록에 포함되지 않았습니다. 한 번 시도한 후 그냥 실패하도록 두는 것이 더 합리적이라고 생각합니다.

마지막으로 업그레이드를 언제 하셨나요?

몇 주 전(10월 말경)에 버전 확인 작업에 문제가 있었지만, 지금은 수정되었습니다. 터미널에서 업그레이드(./launcher rebuild app)를 실행하시면 정상적으로 진행될 것입니다.

ec2 인스턴스 안에서 표준 docker 설치 방식을 사용하고 있습니다.

저는 기업 환경에서 작업하고 있어서, 인스턴스와 인터넷 사이에 방화벽, 프록시, 보안 스캐너 등이 많이 존재합니다. 로그에서 “Job exception: Connection reset by peer - SSL_connect (Errno::ECONNRESET)” 오류를 확인했는데, 아마도 어떤 방화벽이 요청을 특정 시점에 거부하고 있는 것 같습니다… Discourse가 이 버전 확인을 어떻게 수행하는지 아직 정확히 파악하고 있는 중이라, 수동으로 재현하여 더 자세한 정보를 얻으려 하고 있습니다.

이해합니다. 과거에 GitLab을 다룰 때 전체 sidekiq 큐가 가득 차서 성능 저하와 기타 이상한 동작이 발생하는 문제를 많이 목격했기 때문에, 이런 현상을 볼 때마다 경보가 울리는 기분입니다. :smile:

현재 2.8.0.beta9 (959923d3cf) 버전을 사용 중입니다.

네… 터미널이나 GUI를 통한 업그레이드는 정상적으로 작동하고 있습니다(주 1회 실행 중). 이 경우의 유일한 문제는 메인 관리자 화면에서 최신 버전이 표시되지 않고 항상 구버전을 실행 중이라고 표시된다는 점입니다.

그렇다면 반드시 명령줄 업그레이드를 실행해야 합니다.

Discourse는 버전 업그레이드 확인, 사용자 아바타 가져오기, 원격 이미지를 로컬 저장소에 다운로드하기, 그리고 일반 원박스(oneboxing) 작업 등을 위해 인터넷에 연결을 시도합니다. 인스턴스가 인터넷과 완전히 차단되어 있다면 일부 기능이 제대로 작동하지 않을 수 있습니다.

네! 해결책을 찾을 때까지 매주 실행하고 있습니다.

정확히 이 때문에 원박스(oneboxing)를 포기해야 했습니다. 현재 이 서버에 대한 완전한 인터넷 액세스를 허용할 수 없습니다.
github.com/*는 이미 허용되어 있지만, 아마도 이 버전 확인 작업은 다른 URL을 사용하고 있을 것입니다.

제가 하라면 SiteSetting.version_checks를 끄고, discourse_docker 플러그인을 제거한 뒤 커맨드 라인으로 업그레이드를 진행하겠습니다.

하지만 여기서 https://api.discourse.org/api를 열 수 있다면 큰 문제는 없을 것입니다.

정보 감사합니다! https://api.discourse.org/api/version_check 에 대한 접근을 허용했을 때 작동했습니다.