Repository navigation
Worker Group Probing and Restarts via BackWaveMonitor and BackWaveOperator #15
DCarlson12
started this conversation in
Ideas
Replies: 1 comment 1 reply
|
Going to start looking into this a bit this weekend @DCarlson12! |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
After submitting the transient fault issue for the Oracle store I’ve been thinking about some other difficulties in how probing readiness of the worker groups works currently. Instead of trying to classify a bunch of different fault codes or risk analysis paralysis supplying those codes as a configurable item, is there a better way this can be done?
Right now, once a worker group halts it stays halted until the process restarts, and there isn't a good way to see that it happened across a cluster. BackWaveHealthCheck only reports on the node that answers the request, so behind a load balancer /health tells you about whichever node you happened to hit. The dashboard doesn't show worker health at all besides throughput. The invariant metric isn't emitted for halts caused by unclassified faults, and it has no group or node tag anyway, so in practice you find out from a Critical log line. A single halt doesn't lose work, since the leases lapse and other nodes pick it up. But database-side events like a failover or sessions being killed hit every node at the same time, so it's realistic for the whole cluster to halt together. The only recovery then is recycling every process running the halted pumps. Unless you have the rights to access your production infrastructure, you’re stuck waiting for a health check monitor or rolling interval for process restarts. The escape hatch at the moment would require a hypervisor or a person to check the health check and perform process restarts—not something available in all scenarios and certainly not an extra step everyone wants to go through just to make up for the very real scenarios that can occur with a large scale halt.
What I'd like to propose is pumps reporting their health and a heartbeat to the configured store, sort of akin to how Hangfire tracks its servers. BackWaveMonitor would expose a probing method that returns every pump across the cluster (whatever runs in the schema), optionally filtered, including any whose heartbeat has gone stale. BackWaveOperator would get an audited restart method that takes the worker id of a halted pump; the node that owns it picks up the request on its next heartbeat and restarts just that pump. I'd want this to keep fail-stop as the default, work with polling only (no wake-up hints or extra database privileges), and need at most a small additive schema change so rolling upgrades still work.
There’s plenty of questions that arise from this being
On the flip side of this, I guess I’m not sure what the halting mechanism that is implemented is really accomplishing? Why can’t a pump always retry unless being shut down? Keeping halting state seems to breed a lot of extra workarounds which might not actually be necessary.
All reactions