Navigation Menu

Skip to content

Commit

Permalink
Add ability to specify the lifetime of internal connections from outs…
Browse files Browse the repository at this point in the history
…ide, via the command line option
  • Loading branch information
piroor committed Apr 22, 2015
1 parent ef8ff1a commit 6957644
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 6 deletions.
22 changes: 22 additions & 0 deletions lib/droonga/command/droonga_engine.rb
Expand Up @@ -27,6 +27,7 @@
require "droonga/deferrable"
require "droonga/path"
require "droonga/node_name"
require "droonga/forwarder"
require "droonga/serf"
require "droonga/cluster"
require "droonga/file_observer"
Expand Down Expand Up @@ -97,6 +98,8 @@ def initialize
@port = nil
@tag = nil

@internal_connection_lifetime = nil

@log_level = nil
@log_file = nil
@daemon = nil
Expand Down Expand Up @@ -129,6 +132,12 @@ def tag
@tag || config["tag"] || default_tag
end

def internal_connection_lifetime
@internal_connection_lifetime ||
config["internal_connection_lifetime"] ||
default_internal_connection_lifetime
end

def log_level
@log_level || config["log_level"] || default_log_level
end
Expand All @@ -153,6 +162,8 @@ def to_engine_command_line
"--host", host,
"--port", port.to_s,
"--tag", tag,
"--internal-connection-lifetime",
internal_connection_lifetime,
"--log-level", log_level,
]
if log_file_path
Expand All @@ -172,6 +183,8 @@ def to_engine_command_line
def to_service_command_line
command_line_options = [
"--engine-name", engine_name,
"--internal-connection-lifetime",
internal_connection_lifetime,
]
command_line_options
end
Expand Down Expand Up @@ -210,6 +223,10 @@ def default_tag
NodeName::DEFAULT_TAG
end

def default_internal_connection_lifetime
Forwarder::DEFAULT_AUTO_CLOSE_TIMEOUT_SECONDS
end

def default_log_level
ENV["DROONGA_LOG_LEVEL"] || Logger::Level.default
end
Expand Down Expand Up @@ -271,6 +288,11 @@ def add_connection_options(parser)
"(#{default_tag})") do |tag|
@tag = tag
end
parser.on("--internal-connection-lifetime=SECONDS", Float,
"The time to expire internal connections, in seconds",
"(#{default_internal_connection_lifetime})") do |seconds|
@internal_connection_lifetime = seconds
end
end

def add_log_options(parser)
Expand Down
8 changes: 7 additions & 1 deletion lib/droonga/command/droonga_engine_service.rb
Expand Up @@ -37,6 +37,7 @@ def run(command_line_arguments)

def initialize
@engine_name = nil
@internal_connection_lifetime = nil
@listen_fd = nil
@heartbeat_fd = nil
@contrtol_read_fd = nil
Expand Down Expand Up @@ -85,6 +86,10 @@ def add_internal_options(parser)
"Use NAME as the name of the engine") do |name|
@engine_name = name
end
parser.on("--internal-connection-lifetime=SECONDS", Float,
"The time to expire internal connections, in seconds") do |seconds|
@internal_connection_lifetime = seconds
end
parser.on("--listen-fd=FD", Integer,
"Use FD as the listen file descriptor") do |fd|
@listen_fd = fd
Expand Down Expand Up @@ -141,7 +146,8 @@ def shutdown_internal_message_receiver
end

def run_engine
@engine = Engine.new(@loop, @engine_name, @internal_engine_name)
@engine = Engine.new(@loop, @engine_name, @internal_engine_name,
:internal_connection_lifetime => @internal_connection_lifetime)
@engine.on_ready = lambda do
@worker_process_agent.ready
end
Expand Down
9 changes: 8 additions & 1 deletion lib/droonga/command/droonga_engine_worker.rb
Expand Up @@ -43,6 +43,7 @@ def initialize
@dataset = nil
@database_path = nil
@plugins = []
@internal_connection_lifetime = nil
@worker_process_agent = nil
end

Expand Down Expand Up @@ -102,6 +103,10 @@ def add_internal_options(parser)
"Use PLUGINs") do |plugins|
@plugins = plugins
end
parser.on("--internal-connection-lifetime=SECONDS", Float,
"The time to expire internal connections, in seconds") do |seconds|
@internal_connection_lifetime = seconds
end
end

def write_pid_file
Expand Down Expand Up @@ -160,7 +165,9 @@ def stop_immediately
end

def start_forwarder
@forwarder = Forwarder.new(@loop)
@forwarder = Forwarder.new(@loop,
:auto_close_timeout =>
@internal_connection_lifetime)
@forwarder.start
end

Expand Down
4 changes: 3 additions & 1 deletion lib/droonga/dispatcher.rb
Expand Up @@ -60,7 +60,9 @@ def initialize(engine_state, cluster, catalog)
:engine_state => @engine_state,
:cluster => @cluster,
:dispatcher => self,
:forwarder => @forwarder)
:forwarder => @forwarder,
:internal_connection_lifetime =>
@engine_state.internal_connection_lifetime)
@engine_state.wait_until_ready(@farm)
@collector_runners = create_collector_runners
@step_runners = create_step_runners
Expand Down
6 changes: 4 additions & 2 deletions lib/droonga/engine.rb
Expand Up @@ -34,14 +34,16 @@ class Engine

attr_reader :cluster

def initialize(loop, name, internal_name)
def initialize(loop, name, internal_name, options={})
@name = name
@internal_name = internal_name
@loop = loop
@catalog = load_catalog
@state = EngineState.new(loop, name,
internal_name,
:catalog => @catalog)
:catalog => @catalog,
:internal_connection_lifetime =>
options[:internal_connection_lifetime])
@cluster = Cluster.new(loop,
:catalog => @catalog)

Expand Down
6 changes: 5 additions & 1 deletion lib/droonga/engine_state.rb
Expand Up @@ -31,6 +31,7 @@ class EngineState
attr_reader :loop
attr_reader :name
attr_reader :internal_name
attr_reader :internal_connection_lifetime
attr_reader :forwarder
attr_reader :replier
attr_accessor :catalog
Expand All @@ -40,9 +41,12 @@ def initialize(loop, name, internal_name, params)
@loop = loop
@name = name
@internal_name = internal_name
@internal_connection_lifetime = params[:internal_connection_lifetime]
@sessions = {}
@current_id = 0
@forwarder = Forwarder.new(@loop)
@forwarder = Forwarder.new(@loop,
:auto_close_timeout =>
@internal_connection_lifetime)
@replier = Replier.new(@forwarder)
@on_finish = nil
@catalog = params[:catalog]
Expand Down
1 change: 1 addition & 0 deletions lib/droonga/slice.rb
Expand Up @@ -116,6 +116,7 @@ def start_supervisor
config.database_path = @database_path
config.plugins = @options[:plugins]
config.job_pusher = @job_pusher
config.internal_connection_lifetime = @options[:internal_connection_lifetime]
@supervisor = Supervisor.new(@loop, @n_workers, config)
@supervisor.on_ready = lambda do
on_ready
Expand Down
2 changes: 2 additions & 0 deletions lib/droonga/supervisor.rb
Expand Up @@ -111,6 +111,8 @@ def start
"--dataset", @config.dataset.name,
"--database-path", @config.database_path.to_s,
"--plugins", @config.plugins.join(","),
"--internal-connection-lifetime",
@config.internal_connection_lifetime,
]
options = {
control_write_in => control_write_in,
Expand Down

0 comments on commit 6957644

Please sign in to comment.