작업 중복 방지는 어떻게 하나요? DistributedMutex 사용?

플러그인 초보입니다. 약 1시간 정도 걸리는 플러그인을 수정하고 있습니다. /sidekiq를 확인해보니 해당 작업이 30분마다 실행되고 있습니다. 그래서 첫 번째 작업이 끝나기도 전에 동일한 작업의 새로운 인스턴스가 시작되어 중복 결과가 생기는 문제입니다. 이를 방지하는 방법은 무엇일까요?

물론 작업을 허용된 30분 안에 완료하도록 만드는 것도 하나의 방법이지만, 다른 제약 사항들이 있어 작업이 원할 만큼 오래 실행되도록 하고 싶습니다.

아래처럼 시도해봤지만, 작업의 두 번째 인스턴스가 실행되는 것을 막지 못하는 것 같습니다:

DistributedMutex.synchronize("custom_digest", validity: 180.minutes)

요약 이메일 작업에 올해 초 추가된 테스트가 있는 것 같습니다. 해당 부분을 확인해 보시는 것이 좋습니다.

저는 https://review.discourse.org/t/feature-allow-post-process-mutex-to-be-held-longer/5017 과 https://review.discourse.org/t/fix-post-and-topic-creation-race-condition/5247 의 것과 동일한 작업을 수행하고 있다고 생각합니다. 다만 do/end 대신 중괄호를 사용한다는 점이 다르지만, 그건 중요하지 않다고 봅니다.

DistributedMutex.synchronize(“custom_digest”, validity: 180.minutes) {
do_stuff
}

그런데 do_stuff가 180분 이내에도 불구하고 여러 번 동시 실행되고 있습니다.

뮤텍스(muteex)가 execute 블록 안에 있다면, 그것은 단순히 해당 위치에서 뮤텍스를 기다리며 차단(block)된다는 뜻입니다. 즉, 두 개의 작업이 실행되는 것처럼 보일 수 있는데, 실제로는 하나만 실행되고 다른 하나는 뮤텍스를 기다리고 있는 상태입니다.

혹시 다른 인스턴스가 실행 중인지 확인하고, 그렇다면 조기에 반환(return)하는 로직을 원하시는 걸까요? 정확한 사용 사례에 대해 아는 정보가 너무 적어 추측하기가 어렵습니다.