2012-10-10 11 views
7

Ich habe einen Supervisor mit one_for_one Neustart-Strategie. Kann ein Zeitintervall zwischen dem Neustart des untergeordneten Prozesses festgelegt werden?Erlang Supervisor Neustart Intervall

F.e. remote db gequetscht und ich möchte 10 Sekunden zwischen Wiederherstellung Verbindungsversuch warten.

Antwort

4

Eigentlich könnten Sie den Supervisor lassen sofort ihre Kinder neu zu starten und zu implementieren, was faul Initialisierung genannt wird:

  1. Der Supervisor (re) beginnen (sofort), um das Kind (sagen sie, ein gen_server)
  2. die gen_server eine 0 Timeout in seiner Funktion init
  3. im handle_info kehrt eine aktive Warte tun (Ihre 10 Sekunden) die DB, um sicherzustellen, richtig
initialisiert 210

Auf diese Weise stellen Sie sicher, dass alle Anfragen an den gen_server bearbeitet werden, nachdem der DB richtig initialisiert wurde.

+0

Danke, aber ich habe kein Problem mit gen_server init, ich möchte ein Zeitintervall (Schlaf) zwischen Neustart versuchen. – kolchanov

+2

Ich denke, was @Robert Aloi schlägt, wird funktionieren. Die init des gen_servers versucht nicht, die Verbindung wiederherzustellen, sondern gibt das Zeitlimit 0 zurück, das den Supervisor, den das Kind gestartet hat, erfüllt. Dann, in der Handle_info-Funktion machen Sie die "echte" Initialisierung ... Nach dem Schlafen für 10 Sekunden – Jr0

+0

Oder noch besser, nachdem sichergestellt, dass die DB lebt. Eine bestimmte Zeit zu warten ist die Wurzel aller Übel. –

Verwandte Themen