실패했는데 종료 코드는 0 이었다 · 재시도가 두 번째 장애를 만들었다 · 퀴즈
퀴즈: 타임아웃·재시도·멱등성
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
subprocess.run(cmd, timeout=30) 에서 30초가 지나면 문서가 보장하는 동작은?
- 자식은 계속 돌고 TimeoutExpired 만 던진다
- 자식을 죽이고 기다린 뒤 TimeoutExpired 를 던진다
- 종료 코드 124 의 CompletedProcess 를 돌려준다
- 자식에게 SIGTERM 을 보내고 즉시 돌아온다
잘못된 인자로 종료 코드 2 를 낸 명령을 지수 백오프로 세 번 재시도했다. 결과는?
- 백오프 덕분에 두 번째 시도부터 통과한다
- 세 번째 시도에서 인자가 자동으로 고쳐진다
- 세 번 모두 같은 이유로 실패하고 시간만 흐른다
- 재시도 중 종료 코드가 1 로 바뀌어 통과한다
표식(marker) 파일을 명령 실행 전에 만들었다. 명령이 실패하면 무슨 일이 생기는가?
- 다음 실행이 표식을 보고 이미 적용됐다고 믿어 건너뛴다
- flock 이 표식을 감지해 잠금을 거부한다
- 명령이 실패했으므로 파이썬이 표식을 자동으로 지운다
- 다음 실행이 표식을 덮어쓰며 명령을 두 번 실행한다
fcntl.flock(fd, LOCK_EX | LOCK_NB) 가 잠금을 못 잡았을 때 문서가 말하는 동작은?
- 잠금이 풀릴 때까지 무한정 기다렸다가 잡는다
- 잠금을 못 잡았다는 뜻으로 False 를 돌려준다
- errno 가 EACCES 또는 EAGAIN 인 OSError 를 던진다
- 잠금 파일을 지우고 처음부터 다시 시도한다
SIGTERM 처리기가 없는 파이썬 실행기가 자식 명령을 돌리는 중에 SIGTERM 을 받았다. 무엇이 남는가?
- 자식도 같은 신호를 받아 함께 끝난다
- 실행기만 죽고 자식은 고아가 되어 계속 돈다
- 자식이 먼저 끝난 뒤 실행기가 143 으로 끝난다
- 커널이 자식을 좀비로 바꾸고 실행기는 계속 돈다
실행기가 시도마다 JSON 한 줄(attempt·rc·duration_ms)을 남기는 가장 큰 이유는?
- JSON 이 없으면 subprocess 가 종료 코드를 잃기 때문이다
- 표식 파일 대신 JSON 로그로 멱등성을 판정하기 때문이다
- cron 이 JSON 로그를 읽어 재시도 횟수를 정하기 때문이다
- 몇 번째 시도에서 성공했는지가 남아야 매번 실패하는 명령을 알 수 있기 때문이다