blob: 8b50912745977cb71232ba1dfa77f8bb0d60191e [file] [log] [blame]
set :source_machine, "{{active_master}}"
set :install_dir, "/opt/hypertable"
set :hypertable_version, "0.9.5.0.pre3"
set :default_pkg, "/tmp/hypertable-0.9.5.0.pre3-linux-x86_64.deb"
set :default_dfs, "hadoop"
set :default_config, "/root/mesos-ec2/hypertable/hypertable.cfg"
set :default_additional_args, ""
set :hbase_home, "/opt/hbase/current"
set :default_client_multiplier, 1
set :default_test_driver, "hypertable"
set :default_test_args, ""
role :source, "{{active_master}}"
role :master, "{{active_master}}"
role :hyperspace, "{{active_master}}"
open("/root/mesos-ec2/slaves").each do |slave|
role :slave, slave
end
role :localhost, "{{active_master}}"
role :thriftbroker
role :spare
role :test_client
role :test_dispatcher
######################### END OF USER CONFIGURATION ############################
def supported_pkgs
{"rpm"=>1, "deb"=>1}
end
def pkg_regex
'.*\.(deb|rpm)$'
end
set(:pkg) do
"#{default_pkg}"
end unless exists?(:pkg)
set(:dfs) do
"#{default_dfs}"
end unless exists?(:dfs)
set(:config) do
"#{default_config}"
end unless exists?(:config)
set(:additional_args) do
"#{default_additional_args}"
end unless exists?(:additional_args)
set(:test_driver) do
"#{default_test_driver}"
end unless exists?(:test_driver)
set(:test_args) do
"#{default_test_args}"
end unless exists?(:test_args)
set(:client_multiplier) do
"#{default_client_multiplier}".to_i
end unless exists?(:client_multiplier)
set :config_file, "#{config}".split('/')[-1]
set :config_option, \
"--config=#{install_dir}/#{hypertable_version}/conf/#{config_file}"
desc <<-DESC
desc <<-DESC
Copies config file to installation on localhost.
This task runs on localhost and copies the config file specified \
by the variable 'config' (default=#{config}) \
to the installation directory specified by the variable 'install_dir' \
(default-#{install_dir})
DESC
task :copy_config_local, :roles => :localhost do
run("rsync -e \"ssh -o StrictHostKeyChecking=no\" #{config} #{install_dir}/#{hypertable_version}/conf")
end
desc <<-DESC
Copies config file to installation on all servers in cluster.
This task copies the dir\
#{source_machine}:#{install_dir}/{#hypertable_version}/conf
to all machines in the cluster
DESC
task :push_config_all do
run <<-CMD
rsync -av -e "ssh -o StrictHostKeyChecking=no" --exclude=log --exclude=run --exclude=demo --exclude=fs --exclude=hyperspace #{source_machine}:#{install_dir}/#{hypertable_version}/conf/ #{install_dir}/#{hypertable_version}/conf
CMD
end
desc <<-DESC
Copies config file to installation dir on localhost.\
Then copies entire conf fir to all servers in cluster.
DESC
task :push_config do
copy_config_local
push_config_all
end
desc <<-DESC
rsyncs installation directory to cluster. For each machine in the \
cluster, his commannd rsyncs the installation from the source \
installation machine specified by the variable 'source_machine' \
(default=#{source_machine})
DESC
task :rsync do
run <<-CMD
rsync -av -e "ssh -o StrictHostKeyChecking=no" --exclude=log --exclude=run --exclude=demo --exclude=fs --exclude=conf --exclude=hyperspace #{source_machine}:#{install_dir}/#{hypertable_version} #{install_dir} &&
rsync -av -e "ssh -o StrictHostKeyChecking=no" --exclude=log --exclude=run --exclude=demo --exclude=fs --exclude=hyperspace #{source_machine}:#{install_dir}/#{hypertable_version}/conf/ #{install_dir}/#{hypertable_version}/conf
CMD
end
desc <<-DESC
sets up the symbolic link 'current' in the installation area \
to point to the directory of the current version
(default=#{hypertable_version})
DESC
task :set_current, :roles => [:master, :hyperspace, :slave, :thriftbroker, :spare] do
run <<-CMD
cd #{install_dir} &&
rm -f current &&
ln -s #{hypertable_version} current
CMD
end
desc <<-DESC
Distributes installation. This task rsyncs everything under\
#{source_machine}:#{install_dir}/#{hypertable_version} to #{install_dir}\
on all machines in the cluster
DESC
task :dist do
transaction do
rsync
end
end
desc <<-DESC
Alias for install_package command
DESC
task :install_pkg do
install_package
end
desc <<-DESC
rsyncs binary packages and installs on each machine in the cluster
DESC
task :install_package, :roles => [:master, :hyperspace, :slave, :thriftbroker, :spare] do
pkg_basename = File.basename(pkg)
pkg_basename =~ /#{pkg_regex}/
pkg_type = $1
if (!supported_pkgs.has_key?(pkg_type))
raise "Package file #{pkg} is of unsupported type. Expected one of #{supported_pkgs.keys.inspect}"
end
if (/-#{hypertable_version}-/ =~ pkg_basename).nil?
raise "Package #{pkg} doesn't match version #{hypertable_version}"
end
run("rsync -e \"ssh -o StrictHostKeyChecking=no\" #{source_machine}:#{pkg} #{install_dir}/")
if (pkg_type == "deb")
run("dpkg -i #{install_dir}/#{pkg_basename} && rm #{install_dir}/#{pkg_basename}")
else
run("rpm -ivh --replacepkgs --nomd5 #{install_dir}/#{pkg_basename} && rm #{install_dir}/#{pkg_basename}")
end
end
desc <<-DESC
fhsize's the installations
DESC
task :fhsize do
transaction do
run <<-CMD
#{install_dir}/#{hypertable_version}/bin/fhsize.sh
CMD
end
end
desc <<-DESC
Upgrades installation. Checks upgrade, fhsizes if needed
then copies hyperspace and the rangeserver
state in the run/ directory to new installation
DESC
task :upgrade do
transaction do
qualify_upgrade
upgrade_all
set_current
end
end
desc <<-DESC
Verify that upgrade is OK.
DESC
task :qualify_upgrade, :roles => :source do
run <<-CMD
#{install_dir}/#{hypertable_version}/bin/upgrade-ok.sh \
#{install_dir}/current #{hypertable_version}
CMD
end
desc <<-DESC
Upgrades (copies or uses previous symlink) for "hyperspace", "conf", "run", "log"
and "fs" dirs from the current installation to
installation specified by the hypertable_version
(#{hypertable_version})
DESC
task :upgrade_all, :roles => [:master, :hyperspace, :slave, :thriftbroker, :spare] do
run <<-CMD
#{install_dir}/#{hypertable_version}/bin/upgrade.sh \
#{install_dir}/current #{hypertable_version}
CMD
end
desc "Starts all processes."
task :start do
transaction do
start_hyperspace
start_master
start_slaves
start_master_thriftbroker
end
end
desc "Starts hyperspace processes."
task :start_hyperspace, :roles => :hyperspace do
run <<-CMD
#{install_dir}/current/bin/start-hyperspace.sh \
#{config_option}
CMD
end
desc "Starts master processes."
task :start_master, :roles => :master do
run <<-CMD
#{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \
#{config_option} &&
#{install_dir}/current/bin/start-master.sh #{config_option} &&
#{install_dir}/current/bin/start-monitoring.sh
CMD
end
desc "Starts ThriftBroker on master."
task :start_master_thriftbroker, :roles => :master do
run <<-CMD
#{install_dir}/current/bin/start-thriftbroker.sh \
#{config_option}
CMD
end
desc "Starts slave processes."
task :start_slaves, :roles => :slave do
run <<-CMD
#{install_dir}/current/bin/random-wait.sh 5 &&
#{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \
#{config_option} &&
#{install_dir}/current/bin/start-rangeserver.sh \
#{config_option} &&
#{install_dir}/current/bin/start-thriftbroker.sh \
#{config_option}
CMD
end
desc "Starts ThriftBroker processes."
task :start_thriftbrokers, :roles => :thriftbroker do
run <<-CMD
#{install_dir}/current/bin/random-wait.sh 5 &&
#{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \
#{config_option} &&
#{install_dir}/current/bin/start-thriftbroker.sh \
#{config_option}
CMD
end
desc "Starts DFS brokers."
task :start_dfsbrokers, :roles => [:master, :slave] do
run "#{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \
#{config_option}"
end
desc "Stops all servers."
task :stop do
transaction do
stop_master
stop_slaves
stop_hyperspace
stop_dfsbrokers
end
end
desc "Stops DFS brokers."
task :stop_dfsbrokers, :roles => [:master, :slave] do
run <<-CMD
#{install_dir}/current/bin/stop-servers.sh #{additional_args}
CMD
end
desc "Stops slave processes."
task :stop_slaves, :roles => :slave do
run <<-CMD
#{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master --no-dfsbroker #{additional_args}
CMD
end
desc "Stops master processes."
task :stop_master, :roles => :master do
run <<-CMD
#{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-rangeserver --no-dfsbroker #{additional_args} &&
#{install_dir}/current/bin/stop-monitoring.sh
CMD
end
desc "Stops hyperspace processes."
task :stop_hyperspace, :roles => :hyperspace do
run <<-CMD
#{install_dir}/current/bin/stop-hyperspace.sh
CMD
end
desc "Stops ThriftBroker processes."
task :stop_thriftbrokers, :roles => :thriftbroker do
run <<-CMD
#{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master --no-rangeserver
CMD
end
desc "Cleans hyperspace & rangeservers, removing all tables."
task :cleandb do
transaction do
clean_master
clean_hyperspace
clean_slaves
end
end
desc "Cleans master state but not hyperspace."
task :clean_master, :roles => :master do
run <<-CMD
#{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \
#{config_option} && \
#{install_dir}/current/bin/clean-database.sh #{config_option} ;
CMD
end
desc "Cleans hyperspace."
task :clean_hyperspace, :roles => :hyperspace do
run <<-CMD
#{install_dir}/current/bin/clean-hyperspace.sh
CMD
end
desc "Cleans rangeservers and master state but not hyperspace."
task :clean_slaves, :roles => :slave do
run <<-CMD
#{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master &&
rm -rf #{install_dir}/current/run/*
CMD
end
desc "Reports status for all processes."
task :status do
transaction do
dfs_status
master_status
hyperspace_status
rangeserver_status
end
end
desc "Get status for dfs processes."
task :dfs_status, :roles => [:master, :slave] do
run <<-CMD
#{install_dir}/current/bin/ht serverup dfsbroker
CMD
end
desc "Get status for Hypertable.Master process."
task :master_status, :roles => [:master] do
run <<-CMD
#{install_dir}/current/bin/ht serverup master
CMD
end
desc "Get status for Hyperspace.Master process."
task :hyperspace_status, :roles => [:hyperspace] do
run <<-CMD
#{install_dir}/current/bin/ht serverup hyperspace
CMD
end
desc "Get status for rangeserver processes."
task :rangeserver_status, :roles => [:slave] do
run <<-CMD
#{install_dir}/current/bin/ht serverup rangeserver
CMD
end
set :default_dumpfile, "/tmp/rsdump.txt"
set(:dumpfile) do
"#{default_dumpfile}"
end unless exists?(:dumpfile)
desc "Run dump command on each rangeserver"
task :rangeserver_dump, :roles => [:slave] do
run <<-CMD
echo "dump NOKEYS '#{dumpfile}';" | #{install_dir}/current/bin/ht ht_rsclient --batch #{config_option}
CMD
end
if "#{test_driver}" == "hypertable"
set :thrift_broker_command, "#{install_dir}/current/bin/start-thriftbroker.sh #{config_option}"
set :start_test_client_command, "#{install_dir}/current/bin/start-test-client.sh --count #{client_multiplier} #{roles[:test_dispatcher].servers[0]}"
set :run_test_dispatcher_command, "#{install_dir}/current/bin/jrun --pidfile #{install_dir}/#{hypertable_version}/run/Hypertable.TestDispatcher.pid org.hypertable.examples.PerformanceTest.Dispatcher --driver=#{test_driver} --clients=#{roles[:test_client].servers.length*client_multiplier} #{test_args}"
set :stop_test_args, ""
elsif "#{test_driver}" == "hbase"
set :thrift_broker_command, "echo -n"
set :start_test_client_command, "#{install_dir}/current/bin/start-test-client.sh --jrun-opts \"--add-to-classpath #{hbase_home}/conf\" --count #{client_multiplier} #{roles[:test_dispatcher].servers[0]}"
set :run_test_dispatcher_command, "#{install_dir}/current/bin/jrun --pidfile #{install_dir}/#{hypertable_version}/run/Hypertable.TestDispatcher.pid --add-to-classpath #{hbase_home}/conf org.hypertable.examples.PerformanceTest.Dispatcher --driver=#{test_driver} --clients=#{roles[:test_client].servers.length*client_multiplier} #{test_args}"
set :stop_test_args, "--no-thriftbroker --no-dfsbroker"
else
set :thrift_broker_command, "echo Invalid test driver - #{test_driver}"
set :start_test_client_command, "echo Invalid test driver - #{test_driver}"
set :run_test_dispatcher_command, "echo Invalid test driver - #{test_driver}"
set :stop_test_args, "--no-thriftbroker --no-dfsbroker"
end
desc "Starts test clients."
task :start_test_clients, :roles => :test_client do
run <<-CMD
#{install_dir}/current/bin/random-wait.sh 5 &&
#{thrift_broker_command} &&
#{start_test_client_command}
CMD
end
desc "Run test dispatcher."
task :run_test_dispatcher, :roles => :test_dispatcher do
run <<-CMD
#{thrift_broker_command} &&
#{run_test_dispatcher_command}
CMD
end
desc "Stops test."
task :stop_test, :roles => [:test_client, :test_dispatcher] do
run <<-CMD
#{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master --no-rangeserver #{stop_test_args}
CMD
end
desc "Run test"
task :run_test do
transaction do
stop_test
start_test_clients
run_test_dispatcher
end
end