BigCouch 0.3
Bob Dionne
February 11, 2011
Time sure flies when you’re having fun. It’s been a little over three months since the first BigCouch release so we thought it might be a good time to package and release a new version. A lot of folks forked this first release and started using it, providing valuable feedback, logging issues and bug reports. We greatly appreciate the effort and hopefully have covered most of the issues. This release sports a major new feature in addition to lots of consolidation and bug fixes.
BigCouch has several simply architected layers that provide the core functionality. These are now broken out into separate sub-projects that are managed as dependencies by rebar, along with ibrowse, mochiweb and the other dependencies. This allows these projects to evolve independently and enables BigCouch developers to switch between various branches as needed. We’ve fixed several bugs and added specs and docs to fabric, which together with rexi provides our distributed CouchDB API. Rexi is actually a very nice RPC like layer that can be easily used standalone if needed.
We’ve done a lot to tighten up propagation of errors through the system, reducing the number of dead_shards errors that occur. For the most part these errors are harmless, often the result of a bad Javascript function in view code. At the suggestion of our operations team we’ve tagged each request with a unique id which is returned in the HTTP headers but is also written in the logs. This helps us track errors better as we’re able to map specific stack traces to API calls. We’ve also created an in-memory buffer in the rexi server that is accessible on the back end and maintains a configurable number of errors and stack traces.
The major feature addition in this release is shard synchronization in the mem3 layer. By proactively triggering replications between database shard copies we reduce the amount of time required to restore the proper replica level for all documents after a node outage. Towards this end we’ve implemented a new lightweight replicator customized for use with shards, and integrated it into mem3. We saw that this replicator could also be used to replicate the nodes and shard_db databases which are used to manage the cluster information, thereby allowing us to not need the heavier weight CouchDB replicator internally. It’s still new and has some kinks to work out but we wanted to get it into developers hands as soon as we could. We encourage your feedback.
Last, but surely not least, we’ve added Robert Newson to the BigCouch team. He’s hit the ground running and has already fixed some of the trickier issues with which we’ve been grappling.
These are just a few of the items covered in this release; all specific changes are enumerated in the release notes. You can always build BigCouch straight from the source, but for your convenience BigCouch 0.3 is now available via precompiled RPM and .deb packages on the downloads page at Github and as a cookbook for installation via the Opscode Chef platform.
Thanks for using BigCouch!