Skip to content

Commit

Permalink
Update release notes for 1.0. [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
seancribbs committed Feb 3, 2012
1 parent 9c0d2ff commit f33eae2
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 286 deletions.
99 changes: 99 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Riak Ruby Client Release Notes

## 1.0.0 Feature Release - 2012-02-03

Release 1.0.0 is a major feature release and is the first where
`riak-client`, `ripple`, and `riak-sessions` will be released
independently (see below). Because there too many individual changes
to recount, this entry will cover the major features and bugfixes
present in the release.

### Riak 1.0/1.1 Compatibility

`riak-client` is fully compatible with Riak 1.0.x and
(yet-to-be-released) 1.1.x, including supporting secondary indexes,
integrated search, and cluster membership commands.

### Multi-node Connections and Retries

`Riak::Client` can now connect to multiple Riak nodes at once. This
greatly improves throughput and allows the client to recover from
intermittent connection errors while continuing normal operation. To
enable this, all uses of the Pump/Fiber logic were removed in favor of
connection pools from which any new request can draw an existing or
create a new connection. Which node is selected for any new connection
is based on a quickly-decaying EWMA of its success rate on recent
requests. A huge thanks to [Kyle Kingsbury](https://github.com/aphyr)
who did most of the work on this!

### Improved TestServer and Node Generation

The `Riak::TestServer` class has been generalized such that you can
generate regular nodes and even clusters that store data on disk. This
is especially useful if you want separate nodes or clusters for each
project that uses Riak, and to keep them separate from your base
install. `TestServer` also now launches the node in a separate process
(not a child process) so you can keep it running between test
suites. Clearing the in-memory data is performed by connecting to the
console via the exposed Unix pipes, rather than over stdio.

### Conflict Resolution

An important part of dealing with eventual consistency is the ability
to handle when conflicts (also called siblings) are created. Now you
can resolve them automatically by registering blocks (callbacks) using
`Riak::RObject.on_conflict`. The block will be called when fetching a
key in conflict and receives a `RObject` that has siblings. To resolve
the conflict, it simply returns the resolved object, or nil if it
didn't handle the conflict. A huge thanks to
[Myron Marston](https://github.com/myronmarston) who implemented this!

### Serializers

Before, serialization of Ruby objects into Riak was constrained to
three formats: JSON, YAML and Marshal. Now you can define your own
serializers so that you can store data in BSON, MsgPack, NetStrings,
or whatever format you like. Use `Riak::Serializers[content_type] =
serializer` to assign a serializer for the selected media type. The
serializer must respond to `#dump` and `#load`. (More handiwork of Myron
Marston, thanks!)

### Stamps

If you don't like the keys that Riak hands out when you store an
`RObject` without a key, and you want something naturally ordered, you
can now generate them client-side using `Riak::Stamp`, which will
generate 64-bit integers in a fashion similar to Twitter's Snowflake,
but uses `Riak::Client#client_id` as the machine identifier.

### Repository/Feature split

In an effort to decouple development of the individual projects and
reduce top-level dependencies, the `ripple` repository was split into
new repositories containing its corresponding sub-projects.
Additionally, the `Riak::CacheStore` has become its own project/gem.
The new gem and repository locations are below:

* [`riak-client`](http://rubygems.org/gems/riak-client) —
[basho/riak-ruby-client](https://github.com/basho/riak-ruby-client)
* [`ripple`](http://rubygems.org/gems/ripple) —
[seancribbs/ripple](https://github.com/seancribbs/ripple)
* [`riak-sessions`](http://rubygems.org/gems/riak-sessions) —
[seancribbs/riak-sessions](https://github.com/seancribbs/riak-sessions)
* [`riak-cache`](http://rubygems.org/gems/riak-cache) —
[seancribbs/riak-cache](https://github.com/seancribbs/riak-cache)

### Significant Known Issues

Attempting to use the Protocol Buffers transport with a 0.14.x cluster
may cause the connection to dump because of incompatibilities in
certain protocol messages. This will be addressed in a future
patch/bugfix release.

The new node generation and test server intermittently fails on JRuby,
specifically from deadlocks related to blocking opens for the console
FIFOs. The JRuby team has helped on this issue, but there may not be a
clear resolution path until JRuby 1.7 or later.

Other known issues may be found on the
[Github issue tracker](https://github.com/basho/riak-ruby-client/issues?milestone=1).
286 changes: 0 additions & 286 deletions RELEASE_NOTES.textile

This file was deleted.

0 comments on commit f33eae2

Please sign in to comment.