2016-04-27 6 views
1

Ich bin ein Neuling von erlang, so dass ich ein Problem über gen_server habe. Mir ist noch unklar, wie funktioniert code_change() funktionieren?Wie funktioniert die Funktion code_change() im Modul gen_server?

Können Sie für mich erklären?

Vielen Dank und viele Grüße.

+3

Vermutlich Duplikat von [Code-Swapping in Erlangs gen_server] (http://stackoverflow.com/questions/1840717/achieving-code-swapping-in-erlangs-gen-server). –

+0

Vielen Dank, ich habe resoled :) –

Antwort

3

Es ist wirklich ziemlich einfach. Wenn gen_server ausgeführt wird, enthält es einen Zustand, der zwischen Aufrufen übergeben wird (das letzte Argument an handle_call, handle_cast und handle_info). Wenn dies ein Tupel mit zwei Elementen war {a, b} und Sie eine Hot-Code-Aktualisierung mit release handler und sagen, der neue Code erwartet Tupel mit drei Elementen {a, b, c} dann müssen Sie den Zustand konvertieren, bevor der neue Code den alten Zustand verwenden konnte.

Sie tun das mit code_change. In Release Handling Instructions geben Sie die update Anweisung an, und wenn Release Handler den Code auf dem Live-Knoten aktualisiert, ruft er die code_change-Funktion auf, um den Status zu konvertieren. Während der Status konvertiert wird, werden die Prozesse angehalten und anschließend mit dem neuen Status fortgesetzt.

Sie müssen sich wahrscheinlich keine Gedanken darüber machen, wenn Sie Release Release Handler nicht verwenden, um Upgrades auf Live-Knoten zu veröffentlichen. Und selbst dann wird es nur verwendet, wenn das Statusformat geändert werden muss, was nicht oft ist.

+0

Danke für die große Hilfe, Amiramix :) –

+0

Sie sind herzlich willkommen! Vergiss nicht, dass du eine Antwort annehmen kannst, wenn sie deine Frage beantwortet :) – Amiramix

Verwandte Themen