Skip to content

Commit

Permalink
Implement "join" event via serf
Browse files Browse the repository at this point in the history
serf event join {"type":"replica","host":"192.168.x.x","dataset":"Default"}
  • Loading branch information
piroor committed Jun 27, 2014
1 parent 7eea38c commit b36c20d
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions lib/droonga/command/serf_event_handler.rb
Expand Up @@ -21,6 +21,7 @@

require "droonga/path"
require "droonga/serf"
require "droonga/catalog_generator"
require "droonga/safe_file_writer"

module Droonga
Expand Down Expand Up @@ -73,6 +74,33 @@ def process_event
@event_name == "query:change_role"
save_status(:role, @payload["role"])
end

if @event_name == "user:join" or
@event_name == "query:join"
process_node_join
end
end

def process_node_join
dataset = @payload["dataset"]
return unless dataset

host = @payload["host"]
return unless host

return unless @payload["type"] == "replica"

current_catalog = JSON.parse(Path.catalog.read)
current_params = generator.catalog_to_params(current_catalog)
modifications = {
dataset => {
:add_replica_hosts => [host],
},
}
updated_params = CatalogGenerator.update_params(current_params,
modifications)
updated_catalog = CatalogGenerator.generate(updated_params)
SafeFileWriter.write(Catalog.path, JSON.pretty_generate(updated_catalog))
end

def live_nodes
Expand Down

0 comments on commit b36c20d

Please sign in to comment.