cassandra 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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