Welle 1.5.0 is released
TL;DR
Welle is an expressive Clojure client for Riak with batteries included.
1.5.0 is a minor release
that is 100% backwards-compatible with 1.5.x and introduces several nice features:
- Retriers for failing operations
- Conflict resolvers
- Easier to use update functions
This version has been tested against
Riak 1.2.x and 1.3.x.
Changes between Welle 1.4.0 and 1.5.0
clojurewerkz.welle.kv/modify
clojurewerkz.welle.kv/modify is a new function that combines clojurewerkz.welle.kv/fetch and
clojurewerkz.welle.kv/store with a user-provided mutation functions. The mutation function
should take a single Riak object as an immutable map and return a modified one.
In case of siblings, a resolver should be used.
clojurewerkz.welle.kv/modify will update modification timestamp of the object.
clojurewerkz.welle.kv/modify takes the same options as clojurewerkz.welle.kv/fetch and
clojurewerkz.welle.kv/store
Conflcit Resolvers
clojurewerkz.welle.kv/fetch, and clojurewerkz.welle.kv/store now accept a new
option: :resolver. Resolvers are basically pure functions that take a collection of
siblings and return a collection of Riak object maps.
Resolvers can be created using
clojurewerkz.welle.conversion/resolver-from which takes a function that accepts a collection
of deserialized (unless fetch was told otherwise) values and applies any conflict resolution
logic necessary.
clojurewerkz.welle.kv/fetch-one now also supports resolvers via the :resolver option.
It will raise an exception if siblings are detected and no resolver is provided.
Retriers
clojurewerkz.welle.kv/fetch, clojurewerkz.welle.kv/fetch-one, clojurewerkz.welle.kv/store,
clojurewerkz.welle.kv/delete, and clojurewerkz.welle.kv/index-query now retry operations
that fail due to a network issue or any other exception.
By default, the operations will be retrier 3 times. It is possible to provide a custom
retrier using the :retrier option. Retriers can be created using
clojurewerkz.welle.conversion/retrier-from which takes a function that accepts a callable
(an operation that may need to be retried) and needs to invoke it, handling exceptions
and applying any retrying logic needed.
clojurewerkz.welle.conversion/counting-retrier produces a retrier that will retry an operation
given number of times. This is the kind of retrier Welle uses by default.
Skipping Deserialization for clojurewerkz.welle.kv/fetch
clojurewerkz.welle.kv/fetch supports a new boolean option :skip-deserialize that allows
automatic deserialization to be skipped.
Contributed by Jonas Tehler.
Clojure 1.5 By Default
Welle now depends on org.clojure/clojure version 1.5.1. It is
still compatible with Clojure 1.3+ and if your project.clj depends
on a different version, it will be used, but 1.5 is the default now.
We encourage all users to upgrade to 1.5, it is a drop-in replacement for the majority of projects out there.
Change Log
We recommend all users to upgrade to 1.5.0 a try.
Welle change log is available on GitHub.
Welle is a ClojureWerkz Project
Welle is part of the group of libraries known as ClojureWerkz, together with
- Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
- Elastisch, a minimalistic Clojure client for ElasticSearch
- Monger, a Clojure MongoDB client for a more civilized age
- Neocons, a feature rich idiomatic Clojure client for the Neo4J REST API
- Quartzite, a powerful scheduling library
and several others. If you like Welle, you may also like our other projects.
Let us know what you think on Twitter or on the Clojure mailing list.
Donations
ClojureWerkz accepts donations. If you feel like our projects save you time, consider donating. Thanks.
Michael on behalf of the ClojureWerkz Team