Navigation Menu

Skip to content

Commit

Permalink
Extract main logic of data absorver to a class
Browse files Browse the repository at this point in the history
  • Loading branch information
piroor committed Jun 27, 2014
1 parent a01ccd8 commit d80185a
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 35 deletions.
50 changes: 15 additions & 35 deletions bin/droonga-engine-absorb-data
Expand Up @@ -21,90 +21,70 @@ require "open3"

require "droonga/engine/version"

options = OpenStruct.new
options = {
:drndump => "drndump",
:client => "droonga-request",
}
parser = OptionParser.new
parser.version = Droonga::Engine::VERSION

options.drndump = "drndump"
drndump_options = []

options.client = "droonga-request"
client_options = []

parser.separator("")
parser.separator("Source:")
parser.on("--source-host=HOST",
"Host name of the source cluster to be connected.") do |host|
drndump_options += ["--host", host]
options[:source_host] = host
end
parser.on("--source-port=PORT", Integer,
"Port number of the source cluster to be connected.") do |port|
drndump_options += ["--port", port.to_s]
options[:port] = port
end

parser.separator("")
parser.separator("Destination:")
parser.on("--destination-host=HOST",
"Host name of this cluster to be connected.") do |host|
options.destination_host = host
options[:destination_host] = host
end
parser.on("--destination-port=PORT", Integer,
"Port number of this cluster to be connected.") do |port|
client_options += ["--port", port.to_s]
options[:port] = port
end

parser.separator("")
parser.separator("Data:")
parser.on("--tag=TAG",
"Tag name to be used to communicate with Droonga system.") do |tag|
drndump_options += ["--tag", tag]
client_options += ["--tag", tag]
options[:tag] = tag
end
parser.on("--dataset=DATASET",
"Dataset to be absorbed.") do |dataset|
drndump_options += ["--dataset", dataset]
client_options += ["--tag", tag]
options[:dataset] = dataset
end

parser.separator("")
parser.separator("Droonga protocol:")
parser.on("--receiver-host=HOST",
"Host name of this node to be received a response from clusters.") do |host|
options.destination_host = host
options[:destination_host] = host
end
parser.on("--receiver-port=PORT", Integer,
"Port number of this node to be received a response from clusters.") do |port|
drndump_options += ["--receiver-port", port.to_s]
client_options += ["--receiver-port", port.to_s]
options[:receiver_port] = port
end

parser.separator("")
parser.separator("Commands:")
parser.on("--drndump=PATH",
"Path to the drndump command.") do |path|
options.drndump = path
options[:drndump] = path
end
parser.on("--droonga-request=PATH",
"Path to the droonga-request command.") do |path|
options.droonga_client = path
options[:client] = path
end

parser.parse!(ARGV)

drndump_options += ["--receiver-host", options.destination_host]
client_options += ["--host", options.destination_host]
client_options += ["--receiver-host", options.destination_host]

drndump_command_line = [options.drndump] + drndump_options
client_command_line = [options.client] + client_options

Open3.popen3(*drndump_command_line) do |dump_in, dump_out, dump_error, dump_thread|
Open3.popen3(*client_command_line) do |client_in, client_out, client_error, client_thread|
dump_out.each do |dump|
puts dump
client_in.puts(dump)
end
end
end
Droonga::DataAbsorber.absorb(options)

exit 0
54 changes: 54 additions & 0 deletions lib/droonga/data_absorber.rb
@@ -0,0 +1,54 @@
# Copyright (C) 2014 Droonga Project
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1 as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

require "open3"

module Droonga
class DataAbsorber
class << self
def absorb(params)
drndump = params[:drndump] || "drndump"
drndump_options = []
drndump_options += ["--host", params[:source_host]] if params[:source_host]
drndump_options += ["--port", params[:port].to_s] if params[:port]
drndump_options += ["--tag", params[:tag]] if params[:tag]
drndump_options += ["--dataset", params[:dataset]] if params[:dataset]
drndump_options += ["--receiver-host", params[:destination_host]]
drndump_options += ["--receiver-port", params[:receiver_port].to_s] if params[:receiver_port]

client = params[:client] || "droonga-request"
client_options = []
client_options += ["--host", params[:destination_host]]
client_options += ["--port", params[:port].to_s] if params[:port]
client_options += ["--tag", params[:tag]] if params[:tag]
client_options += ["--dataset", params[:dataset]] if params[:dataset]
client_options += ["--receiver-host", params[:destination_host]]
client_options += ["--receiver-port", params[:receiver_port].to_s] if params[:receiver_port]

drndump_command_line = [drndump] + drndump_options
client_command_line = [client] + client_options

Open3.popen3(*drndump_command_line) do |dump_in, dump_out, dump_error, dump_thread|
Open3.popen3(*client_command_line) do |client_in, client_out, client_error, client_thread|
dump_out.each do |dump|
yield dump if block_given?
client_in.puts(dump)
end
end
end
end
end
end
end

0 comments on commit d80185a

Please sign in to comment.