YUKI Hiroshi
null+****@clear*****
Mon Apr 6 15:34:42 JST 2015
YUKI Hiroshi 2015-04-06 15:34:42 +0900 (Mon, 06 Apr 2015) New Revision: 10f2efae290aaa3f85f5ab90a44a3a8a778e12f7 https://github.com/droonga/droonga-engine/commit/10f2efae290aaa3f85f5ab90a44a3a8a778e12f7 Message: Join new node to the cluster before the source node's role is changed. Because writing requests just for the source node aren't be forwarded to the newly joined node. Modified files: bin/droonga-engine-join Modified: bin/droonga-engine-join (+18 -7) =================================================================== --- bin/droonga-engine-join 2015-04-06 14:42:18 +0900 (353e3d7) +++ bin/droonga-engine-join 2015-04-06 15:34:42 +0900 (530693f) @@ -42,13 +42,15 @@ class JoinCommand puts "Source Cluster ID: #{source_cluster_id}" puts "" - set_nodes_role begin + set_joining_node_role register_to_existing_nodes + set_source_node_role do_join copy_data unless @options["no-copy"] set_effective_message_timestamp - reset_nodes_role + reset_source_node_role + reset_joining_node_role puts("Done.") rescue Exception => exception puts("Unexpected exception: #{exception.message}") @@ -156,7 +158,7 @@ class JoinCommand Droonga::DataAbsorber.new(absorber_options) end - def set_nodes_role + def set_source_node_role if absorber.source_node_suspendable? puts("Changing role of the source node...") run_remote_command(source_node, "change_role", @@ -164,15 +166,19 @@ class JoinCommand "role" => Droonga::NodeMetadata::Role::ABSORB_SOURCE) wait_until_restarted(source_node) end + @source_node_role_changed = true + end + + def set_joining_node_role puts("Changing role of the joining node...") run_remote_command(joining_node, "change_role", "node" => joining_node, "role" => Droonga::NodeMetadata::Role::ABSORB_DESTINATION) wait_until_restarted(joining_node) - @node_role_changed = true + @joining_node_role_changed = true end - def reset_nodes_role + def reset_source_node_role if absorber.source_node_suspendable? puts("Restoring role of the source node...") run_remote_command(source_node, "change_role", @@ -180,12 +186,16 @@ class JoinCommand "role" => Droonga::NodeMetadata::Role::SERVICE_PROVIDER) wait_until_restarted(source_node) end + @source_node_role_changed = false + end + + def reset_joining_node_role puts("Restoring role of the joining node...") run_remote_command(joining_node, "change_role", "node" => joining_node, "role" => Droonga::NodeMetadata::Role::SERVICE_PROVIDER) wait_until_restarted(joining_node) - @node_role_changed = false + @joining_node_role_changed = false end def do_join @@ -290,7 +300,8 @@ class JoinCommand def do_cancel #XXX we have to write more codes to cancel remote processes! unregister_from_existing_nodes if @node_registered - reset_nodes_role if @node_role_changed + reset_joining_node_role if @joining_node_role_changed + reset_source_node_role if @source_node_role_changed end def wait_until_restarted(*nodes) -------------- next part -------------- HTML����������������������������...下載