1.2.0 is a minor feature and usability release. We recommend all users to upgrade to it.
Changes in Elastisch 1.2.0
ElasticSearch Native Client Upgrade
Elastisch now depends on ElasticSearch native client version 0.90.3.
Empty Bulk Operations are Ignored
Elastisch now will not perform a bulk operation if its list of operations is empty.
Contributed by Baptiste Fontaine.
Support for :ignore_indices in REST API client
clojurewerkz.elastisch.rest.document/search,
clojurewerkz.elastisch.rest.document/search-all-types,
clojurewerkz.elastisch.rest.document/count,
clojurewerkz.elastisch.rest.document/delete-by-query, and
clojurewerkz.elastisch.rest.document/delete-by-query-across-all-types
now accepts the :ignore_indices option:
Unlike OO clients that represent queues and
exchanges as objects, Langohr cannot be more
aggressive about redeclaring entities during
connection recovery.
Changes between Langohr 1.2.0 and 1.3.0
Re-introduce langohr.consumers/create-queueing
The function creates a QueueingConsumer instance and is very similar
to langohr.consumers/create-default in purpose.
Sometimes combining a queueing consumer with
langohr.consumers/deliveries-seq is the best way to express a
problem.
Rename langoh.consumers/consumers-seq to langoh.consumers/deliveries-seq, make it public
langoh.consumers/deliveries-seq is a function that turns a QueueingConsumer instance
into a lazy sequence of deliveries.
Use :executor During Connection Recovery
Connection recovery after network failure will now respect the :executor
option.
Changes between Langohr 1.1.0 and 1.2.0
Langohr Again Uses RabbitMQ Java Client Interfaces
Langohr’s implementation of connection and channel now implements
RabbitMQ Java client’s interfaces for connection and channel.
1.1.0 is a minor feature release that primarily introduces HTTP API improvements.
Changes between Langohr 1.0.1 and 1.1.0
Extended HTTP API Support
langohr.http now provides more complete coverage of the RabbitMQ HTTP API.
Contributed by Steffen Dienst.
langohr.consumers/subscribe Options In Line with Docs
The documentation says to use function handler keys ending in
“-fn”, but this code currently only recognizes the old form. This
commit ensures that all keys that are used within
langohr.consumers/subscribe can be used as a parameter.
Contributed by Steffen Dienst.
langohr.core/connect-to-first-available is Removed
langohr.core/connect-to-first-available is removed. A better failover functionality
will be available in future versions.
RabbitMQ Java Client Upgrade
RabbitMQ Java client dependency has been updated to 3.1.3.
With 1.0.1, Langohr is finally a 1.0 library, after 2 years in the making.
Time for 1.0
Langohr is the original ClojureWerkz library, started in late July 2011. It had quickly reached a point when it was
useful enough. With the help of our users, there were 3-4 releases with breaking changes and major usability
improvements.
Since 2013, Langohr has not changed much. It has decent documentation, has been in
use by many people we know and supports every feature RabbitMQ 3.1 provides.
So while it is still missing a couple of hard to get right features, the 1.0 release has been long overdue.
After all, some of much younger libraries are at 1.6 or 1.5 already.
1.0.1 is basically 1.0.0-beta14 with a different version and one typo fix.
We are already working on a major feature for Langohr 1.1: automatic connection recovery, similar to what
a couple of Ruby clients support. Features like this take a while to develop but the progress so far
is promising.
2.0.0 is a major release that introduces some breaking API changes, new features
and another 20% performance improvement (now within less than 5% of the Java client).
Changes in Carmine 2.0
20% better performance
Pluggable data compression and encryption based on Nippy 2.0
Improvements to message queueing and distributed locking features
Tundra, a way to plug a durable data store into Carmine for long-term data persistence
Cassaforte is a new Clojure client for
Apache Cassandra 1.2+. It is built around CQL 3 and focuses on ease
of use. You will likely find that using Cassandra from Clojure has
never been so easy.
1.1.0 is a minor release that introduces one bug fix and one minor
improvement.
Changes between Cassaforte 1.0.1 and 1.1.0
Fixes for prepared queries with multi-cql
Multi-cql didn’t work with unforced prepared statements, now it’s possible to use
client/prepared with multi-cql as well.
Fixes for compound keys in iterate-world queries
Iterate world didn’t work fro tables with compound primary keys. Now it’s possible
to iterate over collections that have compound keys.
1.2.0-beta3 is a development release that
adds :ignore_indices parameter support to the REST client.
Changes between Elastisch 1.2.0-beta1 and 1.2.0-beta3
ElasticSearch Native Client Upgrade
Elastisch now depends on ElasticSearch native client version 0.90.2.
Support for :ignore_indices in REST API client
clojurewerkz.elastisch.rest.document/search,
clojurewerkz.elastisch.rest.document/search-all-types,
clojurewerkz.elastisch.rest.document/count,
clojurewerkz.elastisch.rest.document/delete-by-query, and
clojurewerkz.elastisch.rest.document/delete-by-query-across-all-types
now accepts the :ignore_indices option:
Cassaforte is a new Clojure client for
Apache Cassandra 1.2+. It is built around CQL 3 and focuses on ease
of use. You will likely find that using Cassandra from Clojure has
never been so easy.
Cassaforte is finally a 1.0 project. This means we are confident that you will
have a good experience using it and the docs are good enough.
Another Brick in the Wall
ClojureWerkz projects are mostly known for our data store clients. Data processing is a
sweet spot for Clojure and that’s what we primarily use it for.
Over time we’ve developed and released a number of data store clients:
Today we are adding another client to this family, Cassaforte.
The Cassaforte Story
Cassaforte was started about a year ago as an experiment. Back then we needed a
database well suited for time series data, and Cassandra is a good choice. However,
dealing with existing clients, namely Hector and Astyanax, was quite a bit of a pain.
In the end, using Cassandra’s low level Thrift client worked well and we have
been improving the codebase bit by bit, while working on an event collection and
analytics system.
A few months ago, DataStax released a new Java driver for Cassandra that was
a lot better suited to what Cassaforte needed to power it than any other alternative.
We were able to switch Cassaforte to it in a couple of weeks. About the same time,
a great fellow Max Penet released a Clojure DSL for generating CQL, Hayt.
Hayt makes working with CQL as nice as the new clojure.java.jdbc DSL:
Integrating Hayt took a few weeks as well. From there, it took some time to
write initial documentation and add some polish.
Major props to the DataStax team for releasing such a nice and focused Java driver
and Max for making querying Cassandra from Clojure such a good experience.
What’s In The Box
Cassaforte is young but already offers all the key features you’d expect from
such a client:
CQL 3.0 queries, including queries with placeholders (?, a la JDBC)
Prepared statements
Counters
Multi-node (cluster) connections
Automatic deserialization of column names and values according to the schema
Lazy sequence-based queries over large result sets
Needless to say, as more features are added to Cassandra and the DataStax core Java driver,
Cassaforte will soon to follow their lead.
Finally 1.0
It took 6 RC releases to get to Cassaforte 1.0 but it’s finally here. We even already have one one patch release
out, which fixes an AOT compilation issue discovered by a user after 1.0.0 was tagged.
Cassaforte artifacts are released to Clojars. If you are using Maven, add the following repository
definition to your pom.xml:
Cassaforte was started by Michael but ended up being a brain child of Alex.
We would like to thank Max Penet for providing a lot useful feedback, sharing Hayt with
us and helping us define what we want Cassaforte to be and feel like.
News and Updates
New releases and updates are announced on
Twitter. Cassaforte also has a
mailing list, feel
free to ask questions and report issues there.
Optional function callback to parametrize the construction of messages
All built-in validators accept an optional function callback which
will be called by the validator to build the returned error message.
The main goal is to facilitate the inclusion of i18n in messages (like
previous one but in a more flexible way).
For example: