cassandra-cql/Rakefile

174 lines
4.9 KiB
Ruby

require 'bundler'
Bundler::GemHelper.install_tasks
require 'rake'
require 'rspec/core'
require 'rspec/core/rake_task'
CassandraBinaries = {
'0.8' => 'http://archive.apache.org/dist/cassandra/0.8.9/apache-cassandra-0.8.9-bin.tar.gz',
'1.0' => 'http://archive.apache.org/dist/cassandra/1.0.9/apache-cassandra-1.0.9-bin.tar.gz',
'1.1' => 'http://archive.apache.org/dist/cassandra/1.1.9/apache-cassandra-1.1.9-bin.tar.gz',
'1.2' => 'http://archive.apache.org/dist/cassandra/1.2.5/apache-cassandra-1.2.5-bin.tar.gz'
}
CASSANDRA_VERSION = ENV['CASSANDRA_VERSION'] || '1.0'
CASSANDRA_HOME = ENV['CASSANDRA_HOME'] || File.dirname(__FILE__) + '/tmp'
CASSANDRA_PIDFILE = ENV['CASSANDRA_PIDFILE'] || "#{CASSANDRA_HOME}/cassandra.pid"
RSpec::Core::RakeTask.new(:spec) do |spec|
spec.pattern = FileList['spec/**/*_spec.rb']
end
RSpec::Core::RakeTask.new(:rcov) do |spec|
spec.pattern = FileList['spec/**/*_spec.rb']
spec.rcov = true
spec.rcov_opts = "--exclude 'spec/*'"
end
desc "Download Cassandra and run specs against it"
task :spec_with_server do
Rake::Task["cassandra:clean"].invoke
Rake::Task["cassandra:start"].invoke
error = nil
begin
Rake::Task["spec"].invoke
rescue
error = $!
end
Rake::Task["cassandra:stop"].invoke
raise $! if $!
end
task :default => :spec
def setup_cassandra_version(version = CASSANDRA_VERSION)
FileUtils.mkdir_p CASSANDRA_HOME
destination_directory = File.join(CASSANDRA_HOME, 'cassandra-' + CASSANDRA_VERSION)
unless File.exists?(File.join(destination_directory, 'bin','cassandra'))
download_source = CassandraBinaries[CASSANDRA_VERSION]
download_destination = File.join(CASSANDRA_HOME, File.basename(download_source))
untar_directory = File.join(CASSANDRA_HOME, File.basename(download_source,'-bin.tar.gz'))
puts "downloading cassandra"
sh "curl -L -o #{download_destination} #{download_source}"
sh "tar xzf #{download_destination} -C #{CASSANDRA_HOME}"
sh "mv #{untar_directory} #{destination_directory}"
end
end
def setup_environment
env = ""
if !ENV["CASSANDRA_INCLUDE"]
env << "CASSANDRA_INCLUDE=#{File.expand_path(Dir.pwd)}/spec/conf/#{CASSANDRA_VERSION}/cassandra.in.sh "
env << "CASSANDRA_HOME=#{CASSANDRA_HOME}/cassandra-#{CASSANDRA_VERSION} "
env << "CASSANDRA_CONF=#{File.expand_path(Dir.pwd)}/spec/conf/#{CASSANDRA_VERSION}"
else
env << "CASSANDRA_INCLUDE=#{ENV['CASSANDRA_INCLUDE']} "
env << "CASSANDRA_HOME=#{ENV['CASSANDRA_HOME']} "
env << "CASSANDRA_CONF=#{ENV['CASSANDRA_CONF']}"
end
env
end
def running?(pid_file = nil)
pid_file ||= CASSANDRA_PIDFILE
if File.exists?(pid_file)
pid = File.new(pid_file).read.to_i
begin
Process.kill(0, pid)
return true
rescue
File.delete(pid_file)
end
end
false
end
def listening?(host, port)
TCPSocket.new(host, port).close
true
rescue Errno::ECONNREFUSED => e
false
end
namespace :cassandra do
desc "Start Cassandra"
task :start, [:daemonize] => :java do |t, args|
args.with_defaults(:daemonize => true)
setup_cassandra_version
env = setup_environment
Dir.chdir(File.join(CASSANDRA_HOME, "cassandra-#{CASSANDRA_VERSION}")) do
sh("env #{env} bin/cassandra #{'-f' unless args.daemonize} -p #{CASSANDRA_PIDFILE}")
end
if args.daemonize
end_time = Time.now + 30
host = '127.0.0.1'
port = 9160
until Time.now >= end_time || listening?(host, port)
puts "waiting for 127.0.0.1:9160"
sleep 0.1
end
unless listening?(host, port)
raise "timed out waiting for cassandra to start"
end
end
end
desc "Stop Cassandra"
task :stop => :java do
setup_cassandra_version
env = setup_environment
sh("kill $(cat #{CASSANDRA_PIDFILE})")
end
desc "Delete all data files in #{CASSANDRA_HOME}"
task :clean do
sh("rm -rf #{File.join(CASSANDRA_HOME, "cassandra-#{CASSANDRA_VERSION}", 'data')}")
end
end
desc "Start Cassandra"
task :cassandra => :java do
begin
Rake::Task["cassandra:start"].invoke(false)
rescue RuntimeError => e
raise e unless e.message =~ /Command failed with status \(130\)/ # handle keyboard interupt errors
end
end
desc "Run the Cassandra CLI"
task :cli do
Dir.chdir(File.join(CASSANDRA_HOME, "cassandra-#{CASSANDRA_VERSION}")) do
sh("bin/cassandra-cli -host localhost -port 9160")
end
end
desc "Check Java version"
task :java do
is_java16 = `java -version 2>&1`.split("\n").first =~ /java version "1.6/
if ['0.6', '0.7'].include?(CASSANDRA_VERSION) && !java16
puts "You need to configure your environment for Java 1.6."
puts "If you're on OS X, just export the following environment variables:"
puts ' JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home"'
puts ' PATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin:$PATH"'
exit(1)
end
end
require 'yard'
YARD::Rake::YardocTask.new