서버 안정성 이슈

#3
by MeroZemory - opened

gpu 채점기 상태랑 연관있는지는 모르겠지만 오늘도, 며칠 전도 그렇고 인터널 서버 오류 응답과 함께 제출이 안되는 상황이 잦습니다.
후보 분자들 모아뒀다 12시 되기 전 30개 채우려 했는데, 오류로 제출이 안되네요ㅜㅜ 중복체크는 응답이 제대로 옵니다.

Request failed: SyntaxError: Unexpected token 'I', "Internal S"... is not valid JSON

FINAL_Bench org

신고 감사합니다. 정확히 짚으셨고, 원인을 찾아 고쳤습니다.

원인은 GPU 채점기가 아니라 접수 경로였습니다. 제출을 받으면 저장소(HF 데이터셋)에 기록을 커밋하는데, 이 커밋이 HTTP 429 Too Many Requests로 거절됐습니다. 저희 코드에 재시도가 없어서 그대로 500이 나갔고, 500 응답의 본문은 JSON이 아니라 HTML이라 화면에서 Unexpected token 'I', "Internal S"...로 보인 것입니다. 중복체크는 읽기만 하므로 정상 동작한 게 맞습니다.

규모를 숨기지 않고 적습니다. 로그 기준 8월 31일 23시대(KST) 한 시간 동안 제출 시도 441건 중 226건이 실패했습니다. 하루 한도가 자정에 초기화되기 직전 제출이 몰리는 시간대라 저희 쓰기 요청이 한도에 걸렸고, 그 피해가 그 시간대 참가자에게 집중됐습니다.

고친 것 세 가지입니다.

재시도 추가. 429·5xx면 백오프를 두고 다시 시도하고, 서버가 Retry-After를 주면 그 값을 따릅니다.
제출 한 건 = 커밋 한 번. 이전에는 접수 파일·골격 표식·한도 집계를 따로 세 번 커밋했습니다. 한도에 걸릴 기회가 세 배였고, 중간에 끊기면 "실패했다고 안내받았는데 접수는 된" 상태가 남았습니다(어젯밤 5건). 이제 셋을 한 커밋으로 묶어 전부 기록되거나 전부 안 되거나 둘 중 하나입니다.
읽을 수 있는 오류. 끝내 실패하면 500 대신 503과 함께 무슨 일인지, 다시 내면 되는지를 문장으로 돌려줍니다. 화면도 JSON이 아닌 응답을 받았을 때 파싱 오류를 그대로 노출하지 않도록 고쳤습니다.
확인하신 내용에 대한 답입니다.

실패한 제출은 기록이 남지 않았습니다. 같은 후보를 그대로 다시 제출하시면 됩니다.
실패한 시도는 하루 한도를 소모하지 않았습니다. 한도 집계도 같은 커밋에서 죽었기 때문입니다.
접수된 것 중 유실된 건은 없습니다. 현재 시즌4는 제출 601건 중 592건 채점 완료, 9건이 채점 중입니다.
배포는 완료됐습니다.

Sign up or log in to comment