"campaign 은 다 되거나 다 안 되는 transaction 이 아냐. 여러 갈래고, 각 갈래는 멈춘 데서 이어할 수 있어."
transaction 하나가 아니라 이어할 수 있는 여러 갈래
fleet campaign 을 다 되거나 다 안 되는 큰 덩어리 하나로 생각하기 쉬워. 그 틀은 틀렸고 위험해. campaign 은 target 별 갈래의 묶음이야. 갈래마다 자기 상태가 있고, 멈춘 데서 이어할 수 있어. target 하나 놓치는 게 끝난 일곱을 다시 하는 걸 뜻하면 절대 안 돼.
자는 Mac 은 이어할 일
예상된 reboot disconnect, 가방 속 자는 랩탑. 이건 target 상태 지 failure 가 아냐. campaign 은 걔들을 정직하게 적어. 고장이 아니라 pending 으로. 그리고 호스트가 돌아오는 순간 이어해. 일부러 자리 비운 걸 failure 로 다루면, 차분하게 이어가면 될 rollout 이 진짜 경보까지 무시하게 만드는 오경보로 변해.
고립된 실패 vs systemic 실패
target 이 진짜 실패하면 물어야 해. 이게 걔 문제야, 다 문제야? 고립된 실패, 그러니까 호스트 하나가 자기 이유로 실패한 건 수리 작업이 되고, 건강한 peer 는 계속 끝내. systemic 실패, 그러니까 원인을 나눠서 남은 target 을 죄다 똑같이 깰 종류는 좁은 정지를 불러. 시작 안 한 target 을 멈춰서 같은 고장을 아홉 번 반복 안 해. 하나는 수리, 다른 하나는 정지.
무거운 rollback 을 기본으로 달진 않아
high-risk campaign 은 명시적 예외 처리랑 그 좁은 systemic-failure 규칙을 받아. 근데 기본으로 full rollback pipeline 을 요구하진 않아. 그리고 어떤 건 그냥 안 되돌려져. major OS downgrade 는 자동 rollback 인 척 절대 안 해. 못 되돌리는 것에 대한 정직함이, 거짓말하는 rollback 버튼보다 안전해.