Navigation Menu

Skip to content

Commit

Permalink
Merge changes in the master correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
piroor committed Jan 6, 2015
1 parent 1d02376 commit a5a1338
Show file tree
Hide file tree
Showing 12 changed files with 139 additions and 332 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -9,6 +9,7 @@ rvm:
- 1.9.3
- 2.0.0
- 2.1
- 2.2
# - ruby-head
before_install:
# - GROONGA_MASTER=yes curl --silent --location https://raw.github.com/groonga/groonga/master/data/travis/setup.sh | sh
Expand Down
7 changes: 2 additions & 5 deletions bin/droonga-engine-absorb-data
Expand Up @@ -132,11 +132,8 @@ class AbsorbDataCommand
end

def run_remote_command(target, command, options)
serf = Droonga::Serf.new(nil, target)
result = serf.send_query(command, options)
#puts result[:result]
puts result[:error] unless result[:error].empty?
result[:response]
serf = Droonga::Serf.new(target)
serf.send_query(command, options)
end

def absorber
Expand Down
7 changes: 2 additions & 5 deletions bin/droonga-engine-join
Expand Up @@ -125,11 +125,8 @@ class JoinCommand
end

def run_remote_command(target, command, options)
serf = Droonga::Serf.new(nil, target)
result = serf.send_query(command, options)
#puts(result[:result])
puts(result[:error]) unless result[:error].empty?
result[:response]
serf = Droonga::Serf.new(target)
serf.send_query(command, options)
end

def absorber
Expand Down
7 changes: 2 additions & 5 deletions bin/droonga-engine-set-role
Expand Up @@ -67,11 +67,8 @@ class SetRoleCommand
end

def run_remote_command(target, command, options)
serf = Droonga::Serf.new(nil, target)
result = serf.send_query(command, options)
#puts(result[:result])
puts(result[:error]) unless result[:error].empty?
result[:response]
serf = Droonga::Serf.new(target)
serf.send_query(command, options)
end

def set_node_role
Expand Down
7 changes: 2 additions & 5 deletions bin/droonga-engine-unjoin
Expand Up @@ -133,11 +133,8 @@ class UnjoinCommand
end

def run_remote_command(target, command, options)
serf = Droonga::Serf.new(nil, target)
result = serf.send_query(command, options)
puts(result[:result])
puts(result[:error]) unless result[:error].empty?
result[:response]
serf = Droonga::Serf.new(target)
serf.send_query(command, options)
end

def do_unjoin
Expand Down
2 changes: 1 addition & 1 deletion droonga-engine.gemspec
Expand Up @@ -46,7 +46,7 @@ Gem::Specification.new do |gem|
gem.add_dependency "json"
gem.add_dependency "rroonga", ">= 4.0.4"
gem.add_dependency "sigdump"
gem.add_dependency "slop"
gem.add_dependency "slop", "<= 3.6.0"
gem.add_dependency "sys-proctable"
gem.add_development_dependency "kramdown"
gem.add_development_dependency "bundler"
Expand Down
115 changes: 49 additions & 66 deletions lib/droonga/command/droonga_engine.rb
Expand Up @@ -23,6 +23,7 @@
require "sigdump/setup"

require "droonga/engine/version"
require "droonga/loggable"
require "droonga/path"
require "droonga/address"
require "droonga/serf"
Expand All @@ -48,16 +49,13 @@ def run(command_line_arguments)
parse_command_line_arguments!(command_line_arguments)

setup_path
setup_log

if @configuration.daemon?
Process.daemon
end

open_log_file do
write_pid_file do
run_main_loop
end
end
run_main_loop
end

private
Expand All @@ -80,38 +78,15 @@ def setup_path
end
end

def setup_log
ENV["DROONGA_LOG_LEVEL"] = @configuration.log_level
end

def run_main_loop
main_loop = MainLoop.new(@configuration)
main_loop.run
end

def open_log_file
if @configuration.log_file
File.open(@configuration.log_file, "a") do |file|
$stdout.reopen(file)
$stderr.reopen(file)
yield
end
else
yield
end
end

def write_pid_file
if @configuration.pid_file_path
@configuration.pid_file_path.open("w") do |file|
file.puts(Process.pid)
end
begin
yield
ensure
FileUtils.rm_f(@configuration.pid_file_path.to_s)
end
else
yield
end
end

class Configuration
attr_reader :ready_notify_fd
def initialize
Expand All @@ -121,6 +96,7 @@ def initialize
@port = nil
@tag = nil

@log_level = nil
@log_file = nil
@daemon = nil
@pid_file_path = nil
Expand Down Expand Up @@ -149,34 +125,19 @@ def port
end

def tag
@port || config["tag"] || default_tag
@tag || config["tag"] || default_tag
end

def log_level
ENV["DROONGA_LOG_LEVEL"] || config["log_level"] || default_log_level
@log_level || config["log_level"] || default_log_level
end

def log_level=(level)
ENV["DROONGA_LOG_LEVEL"] = level
end

def log_file
file = @log_file || config["log_file"] || default_log_file
File.expand_path(file)
end

def log_file=(file)
@log_file = File.expand_path(file)
def log_file_path
@log_file_path || config["log_file"] || default_log_file_path
end

def pid_file_path
path = @pid_file_path || config["pid_file"] || default_pid_file_path
return nil if path.nil?
Pathname.new(path.to_s).expand_path
end

def pid_file_path=(path)
@pid_file_path = Pathname.new(path).expand_path
@pid_file_path || config["pid_file"] || default_pid_file_path
end

def daemon?
Expand Down Expand Up @@ -252,25 +213,43 @@ def default_log_level
ENV["DROONGA_LOG_LEVEL"] || Logger::Level.default
end

def default_log_file
Path.default_log_file
def default_log_file_path
nil
end

def default_pid_file_path
nil
end

def normalize_path(path)
if path == "-"
nil
else
Pathname.new(path).expand_path
end
end

def config
@config ||= load_config
end

def load_config
config = Path.config
if config.exist?
YAML.load_file(config)
else
{}
config_path = Path.config
return {} unless config_path.exist?

config = YAML.load_file(config_path)
path_keys = ["log_file", "pid_file"]
path_keys.each do |path_key|
path = config[path_key]
next if path.nil?

path = Pathname.new(path)
unless path.absolute?
path = (config_path.dirname + path).expand_path
end
config[path_key] = path
end
config
end

def add_connection_options(parser)
Expand Down Expand Up @@ -301,12 +280,13 @@ def add_log_options(parser)
parser.on("--log-level=LEVEL", levels,
"The log level of the Droonga engine",
"[#{levels_label}]",
"(#{log_level})") do |level|
self.log_level = level
"(#{default_log_level})") do |level|
@log_level = level
end
parser.on("--log-file=FILE",
"Output logs to FILE") do |file|
self.log_file = file
"Output logs to FILE",
"(#{default_log_file_path})") do |path|
@log_file_path = normalize_path(path)
end
end

Expand All @@ -323,7 +303,7 @@ def add_process_options(parser)
end
parser.on("--pid-file=PATH",
"Put PID to PATH") do |path|
self.pid_file_path = path
@pid_file_path = normalize_path(path)
end
end

Expand Down Expand Up @@ -386,6 +366,8 @@ def create_heartbeat_socket
end

class MainLoop
include Loggable

def initialize(configuration)
@configuration = configuration
@loop = Coolio::Loop.default
Expand Down Expand Up @@ -438,7 +420,6 @@ def run_internal
@service_runner.success?
end

private
def setup_initial_on_ready
return if @configuration.ready_notify_fd.nil?
@service_runner.on_ready = lambda do
Expand Down Expand Up @@ -490,6 +471,7 @@ def stop_immediately

def restart_graceful
old_service_runner = @service_runner
reopen_log_file
@service_runner = run_service
@service_runner.on_ready = lambda do
@service_runner.on_failure = nil
Expand All @@ -503,6 +485,7 @@ def restart_graceful

def restart_immediately
old_service_runner = @service_runner
reopen_log_file
@service_runner = run_service
old_service_runner.stop_immediately
end
Expand Down Expand Up @@ -550,7 +533,7 @@ def run_catalog_observer
catalog_observer = FileObserver.new(@loop, Path.catalog)
catalog_observer.on_change = lambda do
restart_graceful
@serf.update_cluster_id if @serf and @serf.running?
@serf.update_cluster_id
end
catalog_observer.start
catalog_observer
Expand Down
2 changes: 1 addition & 1 deletion lib/droonga/command/remote.rb
Expand Up @@ -37,7 +37,7 @@ def initialize(serf_name, params)
@response = {
"log" => []
}
@serf = Serf.new(nil, @serf_name)
@serf = Serf.new(@serf_name)

@service_installation = ServiceInstallation.new
@service_installation.ensure_using_service_base_directory
Expand Down
2 changes: 1 addition & 1 deletion lib/droonga/dispatcher.rb
Expand Up @@ -89,7 +89,7 @@ def stop_immediately
@adapter_runners.each_value do |adapter_runner|
adapter_runner.shutdown
end
@farm.shutdown
@farm.stop_immediately
logger.trace("stop_immediately: done")
end

Expand Down
22 changes: 19 additions & 3 deletions lib/droonga/farm.rb
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2013 Droonga Project
# Copyright (C) 2013-2015 Droonga Project
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
Expand Down Expand Up @@ -37,12 +37,18 @@ def initialize(name, catalog, loop, options={})
end

def start
n_slices = @slices.size
if n_slices.zero?
on_ready
return
end

n_ready_slices = 0
@slices.each_value do |slice|
slice.on_ready = lambda do
n_ready_slices += 1
if n_ready_slices == @slices.size
@on_ready.call if @on_ready
if n_ready_slices == n_slices
on_ready
end
end
slice.start
Expand All @@ -51,6 +57,11 @@ def start

def stop_gracefully
n_slices = @slices.size
if n_slices.zero?
yield if block_given?
return
end

n_done_slices = 0
@slices.each_value do |slice|
slice.stop_gracefully do
Expand All @@ -71,5 +82,10 @@ def stop_immediately
def process(slice_name, message)
@slices[slice_name].process(message)
end

private
def on_ready
@on_ready.call if @on_ready
end
end
end

0 comments on commit a5a1338

Please sign in to comment.