Navigation Menu

Skip to content

Commit

Permalink
Use internal database.reopen command to reopen database
Browse files Browse the repository at this point in the history
"touch catalog.json" workaround is removed.
  • Loading branch information
kou committed Jun 25, 2014
1 parent a26bf21 commit 6c88ec2
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 16 deletions.
40 changes: 28 additions & 12 deletions lib/droonga/handler_runner.rb
Expand Up @@ -43,11 +43,7 @@ def start
def shutdown
logger.trace("shutdown: start")
@forwarder.shutdown
if @database
@database.close
@context.close
@database = @context = nil
end
close_database if @database
logger.trace("shutdown: done")
end

Expand All @@ -62,28 +58,48 @@ def processable?(type)
def process(message)
logger.trace("process: start")
type = message["type"]
handler_class = find_handler_class(type)
if handler_class.nil?
logger.trace("process: done: no handler: <#{type}>")
return
if type == "database.reopen"
handler_class = nil
reopen
else
handler_class = find_handler_class(type)
if handler_class.nil?
logger.trace("process: done: no handler: <#{type}>")
return
end
process_type(handler_class, type, message)
end
process_type(handler_class, type, message)
logger.trace("process: done: <#{type}>",
:handler => handler_class)
end

private
def prepare
if @database_name and !@database_name.empty?
@context = Groonga::Context.new
@database = @context.open_database(@database_name)
open_database
end
logger.debug("#{self.class.name}: activating plugins for the dataset \"#{@dataset_name}\": " +
"#{@options[:plugins].join(", ")}")
@step_runner = StepRunner.new(nil, @options[:plugins] || [])
@forwarder = Forwarder.new(@loop)
end

def close_database
@database.close
@context.close
@database = @context = nil
end

def open_database
@context = Groonga::Context.new
@database = @context.open_database(@database_name)
end

def reopen
close_database
open_database
end

def find_handler_class(type)
step_definition = @step_runner.find(type)
return nil if step_definition.nil?
Expand Down
12 changes: 12 additions & 0 deletions lib/droonga/job_pusher.rb
Expand Up @@ -57,6 +57,12 @@ def push(message)
logger.trace("push: done")
end

def broadcast(message)
logger.trace("broadcast start")
@job_queue.broadcast(message)
logger.trace("broadcast done")
end

private
def log_tag
"job_pusher"
Expand Down Expand Up @@ -104,6 +110,12 @@ def push(message)
end
end

def broadcast(message)
@workers.each do |worker|
worker.write(message.to_msgpack)
end
end

private
def supply_job(worker)
if @buffers.empty?
Expand Down
13 changes: 9 additions & 4 deletions lib/droonga/processor.rb
Expand Up @@ -15,7 +15,6 @@

require "droonga/loggable"
require "droonga/handler_runner"
require "fileutils"

module Droonga
class Processor
Expand Down Expand Up @@ -47,9 +46,9 @@ def process(message)
synchronous = @handler_runner.prefer_synchronous?(type)
if @n_workers.zero? or synchronous
@handler_runner.process(message)
#XXX Workaround to restart system by any schema change.
# This should be done more smartly...
FileUtils.touch(Path.catalog.to_s) if synchronous
if synchronous
@job_pusher.broadcast(database_reopen_message)
end
else
@job_pusher.push(message)
end
Expand All @@ -60,6 +59,12 @@ def process(message)
end

private
def database_reopen_message
{
"type" => "database.reopen",
}
end

def log_tag
"processor"
end
Expand Down

0 comments on commit 6c88ec2

Please sign in to comment.