cassandra 0.16.0 → 0.17.0

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ v0.17.0
2
+ - multi_get_columns with only one query (courtesy @christian-blades-cb)
3
+ - documentation fixes for get and multi_get (issue #136, courtesy @christian-blades-cb)
4
+
1
5
  v0.16.0
2
6
  - New :queue_size option for batch mode (courtesy @vicentllongo)
3
7
  - Cassandra 1.1 support (courtesy @hawknewton)
data/Rakefile CHANGED
@@ -78,18 +78,39 @@ def running?(pid_file = nil)
78
78
  false
79
79
  end
80
80
 
81
+ def listening?(host, port)
82
+ TCPSocket.new(host, port).close
83
+ true
84
+ rescue Errno::ECONNREFUSED => e
85
+ false
86
+ end
87
+
81
88
  namespace :cassandra do
82
89
  desc "Start Cassandra"
83
90
  task :start, [:daemonize] => :java do |t, args|
84
91
  args.with_defaults(:daemonize => true)
85
92
 
86
93
  setup_cassandra_version
87
-
88
94
  env = setup_environment
89
95
 
90
96
  Dir.chdir(File.join(CASSANDRA_HOME, "cassandra-#{CASSANDRA_VERSION}")) do
91
97
  sh("env #{env} bin/cassandra #{'-f' unless args.daemonize} -p #{CASSANDRA_PIDFILE}")
92
98
  end
99
+
100
+ if args.daemonize
101
+ end_time = Time.now + 30
102
+ host = '127.0.0.1'
103
+ port = 9160
104
+
105
+ until Time.now >= end_time || listening?(host, port)
106
+ puts "waiting for 127.0.0.1:9160"
107
+ sleep 0.1
108
+ end
109
+
110
+ unless listening?(host, port)
111
+ raise "timed out waiting for cassandra to start"
112
+ end
113
+ end
93
114
  end
94
115
 
95
116
  desc "Stop Cassandra"
@@ -118,7 +139,9 @@ end
118
139
 
119
140
  desc "Check Java version"
120
141
  task :java do
121
- unless `java -version 2>&1`.split("\n").first =~ /java version "1.6/ #"
142
+ is_java16 = `java -version 2>&1`.split("\n").first =~ /java version "1.6/
143
+
144
+ if ['0.6', '0.7'].include?(CASSANDRA_VERSION) && !java16
122
145
  puts "You need to configure your environment for Java 1.6."
123
146
  puts "If you're on OS X, just export the following environment variables:"
124
147
  puts ' JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home"'
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "cassandra"
5
- s.version = "0.16.0"
5
+ s.version = "0.17.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0.8") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Evan Weaver, Ryan King"]
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Cassandra", "--main", "README.md"]
18
18
  s.require_paths = ["lib", "ext"]
19
19
  s.rubyforge_project = "cassandra"
20
- s.rubygems_version = "1.8.24"
20
+ s.rubygems_version = "1.8.17"
21
21
  s.summary = "A Ruby client for the Cassandra distributed database."
22
22
  s.test_files = ["test/cassandra_client_test.rb", "test/cassandra_mock_test.rb", "test/cassandra_test.rb", "test/comparable_types_test.rb", "test/composite_type_test.rb", "test/eventmachine_test.rb", "test/ordered_hash_test.rb", "test/test_helper.rb"]
23
23
 
File without changes
File without changes
File without changes
@@ -570,9 +570,10 @@ class Cassandra
570
570
  # * options - Valid options are:
571
571
  # * :consistency - Uses the default read consistency if none specified.
572
572
  #
573
- # FIXME Not real multi; needs to use a Column predicate
574
- def multi_get_columns(column_family, keys, *options)
575
- OrderedHash[*keys.map { |key| [key, get_columns(column_family, key, *options)] }._flatten_once]
573
+ def multi_get_columns(column_family, keys, *columns_and_options)
574
+ column_family, columns, sub_columns, options =
575
+ extract_and_validate_params(column_family, keys, columns_and_options, READ_DEFAULTS)
576
+ _multi_get_columns(column_family, keys, columns, sub_columns, options[:consistency])
576
577
  end
577
578
 
578
579
  ##
@@ -582,8 +583,8 @@ class Cassandra
582
583
  #
583
584
  # * column_family - The column_family that you are inserting into.
584
585
  # * key - The row key to insert.
585
- # * columns - Either a single super_column or a list of columns.
586
- # * sub_columns - The list of sub_columns to select.
586
+ # * column - Either a single super_column or single column.
587
+ # * sub_column - A single sub_column to select.
587
588
  # * options - Valid options are:
588
589
  # * :count - The number of columns requested to be returned.
589
590
  # * :start - The starting value for selecting a range of columns.
@@ -607,8 +608,8 @@ class Cassandra
607
608
  #
608
609
  # * column_family - The column_family that you are inserting into.
609
610
  # * keys - An array of keys to select.
610
- # * columns - Either a single super_column or a list of columns.
611
- # * sub_columns - The list of sub_columns to select.
611
+ # * column - Either a single super_column or a single column.
612
+ # * sub_column - A single ub_columns to select.
612
613
  # * options - Valid options are:
613
614
  # * :count - The number of columns requested to be returned.
614
615
  # * :start - The starting value for selecting a range of columns.
File without changes
File without changes
@@ -48,6 +48,23 @@ class Cassandra
48
48
  klass = column_name_class(column_family)
49
49
  (sub_columns || columns).map { |name| result[klass.new(name)] }
50
50
  end
51
+
52
+ def _multi_get_columns(column_family, keys, columns, sub_columns, consistency)
53
+ result = if is_super(column_family) and sub_columns
54
+ predicate = CassandraThrift::SlicePredicate.new(:column_names => sub_columns)
55
+ column_parent = CassandraThrift::ColumnParent.new(
56
+ :column_family => column_family,
57
+ :super_column => columns.kind_of?(Array) ? columns[0] : columns )
58
+ multi_sub_columns_to_hash!(column_family, client.multiget_slice(keys, column_parent, predicate, consistency))
59
+ else
60
+ predicate = CassandraThrift::SlicePredicate.new(:column_names => columns)
61
+ column_parent = CassandraThrift::ColumnParent.new(:column_family => column_family)
62
+ multi_columns_to_hash!(column_family, client.multiget_slice(keys, column_parent, predicate, consistency))
63
+ end
64
+
65
+ klass = column_name_class(column_family)
66
+ OrderedHash[result.keys.map { |key| [key, (sub_columns || columns).map { |column| result[key][klass.new(column)] }] }]
67
+ end
51
68
 
52
69
  def _multiget(column_family, keys, column, sub_column, count, start, finish, reversed, consistency)
53
70
  # Single values; count and range parameters have no effect
File without changes
File without changes
File without changes
File without changes
metadata CHANGED
@@ -1,109 +1,99 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cassandra
3
- version: !ruby/object:Gem::Version
4
- version: 0.16.0
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 17
8
+ - 0
9
+ version: 0.17.0
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Evan Weaver, Ryan King
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2012-09-26 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
16
+
17
+ date: 2012-09-26 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: thrift_client
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 0.7.0
22
- - - <
23
- - !ruby/object:Gem::Version
24
- version: '0.9'
25
- type: :runtime
26
22
  prerelease: false
27
- version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: 0.7.0
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
33
25
  - - <
34
- - !ruby/object:Gem::Version
35
- version: '0.9'
36
- - !ruby/object:Gem::Dependency
37
- name: json
38
- requirement: !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 9
30
+ version: "0.9"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ segments:
34
+ - 0
35
+ - 7
36
+ - 0
37
+ version: 0.7.0
44
38
  type: :runtime
39
+ version_requirements: *id001
40
+ - !ruby/object:Gem::Dependency
41
+ name: json
45
42
  prerelease: false
46
- version_requirements: !ruby/object:Gem::Requirement
47
- none: false
48
- requirements:
49
- - - ! '>='
50
- - !ruby/object:Gem::Version
51
- version: '0'
52
- - !ruby/object:Gem::Dependency
53
- name: rake
54
- requirement: !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ! '>='
58
- - !ruby/object:Gem::Version
59
- version: '0'
43
+ requirement: &id002 !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ segments:
48
+ - 0
49
+ version: "0"
60
50
  type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: rake
61
54
  prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- - !ruby/object:Gem::Dependency
69
- name: simple_uuid
70
- requirement: !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
73
- - - ~>
74
- - !ruby/object:Gem::Version
75
- version: 0.2.0
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
61
+ version: "0"
76
62
  type: :runtime
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: simple_uuid
77
66
  prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ requirements:
81
69
  - - ~>
82
- - !ruby/object:Gem::Version
70
+ - !ruby/object:Gem::Version
71
+ segments:
72
+ - 0
73
+ - 2
74
+ - 0
83
75
  version: 0.2.0
84
- - !ruby/object:Gem::Dependency
76
+ type: :runtime
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
85
79
  name: echoe
86
- requirement: !ruby/object:Gem::Requirement
87
- none: false
88
- requirements:
89
- - - ! '>='
90
- - !ruby/object:Gem::Version
91
- version: '0'
92
- type: :development
93
80
  prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - ! '>='
98
- - !ruby/object:Gem::Version
99
- version: '0'
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ type: :development
89
+ version_requirements: *id005
100
90
  description: A Ruby client for the Cassandra distributed database.
101
- email: ''
102
- executables:
91
+ email: ""
92
+ executables:
103
93
  - cassandra_helper
104
- extensions:
94
+ extensions:
105
95
  - ext/extconf.rb
106
- extra_rdoc_files:
96
+ extra_rdoc_files:
107
97
  - CHANGELOG
108
98
  - LICENSE
109
99
  - README.md
@@ -148,7 +138,7 @@ extra_rdoc_files:
148
138
  - lib/cassandra/ordered_hash.rb
149
139
  - lib/cassandra/protocol.rb
150
140
  - lib/cassandra/time.rb
151
- files:
141
+ files:
152
142
  - CHANGELOG
153
143
  - Gemfile
154
144
  - LICENSE
@@ -244,38 +234,44 @@ files:
244
234
  - vendor/1.1/gen-rb/cassandra_constants.rb
245
235
  - vendor/1.1/gen-rb/cassandra_types.rb
246
236
  - cassandra.gemspec
237
+ has_rdoc: true
247
238
  homepage: http://github.com/twitter/cassandra
248
239
  licenses: []
240
+
249
241
  post_install_message:
250
- rdoc_options:
242
+ rdoc_options:
251
243
  - --line-numbers
252
244
  - --inline-source
253
245
  - --title
254
246
  - Cassandra
255
247
  - --main
256
248
  - README.md
257
- require_paths:
249
+ require_paths:
258
250
  - lib
259
251
  - ext
260
- required_ruby_version: !ruby/object:Gem::Requirement
261
- none: false
262
- requirements:
263
- - - ! '>='
264
- - !ruby/object:Gem::Version
265
- version: '0'
266
- required_rubygems_version: !ruby/object:Gem::Requirement
267
- none: false
268
- requirements:
269
- - - ! '>='
270
- - !ruby/object:Gem::Version
271
- version: '0.8'
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ segments:
257
+ - 0
258
+ version: "0"
259
+ required_rubygems_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ segments:
264
+ - 0
265
+ - 8
266
+ version: "0.8"
272
267
  requirements: []
268
+
273
269
  rubyforge_project: cassandra
274
- rubygems_version: 1.8.24
270
+ rubygems_version: 1.3.6
275
271
  signing_key:
276
272
  specification_version: 3
277
273
  summary: A Ruby client for the Cassandra distributed database.
278
- test_files:
274
+ test_files:
279
275
  - test/cassandra_client_test.rb
280
276
  - test/cassandra_mock_test.rb
281
277
  - test/cassandra_test.rb