Skip to content

[Feature] Server needs a storage-aware readiness signal (readiness stays green with zero Stores) #3212

Description

@bitflicker64

Feature Description (功能描述)

The Server has no endpoint a Kubernetes readiness probe can use that reflects whether it can actually serve graph traffic. /versions (what the #3132 chart uses today) answers 200 as long as the REST layer is up, even when the cluster has no Store at all.

Measured independently by @SebastianGruza on 2026-09-16 (#3132, comment of 19:31 CEST; scripts in SebastianGruza/hugegraph-validation, docs/helm-chart-faults.md scenario 7): with all Stores scaled to 0 on a running cluster, the Servers stayed Running and ready=true with 0 restarts for 150+ seconds, /versions answered 200 throughout, while every GET /graph/vertices/<id> ended in a 500 after the 30 s request bound (#3204). A Kubernetes Service therefore keeps routing traffic to Servers whose every real request fails.

Today the readiness probe answers 200 from /versions while every graph request fails on 0 Stores; the proposed storage-aware readiness turns the pod NotReady so the Service stops routing to it

This is the Server-side twin of #3183, which was fixed for PD by #3185's unauthenticated /v1/ready.

Proposal: an unauthenticated, cheap readiness endpoint on the Server (for example /apis/readiness or a flag on /versions) that returns 503 unless:

  1. the Server's PD client currently has a usable PD connection, and
  2. at least one Store is registered and Up from that Server's view (the graph list from PD plus one cheap Store call is the shape suggested in the feat(helm): add HStore deployment chart #3132 thread).

It must not require Basic auth: a Kubernetes httpGet probe cannot carry a credential without leaking it into the pod spec, which is exactly why #3185 made /v1/ready unauthenticated and why the auth interceptor already excludes /actuator/**, /v1/health and /v1/ready on PD.

Chart side once this exists: server.readinessPath flips from /versions to the new path the same way pd.readinessPath moved to /v1/ready, and a Server with no working storage drops out of the Service instead of serving 500s.

Visual summary

Storage-aware readiness

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions