Skip to content

fixing a bug causing code reload to always fail #2

New issue

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

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

ehohenstein
Copy link

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.

@ghost ghost assigned hyperthunk Jun 29, 2012
@hyperthunk
Copy link
Owner

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.

@ehohenstein
Copy link
Author

Awesome, thanks!

On Thu, Jun 28, 2012 at 5:24 PM, Tim Watson <
[email protected]

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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants