riak-client 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.document +5 -5
  3. data/Gemfile +17 -17
  4. data/Guardfile +20 -20
  5. data/LICENSE.md +16 -16
  6. data/README.markdown +1 -1
  7. data/RELEASE_NOTES.md +9 -0
  8. data/lib/riak/client/beefcake/crdt/counter_loader.rb +18 -18
  9. data/lib/riak/client/beefcake/crdt/map_loader.rb +64 -64
  10. data/lib/riak/client/beefcake/footer +4 -4
  11. data/lib/riak/client/beefcake/header +6 -6
  12. data/lib/riak/client/beefcake/messages.rb +0 -16
  13. data/lib/riak/client/decaying.rb +36 -36
  14. data/lib/riak/client/feature_detection.rb +120 -120
  15. data/lib/riak/client/instrumentation.rb +19 -19
  16. data/lib/riak/client/node.rb +49 -49
  17. data/lib/riak/client/search.rb +27 -27
  18. data/lib/riak/conflict.rb +13 -13
  19. data/lib/riak/core_ext.rb +7 -7
  20. data/lib/riak/core_ext/blank.rb +53 -53
  21. data/lib/riak/core_ext/extract_options.rb +7 -7
  22. data/lib/riak/core_ext/json.rb +15 -15
  23. data/lib/riak/core_ext/slice.rb +18 -18
  24. data/lib/riak/core_ext/stringify_keys.rb +10 -10
  25. data/lib/riak/core_ext/symbolize_keys.rb +10 -10
  26. data/lib/riak/core_ext/to_param.rb +31 -31
  27. data/lib/riak/crdt.rb +21 -21
  28. data/lib/riak/crdt/operation.rb +19 -19
  29. data/lib/riak/encoding.rb +6 -6
  30. data/lib/riak/errors/backend_creation.rb +9 -9
  31. data/lib/riak/errors/connection_error.rb +50 -50
  32. data/lib/riak/errors/protobuffs_error.rb +11 -11
  33. data/lib/riak/i18n.rb +7 -7
  34. data/lib/riak/instrumentation.rb +6 -6
  35. data/lib/riak/json.rb +52 -52
  36. data/lib/riak/list_buckets.rb +28 -28
  37. data/lib/riak/locale/fr.yml +51 -51
  38. data/lib/riak/map_reduce/results.rb +49 -49
  39. data/lib/riak/map_reduce_error.rb +7 -7
  40. data/lib/riak/multiget.rb +122 -122
  41. data/lib/riak/stamp.rb +77 -77
  42. data/lib/riak/util/tcp_socket_extensions.rb +58 -58
  43. data/lib/riak/version.rb +1 -1
  44. data/spec/failover/failover.rb +59 -59
  45. data/spec/fixtures/bitcask.txt +25 -25
  46. data/spec/fixtures/multipart-basic-conflict.txt +15 -15
  47. data/spec/fixtures/multipart-blank.txt +7 -7
  48. data/spec/fixtures/multipart-mapreduce.txt +10 -10
  49. data/spec/fixtures/multipart-with-body.txt +16 -16
  50. data/spec/fixtures/multipart-with-marked-tombstones.txt +17 -17
  51. data/spec/fixtures/multipart-with-unmarked-tombstone.txt +16 -16
  52. data/spec/fixtures/server.cert.crt +15 -15
  53. data/spec/fixtures/server.cert.key +15 -15
  54. data/spec/fixtures/test.pem +1 -1
  55. data/spec/integration/riak/threading_spec.rb +150 -150
  56. data/spec/integration/yokozuna/index_spec.rb +61 -61
  57. data/spec/integration/yokozuna/schema_spec.rb +49 -49
  58. data/spec/riak/core_ext/to_param_spec.rb +15 -15
  59. data/spec/riak/crdt/inner_counter_spec.rb +21 -21
  60. data/spec/riak/crdt/inner_set_spec.rb +33 -33
  61. data/spec/riak/crdt/set_spec.rb +61 -61
  62. data/spec/riak/escape_spec.rb +72 -72
  63. data/spec/riak/feature_detection_spec.rb +77 -77
  64. data/spec/riak/index_collection_spec.rb +53 -53
  65. data/spec/riak/instrumentation_spec.rb +124 -124
  66. data/spec/riak/link_spec.rb +85 -85
  67. data/spec/riak/list_buckets_spec.rb +41 -41
  68. data/spec/riak/node_spec.rb +26 -26
  69. data/spec/riak/stamp_spec.rb +54 -54
  70. data/spec/support/certs/README.md +12 -12
  71. data/spec/support/certs/ca.crt +21 -21
  72. data/spec/support/certs/client.crl +13 -13
  73. data/spec/support/certs/client.crt +94 -94
  74. data/spec/support/certs/client.csr +18 -18
  75. data/spec/support/certs/client.key +27 -27
  76. data/spec/support/certs/empty_ca.crt +21 -21
  77. data/spec/support/certs/server.crl +13 -13
  78. data/spec/support/certs/server.crt +94 -94
  79. data/spec/support/certs/server.key +27 -27
  80. data/spec/support/integration_setup.rb +10 -10
  81. data/spec/support/test_client.yml.example +9 -9
  82. metadata +3 -3
@@ -1,61 +1,61 @@
1
- require 'spec_helper'
2
- require 'riak'
3
-
4
- describe "Yokozuna", test_client: true, integration: true do
5
- before(:all) do
6
- @client = test_client
7
-
8
- @index = 'yz_spec-' + random_key
9
- @schema = 'yz_spec-' + random_key
10
- end
11
-
12
- context "without any indexes" do
13
- it "allows index creation" do
14
- expect(@client.create_search_index(@index, "_yz_default", 3)).to eq(true)
15
- end
16
- end
17
-
18
- context "with an index" do
19
- before :all do
20
- expect(@client.create_search_index(@index)).to eq(true)
21
- wait_until{ !@client.get_search_index(@index).nil? }
22
- end
23
-
24
- it "allows index inspection" do
25
- expect(@client.get_search_index(@index).name).to eq(@index)
26
- expect{ @client.get_search_index("herp_derp") }.to raise_error(Riak::ProtobuffsFailedRequest)
27
- end
28
-
29
- it "has an index list" do
30
- expect(@client.list_search_indexes.size).to be >= 1
31
- end
32
-
33
- it "associates a bucket with an index" do
34
- @bucket = Riak::Bucket.new(@client, @index)
35
- @bucket.props = {'search_index' => @index}
36
- @bucket = @client.bucket(@index)
37
- expect(@bucket.props).to include('search_index' => @index)
38
- end
39
-
40
- context "associated with a bucket" do
41
- before :all do
42
- @bucket = Riak::Bucket.new(@client, @index)
43
- @bucket.props = {'search_index' => @index}
44
- @bucket = @client.bucket(@index)
45
- expect(@bucket.props).to include('search_index' => @index)
46
- end
47
-
48
- it "indexes on object writes" do
49
- object = @bucket.get_or_new("cat")
50
- object.raw_data = {"cat_s"=>"Lela"}.to_json
51
- object.content_type = 'application/json'
52
- object.store
53
- sleep 1.1 # pause for index commit to trigger
54
-
55
- resp = @client.search(@index, "cat_s:Lela")
56
- expect(resp).to include('docs')
57
- expect(resp['docs'].size).to eq(1)
58
- end
59
- end
60
- end
61
- end
1
+ require 'spec_helper'
2
+ require 'riak'
3
+
4
+ describe "Yokozuna", test_client: true, integration: true do
5
+ before(:all) do
6
+ @client = test_client
7
+
8
+ @index = 'yz_spec-' + random_key
9
+ @schema = 'yz_spec-' + random_key
10
+ end
11
+
12
+ context "without any indexes" do
13
+ it "allows index creation" do
14
+ expect(@client.create_search_index(@index, "_yz_default", 3)).to eq(true)
15
+ end
16
+ end
17
+
18
+ context "with an index" do
19
+ before :all do
20
+ expect(@client.create_search_index(@index)).to eq(true)
21
+ wait_until{ !@client.get_search_index(@index).nil? }
22
+ end
23
+
24
+ it "allows index inspection" do
25
+ expect(@client.get_search_index(@index).name).to eq(@index)
26
+ expect{ @client.get_search_index("herp_derp") }.to raise_error(Riak::ProtobuffsFailedRequest)
27
+ end
28
+
29
+ it "has an index list" do
30
+ expect(@client.list_search_indexes.size).to be >= 1
31
+ end
32
+
33
+ it "associates a bucket with an index" do
34
+ @bucket = Riak::Bucket.new(@client, @index)
35
+ @bucket.props = {'search_index' => @index}
36
+ @bucket = @client.bucket(@index)
37
+ expect(@bucket.props).to include('search_index' => @index)
38
+ end
39
+
40
+ context "associated with a bucket" do
41
+ before :all do
42
+ @bucket = Riak::Bucket.new(@client, @index)
43
+ @bucket.props = {'search_index' => @index}
44
+ @bucket = @client.bucket(@index)
45
+ expect(@bucket.props).to include('search_index' => @index)
46
+ end
47
+
48
+ it "indexes on object writes" do
49
+ object = @bucket.get_or_new("cat")
50
+ object.raw_data = {"cat_s"=>"Lela"}.to_json
51
+ object.content_type = 'application/json'
52
+ object.store
53
+ sleep 1.1 # pause for index commit to trigger
54
+
55
+ resp = @client.search(@index, "cat_s:Lela")
56
+ expect(resp).to include('docs')
57
+ expect(resp['docs'].size).to eq(1)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,49 +1,49 @@
1
- require 'spec_helper'
2
- require 'riak'
3
-
4
- describe "Yokozuna", test_client: true, integration: true do
5
- before(:all) do
6
- @client = test_client
7
-
8
- @index = 'yz_spec-' + random_key
9
- @schema = 'yz_spec-' + random_key
10
- end
11
-
12
- context 'with no schema' do
13
- it 'allows schema creation' do
14
- @client.create_search_schema(@schema, SCHEMA_CONTENT)
15
- wait_until{ !@client.get_search_schema(@schema).nil? }
16
- expect(@client.get_search_schema(@schema)).not_to be_nil
17
- end
18
- end
19
- context 'with a schema' do
20
- it 'has a readable schema' do
21
- @client.create_search_schema(@schema, SCHEMA_CONTENT)
22
- wait_until{ !@client.get_search_schema(@schema).nil? }
23
- schema_resp = @client.get_search_schema(@schema)
24
- expect(schema_resp.name).to eq(@schema)
25
- expect(schema_resp.content).to eq(SCHEMA_CONTENT)
26
- end
27
- end
28
-
29
- SCHEMA_CONTENT = <<-XML
30
- <?xml version=\"1.0\" encoding=\"UTF-8\" ?>
31
- <schema name=\"#{@index}\" version=\"1.5\">
32
- <fields>
33
- <field name=\"_yz_id\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\" required=\"true\" />
34
- <field name=\"_yz_ed\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
35
- <field name=\"_yz_pn\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
36
- <field name=\"_yz_fpn\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
37
- <field name=\"_yz_vtag\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
38
- <field name=\"_yz_rk\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
39
- <field name=\"_yz_rb\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
40
- <field name=\"_yz_rt\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
41
- <field name=\"_yz_err\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
42
- </fields>
43
- <uniqueKey>_yz_id</uniqueKey>
44
- <types>
45
- <fieldType name=\"_yz_str\" class=\"solr.StrField\" sortMissingLast=\"true\" />
46
- </types>
47
- </schema>
48
- XML
49
- end
1
+ require 'spec_helper'
2
+ require 'riak'
3
+
4
+ describe "Yokozuna", test_client: true, integration: true do
5
+ before(:all) do
6
+ @client = test_client
7
+
8
+ @index = 'yz_spec-' + random_key
9
+ @schema = 'yz_spec-' + random_key
10
+ end
11
+
12
+ context 'with no schema' do
13
+ it 'allows schema creation' do
14
+ @client.create_search_schema(@schema, SCHEMA_CONTENT)
15
+ wait_until{ !@client.get_search_schema(@schema).nil? }
16
+ expect(@client.get_search_schema(@schema)).not_to be_nil
17
+ end
18
+ end
19
+ context 'with a schema' do
20
+ it 'has a readable schema' do
21
+ @client.create_search_schema(@schema, SCHEMA_CONTENT)
22
+ wait_until{ !@client.get_search_schema(@schema).nil? }
23
+ schema_resp = @client.get_search_schema(@schema)
24
+ expect(schema_resp.name).to eq(@schema)
25
+ expect(schema_resp.content).to eq(SCHEMA_CONTENT)
26
+ end
27
+ end
28
+
29
+ SCHEMA_CONTENT = <<-XML
30
+ <?xml version=\"1.0\" encoding=\"UTF-8\" ?>
31
+ <schema name=\"#{@index}\" version=\"1.5\">
32
+ <fields>
33
+ <field name=\"_yz_id\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\" required=\"true\" />
34
+ <field name=\"_yz_ed\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
35
+ <field name=\"_yz_pn\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
36
+ <field name=\"_yz_fpn\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
37
+ <field name=\"_yz_vtag\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
38
+ <field name=\"_yz_rk\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
39
+ <field name=\"_yz_rb\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
40
+ <field name=\"_yz_rt\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
41
+ <field name=\"_yz_err\" type=\"_yz_str\" indexed=\"true\" stored=\"true\" multiValued=\"false\"/>
42
+ </fields>
43
+ <uniqueKey>_yz_id</uniqueKey>
44
+ <types>
45
+ <fieldType name=\"_yz_str\" class=\"solr.StrField\" sortMissingLast=\"true\" />
46
+ </types>
47
+ </schema>
48
+ XML
49
+ end
@@ -1,15 +1,15 @@
1
-
2
- describe Riak do
3
- require 'riak/core_ext/to_param'
4
-
5
- it "converts params correctly" do
6
- expect({ :name => 'David', :nationality => 'Danish' }.to_param).to eq("name=David&nationality=Danish")
7
- end
8
-
9
- # Based on the activesupport implementation.
10
- # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/to_param.rb
11
- it "converts namespaced params correctly" do
12
- expect({ :name => 'David', :nationality => 'Danish' }.to_param('user')).to eq("user%5Bname%5D=David&user%5Bnationality%5D=Danish")
13
- end
14
-
15
- end
1
+
2
+ describe Riak do
3
+ require 'riak/core_ext/to_param'
4
+
5
+ it "converts params correctly" do
6
+ expect({ :name => 'David', :nationality => 'Danish' }.to_param).to eq("name=David&nationality=Danish")
7
+ end
8
+
9
+ # Based on the activesupport implementation.
10
+ # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/to_param.rb
11
+ it "converts namespaced params correctly" do
12
+ expect({ :name => 'David', :nationality => 'Danish' }.to_param('user')).to eq("user%5Bname%5D=David&user%5Bnationality%5D=Danish")
13
+ end
14
+
15
+ end
@@ -1,21 +1,21 @@
1
- require 'spec_helper'
2
- require_relative 'shared_examples'
3
-
4
- describe Riak::Crdt::InnerCounter do
5
- let(:parent){ double 'parent' }
6
- let(:counter_name){ 'counter name' }
7
- subject do
8
- described_class.new(parent, 0).tap do |c|
9
- c.name = counter_name
10
- end
11
- end
12
-
13
- include_examples 'Counter CRDT'
14
-
15
- it 'sends increments to the parent' do
16
- expect(parent).to receive(:increment).
17
- with(counter_name, 1)
18
-
19
- subject.increment
20
- end
21
- end
1
+ require 'spec_helper'
2
+ require_relative 'shared_examples'
3
+
4
+ describe Riak::Crdt::InnerCounter do
5
+ let(:parent){ double 'parent' }
6
+ let(:counter_name){ 'counter name' }
7
+ subject do
8
+ described_class.new(parent, 0).tap do |c|
9
+ c.name = counter_name
10
+ end
11
+ end
12
+
13
+ include_examples 'Counter CRDT'
14
+
15
+ it 'sends increments to the parent' do
16
+ expect(parent).to receive(:increment).
17
+ with(counter_name, 1)
18
+
19
+ subject.increment
20
+ end
21
+ end
@@ -1,33 +1,33 @@
1
- require 'spec_helper'
2
- require_relative 'shared_examples'
3
-
4
- describe Riak::Crdt::InnerSet do
5
- let(:parent){ double 'parent' }
6
- let(:set_name){ 'set name' }
7
- subject do
8
- described_class.new(parent, []).tap do |s|
9
- s.name = set_name
10
- end
11
- end
12
-
13
- include_examples 'Set CRDT'
14
-
15
- it 'sends additions to the parent' do
16
- expect(parent).to receive(:operate) do |name, op|
17
- expect(name).to eq set_name
18
- expect(op.type).to eq :set
19
- expect(op.value).to eq add: 'el'
20
- end
21
-
22
- subject.add 'el'
23
-
24
- expect(parent).to receive(:operate) do |name, op|
25
- expect(name).to eq set_name
26
- expect(op.type).to eq :set
27
- expect(op.value).to eq remove: 'el2'
28
- end
29
- allow(parent).to receive(:context?).and_return(true)
30
-
31
- subject.remove 'el2'
32
- end
33
- end
1
+ require 'spec_helper'
2
+ require_relative 'shared_examples'
3
+
4
+ describe Riak::Crdt::InnerSet do
5
+ let(:parent){ double 'parent' }
6
+ let(:set_name){ 'set name' }
7
+ subject do
8
+ described_class.new(parent, []).tap do |s|
9
+ s.name = set_name
10
+ end
11
+ end
12
+
13
+ include_examples 'Set CRDT'
14
+
15
+ it 'sends additions to the parent' do
16
+ expect(parent).to receive(:operate) do |name, op|
17
+ expect(name).to eq set_name
18
+ expect(op.type).to eq :set
19
+ expect(op.value).to eq add: 'el'
20
+ end
21
+
22
+ subject.add 'el'
23
+
24
+ expect(parent).to receive(:operate) do |name, op|
25
+ expect(name).to eq set_name
26
+ expect(op.type).to eq :set
27
+ expect(op.value).to eq remove: 'el2'
28
+ end
29
+ allow(parent).to receive(:context?).and_return(true)
30
+
31
+ subject.remove 'el2'
32
+ end
33
+ end
@@ -1,61 +1,61 @@
1
- require 'spec_helper'
2
- require_relative 'shared_examples'
3
-
4
- describe Riak::Crdt::Set do
5
- let(:bucket) do
6
- double('bucket').tap do |b|
7
- allow(b).to receive(:name).and_return('bucket')
8
- allow(b).to receive(:is_a?).with(Riak::Bucket).and_return(true)
9
- allow(b).to receive(:is_a?).with(Riak::BucketTyped::Bucket).and_return(false)
10
- end
11
- end
12
-
13
- it 'initializes with bucket, key, and optional bucket-type' do
14
- expect{described_class.new bucket, 'key', 'optional bucket type'}.
15
- to_not raise_error
16
- end
17
-
18
- subject{ described_class.new bucket, 'key' }
19
-
20
- describe 'with a client' do
21
- let(:response){ double 'response', key: nil }
22
- let(:operator){ double 'operator' }
23
- let(:loader){ double 'loader', get_loader_for_value: nil }
24
- let(:backend){ double 'backend' }
25
- let(:client){ double 'client' }
26
-
27
- before(:each) do
28
- allow(bucket).to receive(:client).and_return(client)
29
- allow(client).to receive(:backend).and_yield(backend)
30
- allow(backend).to receive(:crdt_operator).and_return(operator)
31
- allow(backend).to receive(:crdt_loader).and_return(loader)
32
- end
33
-
34
- include_examples 'Set CRDT'
35
-
36
- it 'batches properly' do
37
- expect(operator).
38
- to receive(:operate) { |bucket, key, type, operations|
39
-
40
- expect(bucket).to eq bucket
41
- expect(key).to eq 'key'
42
- expect(type).to eq subject.bucket_type
43
-
44
- expect(operations).to be_a Riak::Crdt::Operation::Update
45
- expect(operations.value).to eq({
46
- add: %w{alpha bravo},
47
- remove: %w{foxtrot}
48
- })
49
- }.
50
- and_return(response)
51
-
52
- subject.instance_variable_set :@context, 'placeholder'
53
-
54
- subject.batch do |s|
55
- s.add 'alpha'
56
- s.add 'bravo'
57
- s.remove 'foxtrot'
58
- end
59
- end
60
- end
61
- end
1
+ require 'spec_helper'
2
+ require_relative 'shared_examples'
3
+
4
+ describe Riak::Crdt::Set do
5
+ let(:bucket) do
6
+ double('bucket').tap do |b|
7
+ allow(b).to receive(:name).and_return('bucket')
8
+ allow(b).to receive(:is_a?).with(Riak::Bucket).and_return(true)
9
+ allow(b).to receive(:is_a?).with(Riak::BucketTyped::Bucket).and_return(false)
10
+ end
11
+ end
12
+
13
+ it 'initializes with bucket, key, and optional bucket-type' do
14
+ expect{described_class.new bucket, 'key', 'optional bucket type'}.
15
+ to_not raise_error
16
+ end
17
+
18
+ subject{ described_class.new bucket, 'key' }
19
+
20
+ describe 'with a client' do
21
+ let(:response){ double 'response', key: nil }
22
+ let(:operator){ double 'operator' }
23
+ let(:loader){ double 'loader', get_loader_for_value: nil }
24
+ let(:backend){ double 'backend' }
25
+ let(:client){ double 'client' }
26
+
27
+ before(:each) do
28
+ allow(bucket).to receive(:client).and_return(client)
29
+ allow(client).to receive(:backend).and_yield(backend)
30
+ allow(backend).to receive(:crdt_operator).and_return(operator)
31
+ allow(backend).to receive(:crdt_loader).and_return(loader)
32
+ end
33
+
34
+ include_examples 'Set CRDT'
35
+
36
+ it 'batches properly' do
37
+ expect(operator).
38
+ to receive(:operate) { |bucket, key, type, operations|
39
+
40
+ expect(bucket).to eq bucket
41
+ expect(key).to eq 'key'
42
+ expect(type).to eq subject.bucket_type
43
+
44
+ expect(operations).to be_a Riak::Crdt::Operation::Update
45
+ expect(operations.value).to eq({
46
+ add: %w{alpha bravo},
47
+ remove: %w{foxtrot}
48
+ })
49
+ }.
50
+ and_return(response)
51
+
52
+ subject.instance_variable_set :@context, 'placeholder'
53
+
54
+ subject.batch do |s|
55
+ s.add 'alpha'
56
+ s.add 'bravo'
57
+ s.remove 'foxtrot'
58
+ end
59
+ end
60
+ end
61
+ end