Skip to content

fix: 라이브 프로브의 부분 측정과 실패 경로 정정 (v0.37.0) - #46

Merged
yessjun merged 2 commits into
mainfrom
fix/live-probe-regressions
Aug 10, 2026
Merged

fix: 라이브 프로브의 부분 측정과 실패 경로 정정 (v0.37.0)#46
yessjun merged 2 commits into
mainfrom
fix/live-probe-regressions

Conversation

@yessjun

@yessjun yessjun commented Aug 10, 2026

Copy link
Copy Markdown
Member

📝 작업내용

  • 시스템 요약에 측정 노드 수를 실어 부분 측정을 부분으로 읽을 수 있게 함 (API 명세 v0.37.0)
  • 스토리지 항목 이름이 없는 응답에서 대시보드 전체가 죽던 경로를 막음
  • 읽을 수 없는 응답 본문을 Proxmox 호출 실패로 정규화해 네 호출 지점을 한 번에 덮음
  • 오프라인 노드 프로브 생략을 되돌림
  • 오프라인은 새 배치 제외일 뿐 게스트가 계속 돌아, 생략하면 그 사용량이 집계에서 빠졌음
  • 노드 목록을 한 번만 읽어 상태와 도달 여부가 어긋나지 않게 함
  • reachable 필드 설명을 현재 의미로 갱신

⭐️ 검증

  • 테스트 738개에서 741개로 증가, 항목별로 수정을 되돌려 실패를 확인
  • 스토리지만 실패한 노드가 도달 가능으로 남고 측정 노드 수가 줄어드는 것을 테스트로 고정
  • 읽을 수 없는 본문이 503으로 나가는 것과 오프라인 노드가 프로브되는 것을 테스트로 고정

💬 리뷰 포인트

  • 부분 측정을 노드 수로 알리는 방식 (합계를 null로 만들지 않는 선택)
  • 오프라인 노드를 다시 프로브하는 비용 처분 (죽은 노드의 타임아웃은 확장 라운드의 병렬화로)
  • 파싱 실패를 클라이언트 계층에서 정규화한 범위

A 200 whose body is not the expected envelope raised the parser's own
exception straight out of the client: an HTML error page from something
standing in front of pveproxy, or a changed envelope during a PVE
upgrade, reached callers as a type they do not handle and took the admin
dashboard down with a 500. Wrapping the parse inside the client closes
every call site at once instead of each one enumerating another
exception type. An unreadable body counts as transient, because the same
request against a settled host parses.
Making a failed hypervisor probe non-fatal traded a loud signal for a
silent one. A node whose storage read is refused stays reachable with
the two storage fields null, and a client that sums the live rows drops
it and shows the remaining nodes' total as the platform's, so the
operator reads free capacity that is not there. The summary now carries
liveCoverage: how many nodes are behind each sum, against the node count
the sum should have covered.

Three more ways the panel could mislead go with it. An OFFLINE node is
probed again: OFFLINE keeps a node out of new placements and leaves its
guests running, so skipping it dropped their memory out of the platform
total. The guest-storage match now starts from the node column, which is
NOT NULL, so a storage entry PVE sent without a name is not a 500. And
both halves of the panel are built from one read of the node table, so a
status change mid-request can no longer ship a row whose status and
reachability contradict.

The cost of asking a host that really is dead, one read timeout per
dashboard load, is accepted deliberately and belongs to the scale-out
round that will probe nodes in parallel under a budget.
@yessjun
yessjun merged commit 74c8a83 into main Aug 10, 2026
1 check passed
@yessjun
yessjun deleted the fix/live-probe-regressions branch August 10, 2026 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant