YUKI Hiroshi
null+****@clear*****
Thu Sep 25 19:50:51 JST 2014
YUKI Hiroshi 2014-09-25 19:50:51 +0900 (Thu, 25 Sep 2014) New Revision: ec5c01054f9ed4ee75338efe98d9a8071d7edded https://github.com/droonga/droonga-engine/commit/ec5c01054f9ed4ee75338efe98d9a8071d7edded Message: Set file permission for updated catalog.json automatically Modified files: lib/droonga/catalog_modifier.rb lib/droonga/command/remote.rb Modified: lib/droonga/catalog_modifier.rb (+6 -4) =================================================================== --- lib/droonga/catalog_modifier.rb 2014-09-25 19:32:45 +0900 (b4b849d) +++ lib/droonga/catalog_modifier.rb 2014-09-25 19:50:51 +0900 (e747c9b) @@ -23,8 +23,8 @@ module Droonga class CatalogModifier class << self def modify - new.modify do |generator| - yield(generator) + new.modify do |generator, file| + yield(generator, file) end end end @@ -36,8 +36,10 @@ module Droonga end def modify - yield(@generator) - SafeFileWriter.write(Path.catalog, JSON.pretty_generate(@generator.generate)) + SafeFileWriter.write(Path.catalog) do |output, file| + yield(@generator, file) + output.puts(JSON.pretty_generate(@generator.generate)) + end end end end Modified: lib/droonga/command/remote.rb (+22 -7) =================================================================== --- lib/droonga/command/remote.rb 2014-09-25 19:32:45 +0900 (c0be8fc) +++ lib/droonga/command/remote.rb 2014-09-25 19:50:51 +0900 (ad4449c) @@ -23,6 +23,7 @@ require "droonga/catalog_modifier" require "droonga/catalog_fetcher" require "droonga/data_absorber" require "droonga/safe_file_writer" +require "droonga/service_installation" module Droonga module Command @@ -38,6 +39,9 @@ module Droonga } @serf = Serf.new(nil, @serf_name) + @service_installation = ServiceInstallation.new + @service_installation.ensure_using_service_base_directory + log("params = #{params}") end @@ -166,15 +170,19 @@ module Droonga return if other_hosts.empty? # restart self with the fetched catalog. - SafeFileWriter.write(Path.catalog, JSON.pretty_generate(@catalog)) + SafeFileWriter.write(Path.catalog) do |output, file| + output.puts(JSON.pretty_generate(@catalog)) + @service_installation.ensure_correct_file_permission(file) + end absorb_data if should_absorb_data? log("joining to the cluster: update myself") - CatalogModifier.modify do |modifier| + CatalogModifier.modify do |modifier, file| modifier.datasets[dataset_name].replicas.hosts += other_hosts modifier.datasets[dataset_name].replicas.hosts.uniq! + @service_installation.ensure_correct_file_permission(file) end @serf.join(*other_hosts) @@ -200,8 +208,9 @@ module Droonga def absorb_data log("starting to copy data from #{source_host}") - CatalogModifier.modify do |modifier| + CatalogModifier.modify do |modifier, file| modifier.datasets[dataset_name].replicas.hosts = [host] + @service_installation.ensure_correct_file_permission(file) end sleep(5) #TODO: wait for restart. this should be done more safely, to avoid starting of absorbing with old catalog.json. @@ -295,8 +304,9 @@ module Droonga log("new replicas: #{hosts.join(",")}") - CatalogModifier.modify do |modifier| + CatalogModifier.modify do |modifier, file| modifier.datasets[dataset].replicas.hosts = hosts + @service_installation.ensure_correct_file_permission(file) end @serf.join(*hosts) @@ -312,9 +322,10 @@ module Droonga log("adding replicas: #{added_hosts.join(",")}") return if added_hosts.empty? - CatalogModifier.modify do |modifier| + CatalogModifier.modify do |modifier, file| modifier.datasets[dataset].replicas.hosts += added_hosts modifier.datasets[dataset].replicas.hosts.uniq! + @service_installation.ensure_correct_file_permission(file) end @serf.join(*added_hosts) @@ -327,8 +338,9 @@ module Droonga log("removing replicas: #{hosts.join(",")}") - CatalogModifier.modify do |modifier| + CatalogModifier.modify do |modifier, file| modifier.datasets[dataset].replicas.hosts -= hosts + @service_installation.ensure_correct_file_permission(file) end #XXX Now we should restart serf agent to remove unjoined nodes from the list of members... @@ -340,7 +352,10 @@ module Droonga path = Path.live_nodes nodes = live_nodes file_contents = JSON.pretty_generate(nodes) - SafeFileWriter.write(path, file_contents) + SafeFileWriter.write(path) do |output, file| + output.puts(file_contents) + @service_installation.ensure_correct_file_permission(file) + end end private -------------- next part -------------- HTML����������������������������... 下載