right_support 2.0.4 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
@@ -19,7 +19,6 @@
|
|
19
19
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
20
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
-
|
23
22
|
begin
|
24
23
|
require 'cassandra/0.8'
|
25
24
|
|
@@ -125,29 +124,78 @@ module RightSupport::DB
|
|
125
124
|
class << self
|
126
125
|
|
127
126
|
@@logger = nil
|
128
|
-
|
129
|
-
|
127
|
+
|
128
|
+
attr_reader :default_keyspace
|
130
129
|
attr_accessor :column_family
|
131
|
-
|
130
|
+
attr_accessor :custom_operation_exception
|
131
|
+
|
132
|
+
@@current_keyspace = nil
|
133
|
+
|
134
|
+
@@connections = {}
|
132
135
|
|
133
136
|
def config
|
134
137
|
@@config
|
135
138
|
end
|
136
|
-
|
139
|
+
|
137
140
|
def config=(value)
|
138
141
|
@@config = value
|
139
142
|
end
|
140
|
-
|
143
|
+
|
141
144
|
def logger=(l)
|
142
145
|
@@logger = l
|
143
146
|
end
|
144
|
-
|
147
|
+
|
145
148
|
def logger
|
146
|
-
@@logger
|
149
|
+
@@logger
|
147
150
|
end
|
148
151
|
|
152
|
+
# Return current keyspaces name as Array of String
|
153
|
+
#
|
154
|
+
# === Return
|
155
|
+
# (Array):: keyspaces names
|
156
|
+
|
157
|
+
def keyspaces
|
158
|
+
@@connections.keys
|
159
|
+
end
|
160
|
+
|
161
|
+
# Returns current active keyspace.
|
162
|
+
#
|
163
|
+
# === Return
|
164
|
+
# keyspace(String):: current_keyspace or default_keyspace
|
165
|
+
|
149
166
|
def keyspace
|
150
|
-
|
167
|
+
@@current_keyspace || @@default_keyspace
|
168
|
+
end
|
169
|
+
|
170
|
+
# Sets the default keyspace
|
171
|
+
#
|
172
|
+
# === Parameters
|
173
|
+
# keyspace(String):: Set the default keyspace
|
174
|
+
|
175
|
+
def keyspace=(kyspc)
|
176
|
+
@@default_keyspace = (kyspc + "_" + (ENV['RACK_ENV'] || 'development'))
|
177
|
+
end
|
178
|
+
|
179
|
+
# Execute given block in kyspc context
|
180
|
+
#
|
181
|
+
# === Parameters
|
182
|
+
# kyspc(String):: Keyspace context
|
183
|
+
# block(Proc):: Code that will be called in keyspace context
|
184
|
+
|
185
|
+
def with_keyspace(kyspc, &block)
|
186
|
+
@@current_keyspace = (kyspc + "_" + (ENV['RACK_ENV'] || 'development'))
|
187
|
+
begin
|
188
|
+
block.call
|
189
|
+
rescue Exception => e
|
190
|
+
if !self.custom_operation_exception.nil? && self.custom_operation_exception.kind_of?(Proc)\
|
191
|
+
&& e.kind_of?(Thrift::Exception)
|
192
|
+
custom_operation_exception.call
|
193
|
+
else
|
194
|
+
raise e
|
195
|
+
end
|
196
|
+
ensure
|
197
|
+
@@current_keyspace = nil
|
198
|
+
end
|
151
199
|
end
|
152
200
|
|
153
201
|
# Client connected to Cassandra server
|
@@ -156,8 +204,8 @@ module RightSupport::DB
|
|
156
204
|
#
|
157
205
|
# === Return
|
158
206
|
# (Cassandra):: Client connected to server
|
159
|
-
def conn
|
160
|
-
|
207
|
+
def conn()
|
208
|
+
@@connections ||= {}
|
161
209
|
|
162
210
|
# TODO remove hidden dependency on ENV['RACK_ENV'] (maybe require config= to accept a sub hash?)
|
163
211
|
config = @@config[ENV["RACK_ENV"]]
|
@@ -167,9 +215,9 @@ module RightSupport::DB
|
|
167
215
|
thrift_client_options.merge!({:protocol => Thrift::BinaryProtocolAccelerated})\
|
168
216
|
if defined? Thrift::BinaryProtocolAccelerated
|
169
217
|
|
170
|
-
@@
|
171
|
-
@@
|
172
|
-
@@
|
218
|
+
@@connections[self.keyspace] ||= Cassandra.new(self.keyspace, config["server"], thrift_client_options)
|
219
|
+
@@connections[self.keyspace].disable_node_auto_discovery!
|
220
|
+
@@connections[self.keyspace]
|
173
221
|
end
|
174
222
|
|
175
223
|
# Get row(s) for specified key(s)
|
@@ -185,7 +233,7 @@ module RightSupport::DB
|
|
185
233
|
def all(k, opt = {})
|
186
234
|
real_get(k, opt)
|
187
235
|
end
|
188
|
-
|
236
|
+
|
189
237
|
# Get row for specified primary key and convert into object of given class
|
190
238
|
# Unless :count is specified, a maximum of 100 columns are retrieved
|
191
239
|
#
|
@@ -240,6 +288,37 @@ module RightSupport::DB
|
|
240
288
|
end
|
241
289
|
end
|
242
290
|
|
291
|
+
# Get all rows for specified secondary key
|
292
|
+
#
|
293
|
+
# === Parameters
|
294
|
+
# index(String):: Name of secondary index
|
295
|
+
# key(String):: Index value that each selected row is required to match
|
296
|
+
# columns(Array|nil):: Names of columns to be retrieved, defaults to all
|
297
|
+
# opt(Hash):: Request options with only :consistency used
|
298
|
+
#
|
299
|
+
# === Return
|
300
|
+
# (OrderedHash):: Rows retrieved with each key, value is columns
|
301
|
+
def get_all_indexed_slices(index, key, columns = nil, opt = {})
|
302
|
+
rows = Cassandra::OrderedHash.new
|
303
|
+
start = ""
|
304
|
+
count = opt.delete(:count) || DEFAULT_COUNT
|
305
|
+
expr = do_op(:create_idx_expr, index, key, "EQ")
|
306
|
+
opt = opt[:consistency] ? {:consistency => opt[:consistency]} : {}
|
307
|
+
while true
|
308
|
+
clause = do_op(:create_idx_clause, [expr], start, count)
|
309
|
+
chunk = self.conn.get_indexed_slices(column_family, clause, columns, opt)
|
310
|
+
rows.merge!(chunk)
|
311
|
+
if chunk.size == count
|
312
|
+
# Assume there are more chunks, use last key as start of next get
|
313
|
+
start = chunk.keys.last
|
314
|
+
else
|
315
|
+
# This must be the last chunk
|
316
|
+
break
|
317
|
+
end
|
318
|
+
end
|
319
|
+
rows
|
320
|
+
end
|
321
|
+
|
243
322
|
# Get all rows for specified secondary key
|
244
323
|
#
|
245
324
|
# === Parameters
|
@@ -382,16 +461,19 @@ module RightSupport::DB
|
|
382
461
|
config = @@config[ENV["RACK_ENV"]]
|
383
462
|
raise MissingConfiguration, "CassandraModel config is missing a '#{ENV['RACK_ENV']}' section" unless config
|
384
463
|
|
464
|
+
return false if keyspace.nil?
|
465
|
+
|
385
466
|
thrift_client_options = {:timeout => RightSupport::DB::CassandraModel::DEFAULT_TIMEOUT}
|
386
467
|
thrift_client_options.merge!({:protocol => Thrift::BinaryProtocolAccelerated})\
|
387
468
|
if defined? Thrift::BinaryProtocolAccelerated
|
388
469
|
|
389
|
-
|
390
|
-
|
470
|
+
connection = Cassandra.new(keyspace, config["server"], thrift_client_options)
|
471
|
+
connection.disable_node_auto_discovery!
|
472
|
+
@@connections[keyspace] = connection
|
391
473
|
true
|
392
474
|
end
|
393
475
|
|
394
|
-
# Cassandra ring
|
476
|
+
# Cassandra ring
|
395
477
|
#
|
396
478
|
# === Return
|
397
479
|
# (Array):: Members of ring
|
@@ -422,7 +504,7 @@ module RightSupport::DB
|
|
422
504
|
self.class.insert(key, attributes)
|
423
505
|
true
|
424
506
|
end
|
425
|
-
|
507
|
+
|
426
508
|
# Load object from Cassandra without modifying this object
|
427
509
|
#
|
428
510
|
# === Return
|
@@ -146,6 +146,10 @@ module RightSupport::Net
|
|
146
146
|
# * :user and :password - for basic auth, will be replaced by a user/password available in the url
|
147
147
|
# * :raw_response - return a low-level RawResponse instead of a Response
|
148
148
|
# * :verify_ssl - enable ssl verification, possible values are constants from OpenSSL::SSL
|
149
|
+
# * OpenSSL::SSL::VERIFY_NONE (default)
|
150
|
+
# * OpenSSL::SSL::VERIFY_CLIENT_ONCE
|
151
|
+
# * OpenSSL::SSL::VERIFY_PEER
|
152
|
+
# * OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
|
149
153
|
# * :timeout and :open_timeout - specify overall request timeout + socket connect timeout
|
150
154
|
# * :ssl_client_cert, :ssl_client_key, :ssl_ca_file
|
151
155
|
#
|
@@ -103,10 +103,11 @@ module RightSupport::Rack
|
|
103
103
|
query_info,
|
104
104
|
remote_addr,
|
105
105
|
sess,
|
106
|
+
'Shard_id:' + (env['HTTP_X_SHARD'] || 'not set').to_s + ';',
|
106
107
|
env["rack.request_uuid"] || ''
|
107
108
|
]
|
108
109
|
|
109
|
-
logger.info %Q{Processing %s "%s%s" (for %s) %s
|
110
|
+
logger.info %Q{Processing %s "%s%s" (for %s) %s %s Request ID: %s} % params
|
110
111
|
end
|
111
112
|
|
112
113
|
# Log end of request
|
@@ -127,7 +128,7 @@ module RightSupport::Rack
|
|
127
128
|
else
|
128
129
|
'-'
|
129
130
|
end
|
130
|
-
|
131
|
+
|
131
132
|
params = [
|
132
133
|
duration,
|
133
134
|
status,
|
data/right_support.gemspec
CHANGED
@@ -7,8 +7,8 @@ spec = Gem::Specification.new do |s|
|
|
7
7
|
s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
8
8
|
|
9
9
|
s.name = 'right_support'
|
10
|
-
s.version = '2.0
|
11
|
-
s.date = '2012-
|
10
|
+
s.version = '2.1.0'
|
11
|
+
s.date = '2012-06-16'
|
12
12
|
|
13
13
|
s.authors = ['Tony Spataro', 'Sergey Sergyenko', 'Ryan Williamson', 'Lee Kirchhoff', 'Sergey Enin']
|
14
14
|
s.email = 'support@rightscale.com'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 11
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 2.0.4
|
10
|
+
version: 2.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tony Spataro
|
@@ -19,8 +19,7 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2012-
|
23
|
-
default_executable:
|
22
|
+
date: 2012-06-16 00:00:00 Z
|
24
23
|
dependencies: []
|
25
24
|
|
26
25
|
description: A toolkit of useful, reusable foundation code created by RightScale.
|
@@ -80,7 +79,6 @@ files:
|
|
80
79
|
- lib/right_support/validation/openssl.rb
|
81
80
|
- lib/right_support/validation/ssh.rb
|
82
81
|
- right_support.gemspec
|
83
|
-
has_rdoc: true
|
84
82
|
homepage: https://github.com/rightscale/right_support
|
85
83
|
licenses: []
|
86
84
|
|
@@ -112,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
110
|
requirements: []
|
113
111
|
|
114
112
|
rubyforge_project:
|
115
|
-
rubygems_version: 1.
|
113
|
+
rubygems_version: 1.8.24
|
116
114
|
signing_key:
|
117
115
|
specification_version: 3
|
118
116
|
summary: Reusable foundation code.
|