right_support 2.0.4 → 2.1.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.
@@ -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.
|