better-riak-client 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +16 -0
- data/README.markdown +198 -0
- data/RELEASE_NOTES.md +211 -0
- data/better-riak-client.gemspec +61 -0
- data/erl_src/riak_kv_test014_backend.beam +0 -0
- data/erl_src/riak_kv_test014_backend.erl +189 -0
- data/erl_src/riak_kv_test_backend.beam +0 -0
- data/erl_src/riak_kv_test_backend.erl +697 -0
- data/erl_src/riak_search_test_backend.beam +0 -0
- data/erl_src/riak_search_test_backend.erl +175 -0
- data/lib/riak/bucket.rb +221 -0
- data/lib/riak/client/beefcake/messages.rb +213 -0
- data/lib/riak/client/beefcake/object_methods.rb +111 -0
- data/lib/riak/client/beefcake_protobuffs_backend.rb +226 -0
- data/lib/riak/client/decaying.rb +36 -0
- data/lib/riak/client/excon_backend.rb +162 -0
- data/lib/riak/client/feature_detection.rb +88 -0
- data/lib/riak/client/http_backend/configuration.rb +211 -0
- data/lib/riak/client/http_backend/key_streamer.rb +43 -0
- data/lib/riak/client/http_backend/object_methods.rb +106 -0
- data/lib/riak/client/http_backend/request_headers.rb +34 -0
- data/lib/riak/client/http_backend/transport_methods.rb +201 -0
- data/lib/riak/client/http_backend.rb +340 -0
- data/lib/riak/client/net_http_backend.rb +82 -0
- data/lib/riak/client/node.rb +115 -0
- data/lib/riak/client/protobuffs_backend.rb +173 -0
- data/lib/riak/client/search.rb +91 -0
- data/lib/riak/client.rb +540 -0
- data/lib/riak/cluster.rb +151 -0
- data/lib/riak/core_ext/blank.rb +53 -0
- data/lib/riak/core_ext/deep_dup.rb +13 -0
- data/lib/riak/core_ext/extract_options.rb +7 -0
- data/lib/riak/core_ext/json.rb +15 -0
- data/lib/riak/core_ext/slice.rb +18 -0
- data/lib/riak/core_ext/stringify_keys.rb +10 -0
- data/lib/riak/core_ext/symbolize_keys.rb +10 -0
- data/lib/riak/core_ext/to_param.rb +31 -0
- data/lib/riak/core_ext.rb +7 -0
- data/lib/riak/encoding.rb +6 -0
- data/lib/riak/failed_request.rb +81 -0
- data/lib/riak/i18n.rb +5 -0
- data/lib/riak/json.rb +52 -0
- data/lib/riak/link.rb +94 -0
- data/lib/riak/locale/en.yml +53 -0
- data/lib/riak/locale/fr.yml +52 -0
- data/lib/riak/map_reduce/filter_builder.rb +103 -0
- data/lib/riak/map_reduce/phase.rb +98 -0
- data/lib/riak/map_reduce.rb +225 -0
- data/lib/riak/map_reduce_error.rb +7 -0
- data/lib/riak/node/configuration.rb +293 -0
- data/lib/riak/node/console.rb +133 -0
- data/lib/riak/node/control.rb +207 -0
- data/lib/riak/node/defaults.rb +83 -0
- data/lib/riak/node/generation.rb +106 -0
- data/lib/riak/node/log.rb +34 -0
- data/lib/riak/node/version.rb +43 -0
- data/lib/riak/node.rb +38 -0
- data/lib/riak/robject.rb +318 -0
- data/lib/riak/search.rb +3 -0
- data/lib/riak/serializers.rb +74 -0
- data/lib/riak/stamp.rb +77 -0
- data/lib/riak/test_server.rb +89 -0
- data/lib/riak/util/escape.rb +76 -0
- data/lib/riak/util/headers.rb +53 -0
- data/lib/riak/util/multipart/stream_parser.rb +62 -0
- data/lib/riak/util/multipart.rb +52 -0
- data/lib/riak/util/tcp_socket_extensions.rb +58 -0
- data/lib/riak/util/translation.rb +19 -0
- data/lib/riak/version.rb +3 -0
- data/lib/riak/walk_spec.rb +105 -0
- data/lib/riak.rb +21 -0
- metadata +348 -0
data/LICENSE
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Copyright 2010-2011 Sean Cribbs 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
|
+
All of the files in this project are under the project-wide license
|
16
|
+
unless they are otherwise marked.
|
data/README.markdown
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
# Better Riak Client (better-riak-client)
|
2
|
+
|
3
|
+
`better-riak-client` is an improved version of `riak-ruby-client`, the official
|
4
|
+
Ruby client/toolkit for Riak, Basho's distributed database that contains a
|
5
|
+
basic wrapper around typical operations, including bucket manipulation, object
|
6
|
+
CRUD, link-walking, and map-reduce.
|
7
|
+
|
8
|
+
|
9
|
+
## Improvements vs. riak-ruby-client
|
10
|
+
|
11
|
+
To date, the improvements include:
|
12
|
+
|
13
|
+
* Produce a much smaller .gem file. (84KiB instead of 17MiB!)
|
14
|
+
* Allow you to verify that the SSL certificate received from Riak is not simply
|
15
|
+
valid but is in fact the expected certificate. (This functionality exists in
|
16
|
+
riak-ruby-client but is broken.)
|
17
|
+
|
18
|
+
We will be tracking upstream changes, and including them as appropriate.
|
19
|
+
|
20
|
+
Release 1.0.5 corresponds to `riak-ruby-client` v.1.0.4, plus changes on
|
21
|
+
`master` as of 2012-10-09. See `RELEASE_NOTES.md` for details.
|
22
|
+
|
23
|
+
|
24
|
+
## Dependencies
|
25
|
+
|
26
|
+
`better-riak-client` requires `i18n`, `builder`, `beefcake`, and `multi_json`.
|
27
|
+
For higher performance on HTTP requests, install the `excon` gem. The
|
28
|
+
cache store implementation requires ActiveSupport 3 or later.
|
29
|
+
|
30
|
+
Development dependencies are handled with bundler. Install bundler
|
31
|
+
(`gem install bundler`) and run this command in each sub-project to
|
32
|
+
get started:
|
33
|
+
|
34
|
+
``` bash
|
35
|
+
$ bundle install
|
36
|
+
```
|
37
|
+
|
38
|
+
Run the RSpec suite using `bundle exec`:
|
39
|
+
|
40
|
+
``` bash
|
41
|
+
$ bundle exec rake
|
42
|
+
```
|
43
|
+
|
44
|
+
|
45
|
+
## Basic Example
|
46
|
+
|
47
|
+
``` ruby
|
48
|
+
require 'riak'
|
49
|
+
|
50
|
+
# Create a client interface
|
51
|
+
client = Riak::Client.new
|
52
|
+
|
53
|
+
# Create a client interface that uses Excon
|
54
|
+
client = Riak::Client.new(:http_backend => :Excon)
|
55
|
+
|
56
|
+
# Create a client that uses Protocol Buffers
|
57
|
+
client = Riak::Client.new(:protocol => "pbc")
|
58
|
+
|
59
|
+
# Automatically balance between multiple nodes
|
60
|
+
client = Riak::Client.new(:nodes => [
|
61
|
+
{:host => '10.0.0.1'},
|
62
|
+
{:host => '10.0.0.2', :pb_port => 1234},
|
63
|
+
{:host => '10.0.0.3', :http_port => 5678}
|
64
|
+
])
|
65
|
+
|
66
|
+
# Retrieve a bucket
|
67
|
+
bucket = client.bucket("doc") # a Riak::Bucket
|
68
|
+
|
69
|
+
# Get an object from the bucket
|
70
|
+
object = bucket.get_or_new("index.html") # a Riak::RObject
|
71
|
+
|
72
|
+
# Change the object's data and save
|
73
|
+
object.raw_data = "<html><body>Hello, world!</body></html>"
|
74
|
+
object.content_type = "text/html"
|
75
|
+
object.store
|
76
|
+
|
77
|
+
# Reload an object you already have
|
78
|
+
object.reload # Works if you have the key and vclock, using conditional GET
|
79
|
+
object.reload :force => true # Reloads whether you have the vclock or not
|
80
|
+
|
81
|
+
# Access more like a hash, client[bucket][key]
|
82
|
+
client['doc']['index.html'] # the Riak::RObject
|
83
|
+
|
84
|
+
# Create a new object
|
85
|
+
new_one = Riak::RObject.new(bucket, "application.js")
|
86
|
+
new_one.content_type = "application/javascript" # You must set the content type.
|
87
|
+
new_one.raw_data = "alert('Hello, World!')"
|
88
|
+
new_one.store
|
89
|
+
```
|
90
|
+
|
91
|
+
|
92
|
+
## Map-Reduce Example
|
93
|
+
|
94
|
+
``` ruby
|
95
|
+
# Assuming you've already instantiated a client, get the album titles for The Beatles
|
96
|
+
results = Riak::MapReduce.new(client).
|
97
|
+
add("artists","Beatles").
|
98
|
+
link(:bucket => "albums").
|
99
|
+
map("function(v){ return [JSON.parse(v.values[0].data).title]; }", :keep => true).run
|
100
|
+
|
101
|
+
p results # => ["Please Please Me", "With The Beatles", "A Hard Day's Night",
|
102
|
+
# "Beatles For Sale", "Help!", "Rubber Soul",
|
103
|
+
# "Revolver", "Sgt. Pepper's Lonely Hearts Club Band", "Magical Mystery Tour",
|
104
|
+
# "The Beatles", "Yellow Submarine", "Abbey Road", "Let It Be"]
|
105
|
+
```
|
106
|
+
|
107
|
+
|
108
|
+
## Riak Search Examples
|
109
|
+
|
110
|
+
For more information about Riak Search, see [the Basho wiki](http://wiki.basho.com/Riak-Search.html).
|
111
|
+
|
112
|
+
``` ruby
|
113
|
+
# Create a client, specifying the Solr-compatible endpoint
|
114
|
+
# When connecting to Riak 0.14 and later, the Solr endpoint configuration option is not necessary.
|
115
|
+
client = Riak::Client.new :solr => "/solr"
|
116
|
+
|
117
|
+
# Search the default index for documents
|
118
|
+
result = client.search("title:Yesterday") # Returns a vivified JSON object
|
119
|
+
# containing 'responseHeaders' and 'response' keys
|
120
|
+
result['response']['numFound'] # total number of results
|
121
|
+
result['response']['start'] # offset into the total result set
|
122
|
+
result['response']['docs'] # the list of indexed documents
|
123
|
+
|
124
|
+
# Search the 'users' index for documents
|
125
|
+
client.search("users", "name:Sean")
|
126
|
+
|
127
|
+
# Add a document to an index
|
128
|
+
client.index("users", {:id => "sean@basho.com", :name => "Sean Cribbs"}) # adds to the 'users' index
|
129
|
+
|
130
|
+
client.index({:id => "index.html", :content => "Hello, world!"}) # adds to the default index
|
131
|
+
|
132
|
+
client.index({:id => 1, :name => "one"}, {:id => 2, :name => "two"}) # adds multiple docs
|
133
|
+
|
134
|
+
# Remove document(s) from an index
|
135
|
+
client.remove({:id => 1}) # removes the document with ID 1
|
136
|
+
client.remove({:query => "archived"}) # removes all documents matching query
|
137
|
+
client.remove({:id => 1}, {:id => 5}) # removes multiple docs
|
138
|
+
|
139
|
+
client.remove("users", {:id => "sean@basho.com"}) # removes from the 'users' index
|
140
|
+
|
141
|
+
# Seed MapReduce with search results
|
142
|
+
Riak::MapReduce.new(client).
|
143
|
+
search("users","email:basho").
|
144
|
+
map("Riak.mapValuesJson", :keep => true).
|
145
|
+
run
|
146
|
+
|
147
|
+
# Detect whether a bucket has auto-indexing
|
148
|
+
client['users'].is_indexed?
|
149
|
+
|
150
|
+
# Enable auto-indexing on a bucket
|
151
|
+
client['users'].enable_index!
|
152
|
+
|
153
|
+
# Disable auto-indexing on a bucket
|
154
|
+
client['users'].disable_index!
|
155
|
+
```
|
156
|
+
|
157
|
+
|
158
|
+
## How to Contribute
|
159
|
+
|
160
|
+
* Fork the project on [Github](http://github.com/cloudability/better-riak-client). If you have already forked, use `git pull --rebase` to reapply your changes on top of the mainline. Example:
|
161
|
+
|
162
|
+
``` bash
|
163
|
+
$ git checkout master
|
164
|
+
$ git pull --rebase cloudability master
|
165
|
+
```
|
166
|
+
* Create a topic branch. If you've already created a topic branch, rebase it on top of changes from the mainline "master" branch. Examples:
|
167
|
+
* New branch:
|
168
|
+
|
169
|
+
``` bash
|
170
|
+
$ git checkout -b topic
|
171
|
+
```
|
172
|
+
* Existing branch:
|
173
|
+
|
174
|
+
``` bash
|
175
|
+
$ git rebase master
|
176
|
+
```
|
177
|
+
* Write an RSpec example or set of examples that demonstrate the necessity and validity of your changes. **Patches without specs will most often be ignored. Just do it, you'll thank me later.** Documentation patches need no specs, of course.
|
178
|
+
* Make your feature addition or bug fix. Make your specs and stories pass (green).
|
179
|
+
* Run the suite using multiruby or rvm to ensure cross-version compatibility.
|
180
|
+
* Cleanup any trailing whitespace in your code (try @whitespace-mode@ in Emacs, or "Remove Trailing Spaces in Document" in the "Text" bundle in Textmate). You can use the `clean_whitespace` Rake task if you like.
|
181
|
+
* Commit, do not mess with Rakefile. If related to an existing issue in the [tracker](http://github.com/cloudability/better-riak-client/issues), include "Closes #X" in the commit message (where X is the issue number).
|
182
|
+
* Send a pull request to the Basho repository.
|
183
|
+
|
184
|
+
## License & Copyright
|
185
|
+
|
186
|
+
Copyright ©2010-2012 Sean Cribbs and Basho Technologies, Inc.
|
187
|
+
Improvements Copyright ©2012 Cloudability Inc.
|
188
|
+
|
189
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
|
190
|
+
|
191
|
+
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
192
|
+
|
193
|
+
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
194
|
+
|
195
|
+
## Auxillary Licenses
|
196
|
+
|
197
|
+
The included photo (spec/fixtures/cat.jpg) is Copyright ©2009 [Sean Cribbs](http://seancribbs.com/), and is licensed under the [Creative Commons Attribution Non-Commercial 3.0](http://creativecommons.org/licenses/by-nc/3.0) license.
|
198
|
+
!["Creative Commons"](http://i.creativecommons.org/l/by-nc/3.0/88x31.png)
|
data/RELEASE_NOTES.md
ADDED
@@ -0,0 +1,211 @@
|
|
1
|
+
# Riak Ruby Client Release Notes
|
2
|
+
|
3
|
+
## 1.0.5 Patch/Bugfix Release - 2012-10-09
|
4
|
+
|
5
|
+
Release 1.0.5 fixes the bloated-gem issue (where the gem is 17MiB but should be
|
6
|
+
much smaller), and allows for proper SSL validation. Additionally, you can now
|
7
|
+
use this gem with stock Redstorm.
|
8
|
+
|
9
|
+
This release corresponds to `riak-ruby-client` v.1.0.4, plus changes on
|
10
|
+
`master` as of 2012-10-09 (commit 1ab24be05765e4e19ec204f76b7206ee58d50e69).
|
11
|
+
|
12
|
+
Improvements:
|
13
|
+
|
14
|
+
* Switch to using a generated gemspec, and using `git ls-files` to generate the
|
15
|
+
list of included files. (Fixes bloated gem issue, and Redstorm compatibility
|
16
|
+
issue.)
|
17
|
+
* Don't blow away SSL options. (Fixes SSL validation issue.)
|
18
|
+
|
19
|
+
Upstream Changes:
|
20
|
+
|
21
|
+
* Add feature detection (via Riak version detection) for client backends. This
|
22
|
+
will be necessary to switch on/off various client features.
|
23
|
+
* Push down MapReduceError raising into the backend and use the new feature
|
24
|
+
detection. (Riak 1.1+ allows phase-less MapReduce)
|
25
|
+
* Add native 2I and search queries to PB.
|
26
|
+
* Fix minor inspect formatting error.
|
27
|
+
* Add failing specs for search integration.
|
28
|
+
* Tweak HTTP backend to fit the newer, simplified search response format.
|
29
|
+
* Upgrade to RSpec 2.10.x.
|
30
|
+
* Fix the version filter to use proper gem-style constraints.
|
31
|
+
* Don't try to drop data if the test server is not started.
|
32
|
+
* Use the 1.0+ method for conditional stores on PBC. Fixes #5.
|
33
|
+
* Replace Riak::Client::Pool with innertube gem.
|
34
|
+
* Fix JRuby FIFO blocking-open issue.
|
35
|
+
* Remove rspec deprecation warnings.
|
36
|
+
|
37
|
+
|
38
|
+
## 1.0.4 Patch/Bugfix Release - 2012-07-06
|
39
|
+
|
40
|
+
Release 1.0.4 fixes some bugs and adds configurable timeouts to the
|
41
|
+
Excon HTTP backend.
|
42
|
+
|
43
|
+
**NOTE** This will likely be the last release in the 1.0.x series. The
|
44
|
+
planned changes for 1.1.x are:
|
45
|
+
|
46
|
+
* `Riak::Client::Pool` will be replaced by the `innertube` gem, which
|
47
|
+
is its extraction.
|
48
|
+
* Riak 1.2 will be fully supported, including the new native 2I and
|
49
|
+
Search features over PBC.
|
50
|
+
* A richer exception hierarchy so that applications can deal more
|
51
|
+
intelligently with request failures.
|
52
|
+
|
53
|
+
Changes in 1.0.4:
|
54
|
+
|
55
|
+
* A function in the `app_helper` module that does not exist on Riak
|
56
|
+
1.1 and earlier was copied into the KV test backend.
|
57
|
+
* Excon's configuration logic was made more idempotent.
|
58
|
+
* Added timeout support to the Excon HTTP backend. [Mat Brown]
|
59
|
+
* Corrected an misnamed constant in Excon which would cause timeouts
|
60
|
+
not to be recognized as network errors.
|
61
|
+
* The `Riak::TestServer` is now compatible with Riak 1.2.
|
62
|
+
* A documentation error around `RObject#data` in the README was
|
63
|
+
fixed. [dn@wortbit.de]
|
64
|
+
* Fixed an ETS table leak in the testing backend.
|
65
|
+
* Deprecation warnings for later versions of MultiJson are now
|
66
|
+
resolved.
|
67
|
+
|
68
|
+
## 1.0.3 Patch/Bugfix Release - 2012-04-17
|
69
|
+
|
70
|
+
Release 1.0.3 fixes some bugs and adds support for secondary indexes
|
71
|
+
when using `Riak::TestServer`.
|
72
|
+
|
73
|
+
* Added tests for secondary index features to the unified backend
|
74
|
+
examples.
|
75
|
+
* Added secondary index support to `riak_kv_test_backend`. Full
|
76
|
+
support for this feature will be available via
|
77
|
+
`riak_kv_memory_backend` in the next major Riak release. See
|
78
|
+
[riak_kv #314](https://github.com/basho/riak_kv/pull/314).
|
79
|
+
* The console log (`lager_console_backend`) is now enabled on
|
80
|
+
generated nodes.
|
81
|
+
* `Riak::Node::Console` no longer overrides the `SIGWINCH` signal
|
82
|
+
handler.
|
83
|
+
* [Excon](http://rubygems.org/gems/excon) versions >= 0.7.0 are now
|
84
|
+
supported.
|
85
|
+
* IO-style objects will now be emitted properly when using the
|
86
|
+
`NetHTTPBackend`. [#1](https://github.com/basho/riak-ruby-client/issues/1)
|
87
|
+
* The Riak version filter for integration specs is now more correct.
|
88
|
+
* `Riak::RObject#url` has been removed because its accuracy cannot be
|
89
|
+
maintained when connected to multiple Riak nodes or to Riak via
|
90
|
+
PBC. [#3](https://github.com/basho/riak-ruby-client/issues/3)
|
91
|
+
* Index entries on `Riak::RObject` can be mass-overwritten using
|
92
|
+
`Riak::RObject#indexes=` while maintaining the proper internal
|
93
|
+
semantics. [#17](https://github.com/basho/riak-ruby-client/issues/17)
|
94
|
+
* Nodes should now generate properly when the `riak` script is a
|
95
|
+
symlink (e.g. Homebrew). [#26](https://github.com/basho/riak-ruby-client/issues/26)
|
96
|
+
|
97
|
+
## 1.0.2 Repackaging - 2012-04-02
|
98
|
+
|
99
|
+
Release 1.0.2 relaxes the multi_json dependency so that the client
|
100
|
+
will function with Rails 3.2. Version 1.0.1 was yanked.
|
101
|
+
|
102
|
+
## 1.0.1 Patch/Bugfix Release - 2012-04-02
|
103
|
+
|
104
|
+
Release 1.0.1 is a minor bugfix/patch release. Included in this
|
105
|
+
release are:
|
106
|
+
|
107
|
+
* I18n messages now include the French locale. [Eric Cestari]
|
108
|
+
* SSL configuration should work again. [Adam Hunter]
|
109
|
+
* The version comparison when checking Excon compatibility should now
|
110
|
+
handle large version numbers correctly. [Srdjan Pejic]
|
111
|
+
* There is now a spec to verify that the `riak_kv` `add_paths` setting
|
112
|
+
is not clobbered by the `Riak::TestServer` when adding the location
|
113
|
+
of the test backend code.
|
114
|
+
|
115
|
+
## 1.0.0 Feature Release - 2012-02-03
|
116
|
+
|
117
|
+
Release 1.0.0 is a major feature release and is the first where
|
118
|
+
`riak-client`, `ripple`, and `riak-sessions` will be released
|
119
|
+
independently (see below). Because there too many individual changes
|
120
|
+
to recount, this entry will cover the major features and bugfixes
|
121
|
+
present in the release.
|
122
|
+
|
123
|
+
### Riak 1.0/1.1 Compatibility
|
124
|
+
|
125
|
+
`riak-client` is fully compatible with Riak 1.0.x and
|
126
|
+
(yet-to-be-released) 1.1.x, including supporting secondary indexes,
|
127
|
+
integrated search, and cluster membership commands.
|
128
|
+
|
129
|
+
### Multi-node Connections and Retries
|
130
|
+
|
131
|
+
`Riak::Client` can now connect to multiple Riak nodes at once. This
|
132
|
+
greatly improves throughput and allows the client to recover from
|
133
|
+
intermittent connection errors while continuing normal operation. To
|
134
|
+
enable this, all uses of the Pump/Fiber logic were removed in favor of
|
135
|
+
connection pools from which any new request can draw an existing or
|
136
|
+
create a new connection. Which node is selected for any new connection
|
137
|
+
is based on a quickly-decaying EWMA of its success rate on recent
|
138
|
+
requests. A huge thanks to [Kyle Kingsbury](https://github.com/aphyr)
|
139
|
+
who did most of the work on this!
|
140
|
+
|
141
|
+
### Improved TestServer and Node Generation
|
142
|
+
|
143
|
+
The `Riak::TestServer` class has been generalized such that you can
|
144
|
+
generate regular nodes and even clusters that store data on disk. This
|
145
|
+
is especially useful if you want separate nodes or clusters for each
|
146
|
+
project that uses Riak, and to keep them separate from your base
|
147
|
+
install. `TestServer` also now launches the node in a separate process
|
148
|
+
(not a child process) so you can keep it running between test
|
149
|
+
suites. Clearing the in-memory data is performed by connecting to the
|
150
|
+
console via the exposed Unix pipes, rather than over stdio.
|
151
|
+
|
152
|
+
### Conflict Resolution
|
153
|
+
|
154
|
+
An important part of dealing with eventual consistency is the ability
|
155
|
+
to handle when conflicts (also called siblings) are created. Now you
|
156
|
+
can resolve them automatically by registering blocks (callbacks) using
|
157
|
+
`Riak::RObject.on_conflict`. The block will be called when fetching a
|
158
|
+
key in conflict and receives a `RObject` that has siblings. To resolve
|
159
|
+
the conflict, it simply returns the resolved object, or nil if it
|
160
|
+
didn't handle the conflict. A huge thanks to
|
161
|
+
[Myron Marston](https://github.com/myronmarston) who implemented this!
|
162
|
+
|
163
|
+
### Serializers
|
164
|
+
|
165
|
+
Before, serialization of Ruby objects into Riak was constrained to
|
166
|
+
three formats: JSON, YAML and Marshal. Now you can define your own
|
167
|
+
serializers so that you can store data in BSON, MsgPack, NetStrings,
|
168
|
+
or whatever format you like. Use `Riak::Serializers[content_type] =
|
169
|
+
serializer` to assign a serializer for the selected media type. The
|
170
|
+
serializer must respond to `#dump` and `#load`. (More handiwork of Myron
|
171
|
+
Marston, thanks!)
|
172
|
+
|
173
|
+
### Stamps
|
174
|
+
|
175
|
+
If you don't like the keys that Riak hands out when you store an
|
176
|
+
`RObject` without a key, and you want something naturally ordered, you
|
177
|
+
can now generate them client-side using `Riak::Stamp`, which will
|
178
|
+
generate 64-bit integers in a fashion similar to Twitter's Snowflake,
|
179
|
+
but uses `Riak::Client#client_id` as the machine identifier.
|
180
|
+
|
181
|
+
### Repository/Feature split
|
182
|
+
|
183
|
+
In an effort to decouple development of the individual projects and
|
184
|
+
reduce top-level dependencies, the `ripple` repository was split into
|
185
|
+
new repositories containing its corresponding sub-projects.
|
186
|
+
Additionally, the `Riak::CacheStore` has become its own project/gem.
|
187
|
+
The new gem and repository locations are below:
|
188
|
+
|
189
|
+
* [`riak-client`](http://rubygems.org/gems/riak-client) —
|
190
|
+
[basho/riak-ruby-client](https://github.com/basho/riak-ruby-client)
|
191
|
+
* [`ripple`](http://rubygems.org/gems/ripple) —
|
192
|
+
[seancribbs/ripple](https://github.com/seancribbs/ripple)
|
193
|
+
* [`riak-sessions`](http://rubygems.org/gems/riak-sessions) —
|
194
|
+
[seancribbs/riak-sessions](https://github.com/seancribbs/riak-sessions)
|
195
|
+
* [`riak-cache`](http://rubygems.org/gems/riak-cache) —
|
196
|
+
[seancribbs/riak-cache](https://github.com/seancribbs/riak-cache)
|
197
|
+
|
198
|
+
### Significant Known Issues
|
199
|
+
|
200
|
+
Attempting to use the Protocol Buffers transport with a 0.14.x cluster
|
201
|
+
may cause the connection to dump because of incompatibilities in
|
202
|
+
certain protocol messages. This will be addressed in a future
|
203
|
+
patch/bugfix release.
|
204
|
+
|
205
|
+
The new node generation and test server intermittently fails on JRuby,
|
206
|
+
specifically from deadlocks related to blocking opens for the console
|
207
|
+
FIFOs. The JRuby team has helped on this issue, but there may not be a
|
208
|
+
clear resolution path until JRuby 1.7 or later.
|
209
|
+
|
210
|
+
Other known issues may be found on the
|
211
|
+
[Github issue tracker](https://github.com/basho/riak-ruby-client/issues?milestone=1).
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# This file is auto-generated!
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY!
|
3
|
+
# Instead, edit the Rakefile and run 'rake gemspec:generate'.# -*- encoding: utf-8 -*-
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "better-riak-client"
|
7
|
+
s.version = "1.0.5"
|
8
|
+
|
9
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
10
|
+
s.authors = ["Jon Frisby", "Sean Cribbs"]
|
11
|
+
s.date = "2012-10-10"
|
12
|
+
s.description = "better-riak-client is an improved version of Basho's official Ruby client for Riak. It's a drop-in replacement that supports everything the official client does, in a gem that isn't bloated to multiple megabytes in size, and that fixes various outstanding issues like broken SSL validation."
|
13
|
+
s.email = ["jon@cloudability.com", "sean@basho.com"]
|
14
|
+
s.files = ["LICENSE", "README.markdown", "RELEASE_NOTES.md", "better-riak-client.gemspec", "erl_src/riak_kv_test014_backend.beam", "erl_src/riak_kv_test014_backend.erl", "erl_src/riak_kv_test_backend.beam", "erl_src/riak_kv_test_backend.erl", "erl_src/riak_search_test_backend.beam", "erl_src/riak_search_test_backend.erl", "lib/riak.rb", "lib/riak/bucket.rb", "lib/riak/client.rb", "lib/riak/client/beefcake/messages.rb", "lib/riak/client/beefcake/object_methods.rb", "lib/riak/client/beefcake_protobuffs_backend.rb", "lib/riak/client/decaying.rb", "lib/riak/client/excon_backend.rb", "lib/riak/client/feature_detection.rb", "lib/riak/client/http_backend.rb", "lib/riak/client/http_backend/configuration.rb", "lib/riak/client/http_backend/key_streamer.rb", "lib/riak/client/http_backend/object_methods.rb", "lib/riak/client/http_backend/request_headers.rb", "lib/riak/client/http_backend/transport_methods.rb", "lib/riak/client/net_http_backend.rb", "lib/riak/client/node.rb", "lib/riak/client/protobuffs_backend.rb", "lib/riak/client/search.rb", "lib/riak/cluster.rb", "lib/riak/core_ext.rb", "lib/riak/core_ext/blank.rb", "lib/riak/core_ext/deep_dup.rb", "lib/riak/core_ext/extract_options.rb", "lib/riak/core_ext/json.rb", "lib/riak/core_ext/slice.rb", "lib/riak/core_ext/stringify_keys.rb", "lib/riak/core_ext/symbolize_keys.rb", "lib/riak/core_ext/to_param.rb", "lib/riak/encoding.rb", "lib/riak/failed_request.rb", "lib/riak/i18n.rb", "lib/riak/json.rb", "lib/riak/link.rb", "lib/riak/locale/en.yml", "lib/riak/locale/fr.yml", "lib/riak/map_reduce.rb", "lib/riak/map_reduce/filter_builder.rb", "lib/riak/map_reduce/phase.rb", "lib/riak/map_reduce_error.rb", "lib/riak/node.rb", "lib/riak/node/configuration.rb", "lib/riak/node/console.rb", "lib/riak/node/control.rb", "lib/riak/node/defaults.rb", "lib/riak/node/generation.rb", "lib/riak/node/log.rb", "lib/riak/node/version.rb", "lib/riak/robject.rb", "lib/riak/search.rb", "lib/riak/serializers.rb", "lib/riak/stamp.rb", "lib/riak/test_server.rb", "lib/riak/util/escape.rb", "lib/riak/util/headers.rb", "lib/riak/util/multipart.rb", "lib/riak/util/multipart/stream_parser.rb", "lib/riak/util/tcp_socket_extensions.rb", "lib/riak/util/translation.rb", "lib/riak/version.rb", "lib/riak/walk_spec.rb"]
|
15
|
+
s.homepage = "http://github.com/cloudability/better-riak-client"
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubygems_version = "1.8.24"
|
18
|
+
s.summary = "better-riak-client is an improved version of Basho's official Ruby client for Riak."
|
19
|
+
|
20
|
+
if s.respond_to? :specification_version then
|
21
|
+
s.specification_version = 3
|
22
|
+
|
23
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
24
|
+
s.add_runtime_dependency(%q<i18n>, [">= 0.4.0"])
|
25
|
+
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
26
|
+
s.add_runtime_dependency(%q<beefcake>, ["~> 0.3.7"])
|
27
|
+
s.add_runtime_dependency(%q<multi_json>, ["~> 1.0"])
|
28
|
+
s.add_runtime_dependency(%q<innertube>, ["~> 1.0.2"])
|
29
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.10.0"])
|
30
|
+
s.add_development_dependency(%q<fakeweb>, [">= 1.2"])
|
31
|
+
s.add_development_dependency(%q<rack>, [">= 1.0"])
|
32
|
+
s.add_development_dependency(%q<excon>, [">= 0.6.1"])
|
33
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
34
|
+
s.add_development_dependency(%q<yajl-ruby>, [">= 0"])
|
35
|
+
else
|
36
|
+
s.add_dependency(%q<i18n>, [">= 0.4.0"])
|
37
|
+
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
38
|
+
s.add_dependency(%q<beefcake>, ["~> 0.3.7"])
|
39
|
+
s.add_dependency(%q<multi_json>, ["~> 1.0"])
|
40
|
+
s.add_dependency(%q<innertube>, ["~> 1.0.2"])
|
41
|
+
s.add_dependency(%q<rspec>, ["~> 2.10.0"])
|
42
|
+
s.add_dependency(%q<fakeweb>, [">= 1.2"])
|
43
|
+
s.add_dependency(%q<rack>, [">= 1.0"])
|
44
|
+
s.add_dependency(%q<excon>, [">= 0.6.1"])
|
45
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
46
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
47
|
+
end
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<i18n>, [">= 0.4.0"])
|
50
|
+
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
51
|
+
s.add_dependency(%q<beefcake>, ["~> 0.3.7"])
|
52
|
+
s.add_dependency(%q<multi_json>, ["~> 1.0"])
|
53
|
+
s.add_dependency(%q<innertube>, ["~> 1.0.2"])
|
54
|
+
s.add_dependency(%q<rspec>, ["~> 2.10.0"])
|
55
|
+
s.add_dependency(%q<fakeweb>, [">= 1.2"])
|
56
|
+
s.add_dependency(%q<rack>, [">= 1.0"])
|
57
|
+
s.add_dependency(%q<excon>, [">= 0.6.1"])
|
58
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
59
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
60
|
+
end
|
61
|
+
end
|