FIX: Check ZooKeeper sate with mntr and pgrep before deletion - #62
FIX: Check ZooKeeper sate with mntr and pgrep before deletion#62f1v3-dev wants to merge 1 commit into
Conversation
| return fmt.Errorf("topology mismatch: %s not found on %s", confDir, server.Host()) | ||
| var responding []string | ||
| for _, server := range topo.Servers { | ||
| if result, ok := results[server.MyID]; ok && result.Err == nil { |
There was a problem hiding this comment.
[Minor]
mntr 프로브 실패 사유를 구분하지 않아 whitelist 미설정 상황이 조용히 넘어갑니다.
문제 상황
probeAll이 반환하는 result.Err는 "정상적으로 중지됨(연결 거부/타임아웃)"과 "mntr이 4lw whitelist에 없어 확인 자체가 불가능함"(errMntrNotWhitelisted, mntr.go)을 구분하지 않고 모두 ok := result.Err == nil의 false 분기로 취급합니다. ZooKeeper 3.5+는 기본적으로 4lw whitelist가 비어 있어 mntr이 막혀 있는 배포가 드물지 않은데, 이 경우 verifyNotResponding은 실제로는 상태를 확인하지 못했음에도 "응답 없음"으로 판단해 그대로 삭제를 진행합니다. (이후 removeHostFiles의 pgrep 검사가 최종 안전장치로 남아 있어 즉시 데이터 손실로 이어지지는 않지만, 운영자는 1차 상태 확인이 실질적으로 스킵되었다는 사실을 알 수 없습니다.)
해결 방안
probeResult.Err가 errMntrNotWhitelisted인 경우를 구분해 사용자에게 경고 메시지(예: "myid=%d: mntr 확인 불가 (whitelist 미설정), pgrep 검사에만 의존합니다")를 출력하는 방안을 검토해주세요.
There was a problem hiding this comment.
현재 errMntrNotWhitelisted 도 다른 probe 오류와 함께 무시되고 있는 상태입니다.
whitelist 거부 메시지 자체가 서버의 응답이므로, 경고 후 진행하기보다는 해당 오류를 구분해 삭제를 거부하고 앙상블 중지를 안내하도록 수정하는 방향으로 변경합니다.
|
리뷰 완료 — Blocker 0건, Major 0건, Minor 3건, Question 0건 |
f8e3dea to
edef589
Compare
|
리뷰 완료 — Blocker 0건, Major 0건, Minor 2건, Question 0건 |
🔗 Related Issue
⌨️ What I did
zk delete의 디렉터리 존재 검사를 제거하여, 원격 디렉터리가 이미 삭제된 경우에도 정리할 수 있도록 변경했습니다.mntr정상 응답이 있으면 삭제를 거부하고, 파일 삭제 직전에pgrep으로 프로세스 실행 여부를 다시 확인하도록 변경했습니다.zk delete의 오류를RunE로 반환하도록 변경하고,mntr응답 파싱 테스트를 추가했습니다.