Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 167 lines (137 sloc) 5.05 kB
require 'fileutils'
unless ENV['FROM_BIN_CASSANDRA_HELPER']
require 'rubygems'
require 'echoe'
Echoe.new("cassandra") do |p|
p.author = "Evan Weaver, Ryan King"
p.project = "fauna"
p.summary = "A Ruby client for the Cassandra distributed database."
p.rubygems_version = ">= 0.8"
p.dependencies = ['thrift_client >=0.6.3', 'json', 'rake', 'simple_uuid >=0.1.0']
p.ignore_pattern = /^(data|vendor\/cassandra|cassandra|vendor\/thrift|.*\.rbc)/
p.rdoc_pattern = /^(lib|bin|tasks|ext)|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
p.retain_gemspec = true
end
end
CassandraBinaries = {
'0.6' => 'http://www.apache.org/dist/cassandra/0.6.13/apache-cassandra-0.6.13-bin.tar.gz',
'0.7' => 'http://www.apache.org/dist/cassandra/0.7.5/apache-cassandra-0.7.5-bin.tar.gz',
'0.8' => 'http://www.apache.org/dist/cassandra/0.8.0/apache-cassandra-0.8.0-bin.tar.gz'
}
CASSANDRA_HOME = ENV['CASSANDRA_HOME'] || "#{ENV['HOME']}/cassandra"
CASSANDRA_VERSION = ENV['CASSANDRA_VERSION'] || '0.7'
CASSANDRA_PIDFILE = ENV['CASSANDRA_PIDFILE'] || "#{CASSANDRA_HOME}/cassandra.pid"
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("/tmp", 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)}/conf/#{CASSANDRA_VERSION}/cassandra.in.sh "
env << "CASSANDRA_HOME=#{CASSANDRA_HOME}/cassandra-#{CASSANDRA_VERSION} "
env << "CASSANDRA_CONF=#{File.expand_path(Dir.pwd)}/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
namespace :cassandra do
desc "Start Cassandra"
task :start, :daemonize, :needs => :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
end
desc "Stop Cassandra"
task :stop => :java do
setup_cassandra_version
env = setup_environment
sh("kill $(cat #{CASSANDRA_PIDFILE})")
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
unless `java -version 2>&1`.split("\n").first =~ /java version "1.6/ #"
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
namespace :data do
desc "Reset test data"
task :reset do
puts "Resetting test data"
sh("rm -rf #{File.join(CASSANDRA_HOME, "cassandra-#{CASSANDRA_VERSION}", 'data')}")
end
desc "Load test data structures."
task :load do
unless CASSANDRA_VERSION == '0.6'
schema_path = "#{File.expand_path(Dir.pwd)}/conf/#{CASSANDRA_VERSION}/schema.txt"
puts "Loading test data structures."
Dir.chdir(File.join(CASSANDRA_HOME, "cassandra-#{CASSANDRA_VERSION}")) do
begin
sh("bin/cassandra-cli --host localhost --batch < #{schema_path}")
rescue
puts "Schema already loaded."
end
end
end
end
end
task :test => 'data:load'
# desc "Regenerate thrift bindings for Cassandra" # Dev only
task :thrift do
puts "Generating Thrift bindings"
system(
"cd vendor &&
rm -rf gen-rb &&
thrift -gen rb #{CASSANDRA_HOME}/interface/cassandra.thrift")
end
task :fix_perms do
chmod_R 0755, './'
end
task :pkg => [:fix_perms]
Jump to Line
Something went wrong with that request. Please try again.