Skip to content

Per-process backoff algorithm #4

@jhunt

Description

@jhunt

Right now, init has a single backoff clock. I would rather each process has its own.

  1. When a process starts, we set a deadline for the process, as now + nap.
  2. If a process dies before its deadline, double nap, up to 6,400 ms.
  3. If a deadline passes and a process is not running, start it and go to (1).
  4. If a deadline passes and a process is running, halve its nap, down to 100ms, and set a new deadline.

This should cause the backoff algorithm to "back back on" and allow a process that dies after hours to be restarted almost immediately, rather than continually delay and delay because of a perfect memory of previous failures.

(Note: this either means that we sleep in a single supervisor thread for min(what's left on deadlines), or we spin up a process per supervised process. If we opt for the latter, I'd really like to change the names of the processes to something like "init--", making it trivial to SIGHUP a single supervised process. Also, we should probably "relay" some signals to child processes.)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions