Как работает функция code_change() в модуле gen_server?

Я новичок erlang, Так что у меня есть проблема gen_server, Я до сих пор неясно, как это code_change() функция работы?

Можете ли вы объяснить для меня?

Спасибо и всего наилучшего.

1 ответ

Решение

Это действительно легко. когда gen_server выполняется это содержит состояние, которое передается между вызовами (последний аргумент handle_call, handle_cast а также handle_info). Если бы это был кортеж с двумя элементами {a, b} и вы делаете горячее обновление кода с помощью обработчика релиза и говорите, что новый код ожидает кортеж с тремя элементами {a, b, c} тогда вам нужно преобразовать состояние, прежде чем новый код сможет использовать старое состояние.

Вы делаете это с code_change, В Инструкции по обработке релиза вы указываете update инструкции, а затем, когда Release Handler обновляет код на живом узле, он вызывает code_change функция для преобразования государства. Пока состояние преобразуется, процессы приостанавливаются, а затем возобновляются с новым состоянием.

Вам, вероятно, не нужно беспокоиться об этом, если вы не используете Release Handler для обновления релизов на живых узлах. И даже тогда он используется только в том случае, если необходимо изменить формат состояния, что не так часто.

Другие вопросы по тегам