cassie 1.0.5 → 1.0.6.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/cassie +2 -6
- data/lib/cassie/support/server_process.rb +4 -7
- data/lib/cassie/tasks/configuration/generate.rake +1 -1
- data/lib/cassie/tasks/io.rb +13 -0
- data/lib/cassie/tasks/migration/create.rake +1 -1
- data/lib/cassie/tasks/migration/import.rake +2 -2
- data/lib/cassie/tasks/schema/drop.rake +1 -1
- data/lib/cassie/tasks/schema/dump.rake +1 -1
- data/lib/cassie/tasks/schema/history.rake +1 -1
- data/lib/cassie/tasks/schema/import.rake +1 -1
- data/lib/cassie/tasks/schema/init.rake +29 -37
- data/lib/cassie/tasks/schema/init_keyspace.rake +35 -0
- data/lib/cassie/tasks/schema/init_versioning.rake +22 -0
- data/lib/cassie/tasks/schema/load.rake +1 -1
- data/lib/cassie/tasks/schema/migrate.rake +1 -1
- data/lib/cassie/tasks/schema/status.rake +1 -1
- data/lib/cassie/tasks/task_runner.rb +69 -15
- data/lib/cassie/version.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a666b2c1cd7989d7ae10dc0ffd994f7cd942d54b
|
4
|
+
data.tar.gz: 94075bcf8311158255ccd5174d8b883a8004ccb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '011389da5a2e79dfd9fd909290e109667e933d75c9465fd5be878149e7f4a8e8a682544f6d38a00697ea21a58ee0b6fefd25dea9f86f576d3271afc84a3b1c29'
|
7
|
+
data.tar.gz: ca04b1f8ae1a515d51476cafb9e24e21c51300a052978818a3f18a9812dd61004bb8b5c3601559f90d31e12a8a377ac5f65ae111a5fa20e3ef30ab2f4cb7ae45
|
data/bin/cassie
CHANGED
@@ -3,10 +3,6 @@
|
|
3
3
|
require_relative '../lib/cassie'
|
4
4
|
require_relative "../lib/cassie/tasks"
|
5
5
|
|
6
|
-
runner = Cassie::Tasks::TaskRunner.new
|
7
|
-
|
8
|
-
runner.run_command(ARGV)
|
9
|
-
else
|
10
|
-
runner.print_documentation
|
11
|
-
end
|
6
|
+
runner = Cassie::Tasks::TaskRunner.new(ARGV).run
|
7
|
+
|
12
8
|
|
@@ -3,6 +3,8 @@ module Cassie
|
|
3
3
|
class ServerProcess
|
4
4
|
|
5
5
|
attr_reader :pid
|
6
|
+
# @return [Array<String>] The Cassandra output lines tagged with ERROR
|
7
|
+
attr_reader :errors
|
6
8
|
|
7
9
|
# Scan the system for cassandra processes running
|
8
10
|
# @return [Array<ServerProcess>] Running cassandra processes
|
@@ -26,6 +28,7 @@ module Cassie
|
|
26
28
|
# Starts a cassandra server process. {#running?} will be true if it started correctly.
|
27
29
|
def initialize(pid=nil)
|
28
30
|
@pid = pid
|
31
|
+
@errors = []
|
29
32
|
|
30
33
|
if pid
|
31
34
|
@running = true
|
@@ -59,13 +62,6 @@ module Cassie
|
|
59
62
|
details[:command]
|
60
63
|
end
|
61
64
|
|
62
|
-
# @return [Array<String>] The Cassandra output lines tagged with ERROR
|
63
|
-
# @!parse attr_reader :errors
|
64
|
-
def errors
|
65
|
-
return [] unless command && command.output
|
66
|
-
command.output.split("\n").grep(/ERROR/)
|
67
|
-
end
|
68
|
-
|
69
65
|
protected
|
70
66
|
|
71
67
|
def self.pids
|
@@ -83,6 +79,7 @@ module Cassie
|
|
83
79
|
Cassie.logger.warn "[WARN] - Multiple cassandra processes started, using first one." if new_pids.length > 1
|
84
80
|
|
85
81
|
@running = !!(cassandra.output =~ /state jump to NORMAL/)
|
82
|
+
@errors = cassandra.output.split("\n").grep(/ERROR/)
|
86
83
|
@pid = new_pids.first
|
87
84
|
end
|
88
85
|
|
data/lib/cassie/tasks/io.rb
CHANGED
@@ -4,6 +4,19 @@ module Cassie::Tasks
|
|
4
4
|
io.puts(*args)
|
5
5
|
end
|
6
6
|
|
7
|
+
def output_error(exception)
|
8
|
+
puts red("Error: #{exception.message}")
|
9
|
+
|
10
|
+
return unless exception.backtrace.try(:any?)
|
11
|
+
|
12
|
+
if argv.include?("--trace")
|
13
|
+
puts " #{exception.class}:"
|
14
|
+
puts " #{exception.backtrace.join("\n ")}"
|
15
|
+
else
|
16
|
+
puts " (use --trace for exception info)"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
7
20
|
def io
|
8
21
|
$stdout
|
9
22
|
end
|
@@ -31,8 +31,8 @@ namespace :cassie do
|
|
31
31
|
importer.import
|
32
32
|
puts "-- done"
|
33
33
|
rescue => e
|
34
|
-
importer.imported_paths.each {|f| File.delete(f) }
|
35
|
-
|
34
|
+
importer.imported_paths.each {|f| File.delete(f) } if importer
|
35
|
+
output_error(e)
|
36
36
|
abort
|
37
37
|
end
|
38
38
|
end
|
@@ -2,52 +2,44 @@ namespace :cassie do
|
|
2
2
|
namespace :schema do
|
3
3
|
|
4
4
|
desc "Initialize versioning schema and the keyspace for this environment"
|
5
|
-
task :init =>
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
task :init => :init_versioning do
|
6
|
+
opts = {}
|
7
|
+
OptionParser.new do |args|
|
8
|
+
args.on("-v", "--version VERSION", "Set an initial schema version representing the currenet version of the schema.") do |v|
|
9
|
+
opts[:version] = v
|
10
|
+
end
|
11
|
+
end.parse!(argv)
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
Cassie::Schema.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
puts "-- done"
|
19
|
-
rescue => e
|
20
|
-
puts red("Error:\n #{e.message}")
|
21
|
-
abort
|
13
|
+
not_found = Proc.new do
|
14
|
+
str = "Version #{version} was not found locally, can't fast-forward there."
|
15
|
+
str += " Did you mean one of these local versions?" if Cassie::Schema.local_versions
|
16
|
+
Cassie::Schema.local_versions.reverse.each do |v|
|
17
|
+
str += " - #{v.to_s.ljust(10)} # #{v.description}"
|
18
|
+
end
|
19
|
+
raise str
|
22
20
|
end
|
23
|
-
end
|
24
|
-
|
25
|
-
desc "Initialize the keyspace for the current environment"
|
26
|
-
task :init_keyspace do
|
27
|
-
include Cassie::Tasks::IO
|
28
21
|
|
29
22
|
begin
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
if opts[:version]
|
24
|
+
version = Cassie::Schema::Version.new(opts[:version])
|
25
|
+
version = Cassie::Schema.local_versions.find(not_found){|v| version == v}
|
26
|
+
versions = Cassie::Schema.local_versions.select{|v| v <= version}.sort
|
27
|
+
puts "-- Fast-forwarding to version #{version}"
|
28
|
+
versions.each do |v|
|
29
|
+
Cassie::Schema.record_version(v, false)
|
30
|
+
puts " > Recorded version #{version}"
|
31
|
+
end
|
32
|
+
puts "-- done"
|
37
33
|
|
38
|
-
if Cassie.keyspace_exists?(query.name)
|
39
|
-
puts " > '#{name}' already exists"
|
40
|
-
else
|
41
|
-
query.execute
|
42
34
|
end
|
43
|
-
puts "-- done"
|
44
|
-
|
45
35
|
rescue => e
|
46
|
-
|
47
|
-
puts "\t"
|
48
|
-
puts red("Error:\n #{e.message}")
|
36
|
+
output_error(e)
|
49
37
|
abort
|
50
38
|
end
|
51
39
|
end
|
40
|
+
|
41
|
+
Rake::Task["cassie:schema:init"].enhance do
|
42
|
+
Rake::Task["cassie:schema:init_keyspace"].invoke
|
43
|
+
end
|
52
44
|
end
|
53
45
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
namespace :cassie do
|
2
|
+
namespace :schema do
|
3
|
+
|
4
|
+
desc "Initialize the keyspace for the current environment"
|
5
|
+
task :init_keyspace do
|
6
|
+
include Cassie::Tasks::IO
|
7
|
+
|
8
|
+
begin
|
9
|
+
name = Cassie.configuration[:keyspace]
|
10
|
+
puts "-- Initializing '#{name}' Keyspace"
|
11
|
+
|
12
|
+
query = Cassie::Schema::CreateKeyspaceQuery.new
|
13
|
+
query.name = name
|
14
|
+
if replicaiton = Cassie.configuration[:replication]
|
15
|
+
query.replication_class = replication[:class] if replication.has_key?(:class)
|
16
|
+
query.replication_factor = replication[:replication_factor] if replication.has_key?(:replication_factor)
|
17
|
+
end
|
18
|
+
query.durable_writes = Cassie.configuration[:durable_writes] if Cassie.configuration.has_key?(:durable_writes)
|
19
|
+
|
20
|
+
if Cassie.keyspace_exists?(query.name)
|
21
|
+
puts " > '#{name}' already exists"
|
22
|
+
else
|
23
|
+
query.execute!
|
24
|
+
end
|
25
|
+
puts "-- done"
|
26
|
+
|
27
|
+
rescue => e
|
28
|
+
puts red("Couldn't create keyspace, check #{Cassie.paths[:cluster_configurations]}:\n#{query.to_cql}")
|
29
|
+
puts "\t"
|
30
|
+
output_error(e)
|
31
|
+
abort
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :cassie do
|
2
|
+
namespace :schema do
|
3
|
+
|
4
|
+
desc "Initialize cassie schema versioning"
|
5
|
+
task :init_versioning do
|
6
|
+
include Cassie::Tasks::IO
|
7
|
+
|
8
|
+
begin
|
9
|
+
puts "-- Initializing Cassie Versioning"
|
10
|
+
Cassie::Schema.initialize_versioning
|
11
|
+
puts "-- done"
|
12
|
+
rescue Cassie::Schema::AlreadyInitiailizedError
|
13
|
+
puts " > Cassie Versioning already initialized "
|
14
|
+
puts " > Schema is at version #{Cassie::Schema.version}"
|
15
|
+
puts "-- done"
|
16
|
+
rescue => e
|
17
|
+
output_error(e)
|
18
|
+
abort
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -11,7 +11,7 @@ namespace :cassie do
|
|
11
11
|
all_versions = Cassie::Schema.applied_versions.to_a | Cassie::Schema.local_versions.to_a
|
12
12
|
print_statuses(all_versions.sort.reverse)
|
13
13
|
rescue Cassie::Schema::UninitializedError => e
|
14
|
-
|
14
|
+
output_error(e)
|
15
15
|
abort
|
16
16
|
end
|
17
17
|
end
|
@@ -1,28 +1,57 @@
|
|
1
1
|
module Cassie
|
2
2
|
module Tasks
|
3
3
|
class TaskRunner
|
4
|
+
attr_reader :raw_args
|
5
|
+
attr_reader :args
|
6
|
+
attr_reader :command
|
7
|
+
attr_reader :options
|
4
8
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
9
|
+
def initialize(raw_args)
|
10
|
+
@raw_args = raw_args
|
11
|
+
@args = raw_args.dup
|
12
|
+
@command = nil
|
13
|
+
@command = args.delete_at(0) if args.first =~ /\A[^-]/
|
14
|
+
@options = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
build_options
|
19
|
+
Cassie.logger.level = ::Logger::WARN unless options[:debug]
|
20
|
+
Cassie.env = options[:environment] if options[:environment]
|
21
|
+
|
22
|
+
run_command || display_info
|
23
|
+
rescue OptionParser::InvalidOption => e
|
24
|
+
puts("#{e.message}\n\n")
|
25
|
+
display_info
|
26
|
+
end
|
8
27
|
|
9
|
-
|
28
|
+
# @returns [Boolean] if task was invoked
|
29
|
+
def run_command
|
30
|
+
task && task.invoke
|
31
|
+
end
|
32
|
+
|
33
|
+
# @returns [Rake::Task, nil] nil if task is not defined, otherwise the task object itself
|
34
|
+
def task
|
35
|
+
task_name = "cassie:#{command}"
|
36
|
+
Rake::Task[task_name] if Rake::Task.task_defined?(task_name)
|
37
|
+
end
|
10
38
|
|
11
|
-
|
12
|
-
|
39
|
+
def display_info
|
40
|
+
case
|
41
|
+
when command && !task
|
42
|
+
puts "'#{command}' is not a supported command.\n\n"
|
43
|
+
print_documentation
|
44
|
+
when options[:show_help]
|
45
|
+
print_documentation
|
46
|
+
when options[:show_version]
|
47
|
+
puts Cassie::VERSION
|
13
48
|
else
|
14
|
-
|
15
|
-
when "--help"
|
16
|
-
print_documentation
|
17
|
-
when "-v"
|
18
|
-
puts Cassie::VERSION
|
19
|
-
else
|
20
|
-
puts "'#{cmd}' is not a supported command.\n\n"
|
21
|
-
print_documentation
|
22
|
-
end
|
49
|
+
print_documentation
|
23
50
|
end
|
24
51
|
end
|
25
52
|
|
53
|
+
protected
|
54
|
+
|
26
55
|
def print_documentation
|
27
56
|
docs = <<-EOS
|
28
57
|
Usage:
|
@@ -38,12 +67,37 @@ EOS
|
|
38
67
|
Options:
|
39
68
|
-h, --help # Print this documentation
|
40
69
|
-v, --version # List the library version
|
70
|
+
-d, --debug # Show debug log lines
|
71
|
+
-e, --env # The Cassie.env to use
|
41
72
|
<command> --help # List options for a given command
|
73
|
+
<command> --trace # Show exception backtrace
|
42
74
|
|
43
75
|
EOS
|
44
76
|
|
45
77
|
puts docs
|
46
78
|
end
|
79
|
+
|
80
|
+
def build_options
|
81
|
+
@options.tap do |h|
|
82
|
+
# Options Parsers doesn't work well unles
|
83
|
+
# all options are passed up to a single parser.
|
84
|
+
# Since we don't want to shadow options and we
|
85
|
+
# do want sub-task --help to work
|
86
|
+
#
|
87
|
+
# As is, a sub task with dependencies
|
88
|
+
# may cause issues since the pre-task could
|
89
|
+
# have optiosn that cause a parsing error.
|
90
|
+
# Need to revisit and probably ditch rake tasks.
|
91
|
+
h[:trace] = args.delete("-t") || args.delete("--trace")
|
92
|
+
h[:debug] = args.delete("-d") || args.delete("--debug")
|
93
|
+
if env_index = (args.index("-e") || args.index("--env"))
|
94
|
+
h[:environment] = args.delete_at(env_index + 1)
|
95
|
+
args.delete_at(env_index)
|
96
|
+
end
|
97
|
+
h[:show_version] = args.include?("-v") || args.include?("--version")
|
98
|
+
h[:show_help] = args.include?("-h") || args.include?("--help")
|
99
|
+
end
|
100
|
+
end
|
47
101
|
end
|
48
102
|
end
|
49
103
|
end
|
data/lib/cassie/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cassie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Prothro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cassandra-driver
|
@@ -227,6 +227,8 @@ files:
|
|
227
227
|
- lib/cassie/tasks/schema/history.rake
|
228
228
|
- lib/cassie/tasks/schema/import.rake
|
229
229
|
- lib/cassie/tasks/schema/init.rake
|
230
|
+
- lib/cassie/tasks/schema/init_keyspace.rake
|
231
|
+
- lib/cassie/tasks/schema/init_versioning.rake
|
230
232
|
- lib/cassie/tasks/schema/load.rake
|
231
233
|
- lib/cassie/tasks/schema/migrate.rake
|
232
234
|
- lib/cassie/tasks/schema/reset.rake
|
@@ -263,12 +265,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
263
265
|
version: '0'
|
264
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
265
267
|
requirements:
|
266
|
-
- - "
|
268
|
+
- - ">"
|
267
269
|
- !ruby/object:Gem::Version
|
268
|
-
version:
|
270
|
+
version: 1.3.1
|
269
271
|
requirements: []
|
270
272
|
rubyforge_project:
|
271
|
-
rubygems_version: 2.
|
273
|
+
rubygems_version: 2.5.2
|
272
274
|
signing_key:
|
273
275
|
specification_version: 4
|
274
276
|
summary: Apache Cassandra application support
|