riak-client 0.9.8 → 1.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +32 -0
- data/Gemfile +17 -11
- data/Guardfile +14 -0
- data/Rakefile +18 -44
- data/erl_src/riak_kv_test_backend.beam +0 -0
- data/erl_src/riak_kv_test_backend.erl +461 -128
- data/erl_src/riak_search_test_backend.beam +0 -0
- data/erl_src/riak_search_test_backend.erl +175 -0
- data/lib/active_support/cache/riak_store.rb +0 -13
- data/lib/riak.rb +11 -16
- data/lib/riak/bucket.rb +59 -41
- data/lib/riak/cache_store.rb +1 -14
- data/lib/riak/client.rb +145 -73
- data/lib/riak/client/beefcake/messages.rb +36 -31
- data/lib/riak/client/beefcake/object_methods.rb +27 -19
- data/lib/riak/client/beefcake_protobuffs_backend.rb +27 -33
- data/lib/riak/client/excon_backend.rb +0 -13
- data/lib/riak/client/http_backend.rb +95 -60
- data/lib/riak/client/http_backend/configuration.rb +144 -19
- data/lib/riak/client/http_backend/key_streamer.rb +1 -14
- data/lib/riak/client/http_backend/object_methods.rb +16 -16
- data/lib/riak/client/http_backend/request_headers.rb +0 -13
- data/lib/riak/client/http_backend/transport_methods.rb +26 -56
- data/lib/riak/client/net_http_backend.rb +11 -13
- data/lib/riak/client/protobuffs_backend.rb +21 -19
- data/lib/riak/client/pump.rb +1 -15
- data/lib/riak/client/search.rb +85 -0
- data/lib/riak/cluster.rb +151 -0
- data/lib/riak/core_ext.rb +1 -0
- data/lib/riak/core_ext/deep_dup.rb +13 -0
- data/lib/riak/core_ext/json.rb +15 -0
- data/lib/riak/core_ext/stringify_keys.rb +1 -1
- data/lib/riak/core_ext/symbolize_keys.rb +1 -1
- data/lib/riak/encoding.rb +6 -0
- data/lib/riak/failed_request.rb +2 -15
- data/lib/riak/i18n.rb +0 -13
- data/lib/riak/json.rb +19 -8
- data/lib/riak/link.rb +18 -20
- data/lib/riak/locale/en.yml +13 -16
- data/lib/riak/map_reduce.rb +40 -20
- data/lib/riak/map_reduce/filter_builder.rb +14 -18
- data/lib/riak/map_reduce/phase.rb +0 -13
- data/lib/riak/map_reduce_error.rb +0 -13
- data/lib/riak/node.rb +38 -0
- data/lib/riak/node/configuration.rb +286 -0
- data/lib/riak/node/console.rb +139 -0
- data/lib/riak/node/control.rb +207 -0
- data/lib/riak/node/defaults.rb +70 -0
- data/lib/riak/node/generation.rb +99 -0
- data/lib/riak/node/log.rb +34 -0
- data/lib/riak/node/version.rb +37 -0
- data/lib/riak/robject.rb +45 -41
- data/lib/riak/search.rb +2 -161
- data/lib/riak/serializers.rb +74 -0
- data/lib/riak/stamp.rb +77 -0
- data/lib/riak/test_server.rb +56 -220
- data/lib/riak/util/escape.rb +58 -17
- data/lib/riak/util/headers.rb +2 -15
- data/lib/riak/util/multipart.rb +0 -13
- data/lib/riak/util/multipart/stream_parser.rb +0 -13
- data/lib/riak/util/tcp_socket_extensions.rb +1 -14
- data/lib/riak/util/translation.rb +0 -13
- data/lib/riak/version.rb +3 -0
- data/lib/riak/walk_spec.rb +0 -13
- data/riak-client.gemspec +27 -47
- data/spec/fixtures/multipart-with-marked-tombstones.txt +17 -0
- data/spec/fixtures/multipart-with-unmarked-tombstone.txt +16 -0
- data/spec/integration/riak/cache_store_spec.rb +2 -40
- data/spec/integration/riak/cluster_spec.rb +88 -0
- data/spec/integration/riak/http_backends_spec.rb +6 -30
- data/spec/integration/riak/node_spec.rb +184 -0
- data/spec/integration/riak/protobuffs_backends_spec.rb +2 -26
- data/spec/integration/riak/test_server_spec.rb +31 -167
- data/spec/riak/beefcake_protobuffs_backend_spec.rb +5 -4
- data/spec/riak/bucket_spec.rb +26 -36
- data/spec/riak/client_spec.rb +44 -38
- data/spec/riak/escape_spec.rb +56 -30
- data/spec/riak/excon_backend_spec.rb +4 -17
- data/spec/riak/headers_spec.rb +1 -14
- data/spec/riak/http_backend/configuration_spec.rb +211 -34
- data/spec/riak/http_backend/object_methods_spec.rb +52 -18
- data/spec/riak/http_backend/transport_methods_spec.rb +5 -38
- data/spec/riak/http_backend_spec.rb +84 -78
- data/spec/riak/link_spec.rb +19 -18
- data/spec/riak/map_reduce/filter_builder_spec.rb +1 -14
- data/spec/riak/map_reduce/phase_spec.rb +1 -14
- data/spec/riak/map_reduce_spec.rb +141 -43
- data/spec/riak/multipart_spec.rb +1 -14
- data/spec/riak/net_http_backend_spec.rb +2 -15
- data/spec/riak/robject_spec.rb +129 -97
- data/spec/riak/search_spec.rb +45 -62
- data/spec/riak/serializers_spec.rb +93 -0
- data/spec/riak/stamp_spec.rb +54 -0
- data/spec/riak/stream_parser_spec.rb +3 -16
- data/spec/riak/walk_spec_spec.rb +1 -14
- data/spec/spec_helper.rb +22 -27
- data/spec/support/http_backend_implementation_examples.rb +49 -79
- data/spec/support/integration_setup.rb +10 -0
- data/spec/support/mock_server.rb +0 -14
- data/spec/support/mocks.rb +0 -13
- data/spec/support/test_server.rb +30 -0
- data/spec/support/test_server.yml.example +14 -2
- data/spec/support/unified_backend_examples.rb +36 -27
- metadata +100 -31
- data/lib/riak/client/curb_backend.rb +0 -89
- data/spec/riak/curb_backend_spec.rb +0 -76
@@ -1,89 +0,0 @@
|
|
1
|
-
# Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'thread'
|
16
|
-
require 'riak/client/http_backend'
|
17
|
-
require 'riak/client/pump'
|
18
|
-
require 'riak/failed_request'
|
19
|
-
|
20
|
-
module Riak
|
21
|
-
class Client
|
22
|
-
# An HTTP backend for Riak::Client that uses the 'curb' library/gem.
|
23
|
-
# Conforms to the Riak::Client::HTTPBackend interface.
|
24
|
-
class CurbBackend < HTTPBackend
|
25
|
-
def self.configured?
|
26
|
-
begin
|
27
|
-
require 'curb'
|
28
|
-
true
|
29
|
-
rescue LoadError
|
30
|
-
false
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def perform(method, uri, headers, expect, data=nil, &block)
|
36
|
-
# Setup
|
37
|
-
curl.headers = RequestHeaders.new(headers).to_a
|
38
|
-
curl.url = uri.to_s
|
39
|
-
response_headers.initialize_http_header(nil)
|
40
|
-
if block_given?
|
41
|
-
curl.on_body(&Pump.new(block))
|
42
|
-
else
|
43
|
-
curl.on_body
|
44
|
-
end
|
45
|
-
# Perform
|
46
|
-
case method
|
47
|
-
when :post
|
48
|
-
data = data.read if data.respond_to?(:read)
|
49
|
-
curl.http_post(data)
|
50
|
-
when :put
|
51
|
-
# Hacks around limitations in curb's PUT semantics
|
52
|
-
_headers, curl.headers = curl.headers, {}
|
53
|
-
curl.put_data = data
|
54
|
-
curl.headers = RequestHeaders.new(curl.headers).to_a + _headers
|
55
|
-
curl.http("PUT")
|
56
|
-
else
|
57
|
-
curl.send("http_#{method}")
|
58
|
-
end
|
59
|
-
|
60
|
-
# Verify
|
61
|
-
if valid_response?(expect, curl.response_code)
|
62
|
-
result = { :headers => response_headers.to_hash, :code => curl.response_code.to_i }
|
63
|
-
if return_body?(method, curl.response_code, block_given?)
|
64
|
-
result[:body] = curl.body_str
|
65
|
-
end
|
66
|
-
result
|
67
|
-
else
|
68
|
-
raise HTTPFailedRequest.new(method, expect, curl.response_code, response_headers.to_hash, curl.body_str)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def curl
|
73
|
-
Thread.current[:curl_easy_handle] ||= Curl::Easy.new.tap do |c|
|
74
|
-
configure_ssl(c) if @client.ssl_enabled?
|
75
|
-
|
76
|
-
c.follow_location = false
|
77
|
-
c.on_header do |header_line|
|
78
|
-
response_headers.parse(header_line)
|
79
|
-
header_line.size
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def configure_ssl(curl)
|
85
|
-
curl.ssl_verify_peer = @client.ssl_options[:verify_mode] == "peer"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
require File.expand_path("../spec_helper", File.dirname(__FILE__))
|
15
|
-
|
16
|
-
begin
|
17
|
-
require 'curb'
|
18
|
-
rescue LoadError
|
19
|
-
warn "Skipping CurbBackend specs, curb library not found."
|
20
|
-
else
|
21
|
-
$mock_server = DrbMockServer
|
22
|
-
$mock_server.maybe_start
|
23
|
-
|
24
|
-
describe Riak::Client::CurbBackend do
|
25
|
-
def setup_http_mock(method, uri, options={})
|
26
|
-
method = method.to_s.upcase
|
27
|
-
uri = URI.parse(uri)
|
28
|
-
path = uri.path || "/"
|
29
|
-
query = uri.query || ""
|
30
|
-
status = options[:status] ? Array(options[:status]).first.to_i : 200
|
31
|
-
body = options[:body] || []
|
32
|
-
headers = options[:headers] || {}
|
33
|
-
headers['Content-Type'] ||= "text/plain"
|
34
|
-
@_mock_set = [status, headers, method, path, query, body]
|
35
|
-
$mock_server.expect(*@_mock_set)
|
36
|
-
end
|
37
|
-
|
38
|
-
before :each do
|
39
|
-
@client = Riak::Client.new(:http_port => $mock_server.port, :http_backend => :Curb) # Point to our mock
|
40
|
-
@backend = @client.http
|
41
|
-
@_mock_set = false
|
42
|
-
end
|
43
|
-
|
44
|
-
after :each do
|
45
|
-
if @_mock_set
|
46
|
-
$mock_server.satisfied.should be_true("Expected #{@_mock_set.inspect}, failed")
|
47
|
-
end
|
48
|
-
Thread.current[:curl_easy_handle] = nil
|
49
|
-
end
|
50
|
-
|
51
|
-
it_should_behave_like "HTTP backend"
|
52
|
-
|
53
|
-
it "should split long headers into 8KB chunks" do
|
54
|
-
setup_http_mock(:put, @backend.path("/riak/","foo").to_s, :body => "ok")
|
55
|
-
lambda do
|
56
|
-
@backend.put(200, "/riak/", "foo", "body",{"Long-Header" => (["12345678"*10]*100).join(", ") })
|
57
|
-
headers = @backend.send(:curl).headers
|
58
|
-
headers.should be_kind_of(Array)
|
59
|
-
headers.select {|h| h =~ /^Long-Header:/ }.should have(2).items
|
60
|
-
headers.select {|h| h =~ /^Long-Header:/ }.should be_all {|h| h.size < 8192 }
|
61
|
-
end.should_not raise_error
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should support IO objects as the request body" do
|
65
|
-
file = File.open(File.expand_path("../../fixtures/cat.jpg", __FILE__))
|
66
|
-
lambda do
|
67
|
-
setup_http_mock(:put, @backend.path("/riak/","foo").to_s, :body => "ok")
|
68
|
-
@backend.put(200, "/riak/", "foo", file,{})
|
69
|
-
end.should_not raise_error
|
70
|
-
lambda do
|
71
|
-
setup_http_mock(:post, @backend.path("/riak/","foo").to_s, :body => "ok")
|
72
|
-
@backend.post(200, "/riak/", "foo", file, {})
|
73
|
-
end.should_not raise_error
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|