Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Already on GitHub? Sign in to your account

fixing a bug causing code reload to always fail #2

Open
wants to merge 1 commit into
from

Conversation

Projects
None yet
3 participants

During a release upgrade, the system will send a {system, _, _} message that gen_server (and gen_server2) will respond to by calling sys:handle_system_msg(). sys:handle_system_msg() will then call gen_server2:system_code_change(). After the upgrade happens, the system will call gen_server:system_continue() with the new state value returned by gen_server2:system_code_change(). The gen_server2:system_continue() method expects the state record to be a GS2State record.

What had previously been returned by gen_server2:system_code_change() was [GS2State]. The result is that release upgrade fails with the the exception {badrecord,gs2_state}.

This change fixes upgrade by making gen_server2:system_code_change() return a GS2State record rather than [GS2State].

The error was almost certainly an oversight based on the fact that gen_server doesn't use a state record but instead passes its state around as a list. Consequently, gen_server:system_code_change() returns a list of values. When translating gen_server to gen_server2, this would have been easily overlooked.

@hyperthunk hyperthunk was assigned Jun 29, 2012

Owner

hyperthunk commented Jun 29, 2012

In fact, the reason behind the oversight is even simpler than that. The gen_server2 module is part of rabbitmq, which doesn't use releases or release upgrades at all. I cannot say anything about this getting merged into the main rabbitmq source tree, but I'll merge the pull request to this repo once I've decided on how to maintain separate versions without having to manually sync.

Awesome, thanks!

On Thu, Jun 28, 2012 at 5:24 PM, Tim Watson <
reply@reply.github.com

wrote:

In fact, the reason behind the oversight is even simpler than that. The
gen_server2 module is part of rabbitmq, which doesn't use releases or
release upgrades at all. I cannot say anything about this getting merged
into the main rabbitmq source tree, but I'll merge the pull request to this
repo once I've decided on how to maintain separate versions without having
to manually sync.


Reply to this email directly or view it on GitHub:
#2 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment