Question

I have a supervisor with one_for_one restart strategy. Is it possible to set some time interval between child process restarting?

For example, the remote db crushed and I want to wait 10 seconds between restore connection attempts.

Was it helpful?

Solution

Actually, you could let the supervisor to immediately restart its children and implement what is called lazy initialization:

  1. The supervisor (re)starts (immediately) the child (say, a gen_server)
  2. The gen_server returns a 0 timeout in its init function
  3. In the handle_info you do an active wait (your 10 seconds) to ensure the DB is properly initialized

This way, you ensure that all requests to the gen_server are processed after the DB is properly initialized.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top