(Bamboo graphic)
Introduction
News
Search
Documentation License
Download
Contributors
Contact Us

The Bamboo Distributed Hash Table
A Robust, Open-Source DHT

Download

CVS Snapshots

If you're going to use Bamboo, we prefer that you download the latest CVS snapshot below. Bamboo is under active development, and (usually) the latest snapshot includes our best code. None of these snapshots are "supported" in any kind of a contractual sense (see the license), but we do answer questions about them on the mailing list (but please read the FAQ first).

Date Description
2006 March 3 This snapshot fixes a pretty big bug in bamboo.db.StorageManager that was causing it to report incorrect storage totals for clients. You can register for it to call you every time a client's storage total changes. It was correctly adding the sizes of new stores into those totals, but every time a put expired, it was only subtracting out the key size, not the key size plus the data size as it should have been. That's fixed now.
2005 December 16 This snapshot has the code we used in our latest WORLDS paper. Gets are now really fast on PlanetLab, especially if you issue each one to multiple gateways in parallel. Here are some timings in milliseconds from 155,218 random gets peformed on 15 December 2005, for example:
#GWAvg50th95th99th
1188683114453
28548155461
36241131244
2005 July 1 The unauthenticated removes of the last release are no longer supported. Instead, we have a much nicer authenticated remove now. Currently, it's only available in the Sun RPC interface, but I will add an XML RPC interface for it soon.

To use the new removes, take a look at bamboo/src/bamboo/dht/gateway_prot.x. Note that there is now a version 3 interface. To make a put removable, use the version 3 put, and include the SHA-1 hash of a random secret with your key and value. (Be sure to use a different secret for each put; java.security.SecureRandom may help here.) To remove the put later, send a version 3 remove with the same key, the SHA-1 hash of the value, and the secret itself. See our latest paper, "OpenDHT: A Public DHT Service and Its Uses", Section 3.1.1, for a detailed discussion of why we like this remove. There's sample Java code for puts, gets, and removes in bamboo.dht.(Put|Get|Remove).

Also, the new version 3 get call returns not only the values under a key, but also the secret hashes included with their puts, and the number of seconds remaining in their TTLs. This is pretty useful if you want to refresh someone else's puts for them.

Finally, there are a lot of bug fixes in this release. The simulator (bamboo.sim.Simulator) seems to be working again, at least if you're using the Router, and I've incorporated all of the bug fixes sent to the mailing list since the April snapshot.

2005 April 5 By popular demand, Bamboo now optionally supports unauthenticated removes. These are, in my opinion, a bad idea. I would much rather your application instead put a dummy value to indicate that a previously put value should no longer be used. This way, it's easy to see what the sequence of puts and (dummy) removes has been after the fact, using only gets. However, some people have begged for "real" removes anyway. In applications that do lots of removes on values with long TTLs, this makes sense performance-wise, though it's still not secure. Long-term, Bamboo will support authenticated puts and removes (using public-key cryptography). As I compromise in the meantime, or for deployments where all clients are trusted, I've made unauthenticated removes optional.

To enable them, set the config file parameter "allow_unauth_rm" to "true" in bamboo.dht.Gateway stage. Otherwise, they'll be rejected. (This option is turned off in OpenDHT, the public deployment of Bamboo.) Also, note that remove--like put--takes a TTL. You should set this to be at least as large as the TTL for the corresponding put; to make things easier at some cost in storage, just set it to Integer.MAX_VALUE.

Sample code in both Python and Java for puts, gets, and removes can now also be found in bamboo/src/bamboo/dht, under the file names Put.java, Get.java, Remove.java, put.py, get.py, and remove.py.

2005 February 18 This snapshot is mostly bug fixes from the previous one, including a rather serious bug in the DataManager stage that could lead to performance degredation over time. Also, the beginnings of a tutorial on bamboo.lss.ASyncCore can now be found in bamboo/doc/async-tutorial. It's heavily modelled after the libasync tutorial from MIT, but translated into Java.
2004 November 24 There was a silly bug in the last snapshot that would cause Bamboo to print "unknown protocol 0xffffffff" a lot if mac_key_file wasn't set in the Network stage's config file. That's fixed in this snapshot.

Also, this snapshot is the first to use Java 1.5. If it's not available for your platform, you can still use Java 1.4, though. See this email for details.

2004 November 3 Note: this snapshot is buggy. Please download the November 24th one, above, instead.

This snapshot contains a pretty stable version of the put/get layer; for the first time I can recommend using it without any major qualifications. As of 4 November 2004, we've gone eight weeks without losing a value on our PlanetLab deployment, and we've gone three weeks without any get RPCs timing out (i.e., the values were still there, but temporarily unavailable). Also, we're no longer using the Java version of Berkeley DB, so if you run on some platform that I don't run on, you may need to compile the Berkeley DB shared library files yourself.

2004 August 5 We've been working on the stability of the put/get layer; it's not 100% yet, but this snapshot is a lot more stable that any of the earlier ones. We're also using Berkeley DB Java Edition now, so it's possible to run the system as 100% pure Java.
2004 March 5 This snapshot contains a new event-driven client-side interface to the OpenHash gateway in bamboo.dht.GatewayClient, along with an event-driven version of bamboo.dht.GatewayTest in bamboo.dht.GatewayClientTest. It also contains an implementation of the ReDiR algorithm (see our IPTPS paper). Finally, it also contains an implemenation of the Vivaldi network coordinates algorithm in bamboo/src/bamboo/vivaldi.
2004 February 23 This snapshot contains a bug fix for the bamboo.db.StorageManager class, which was leaking Berkeley DB cursors, and it contains Berkeley DB libraries for Mac OS X.
2004 February 13 The same as the 2004-02-09 snapshot below, but with lots of bug fixes.
2004 February 9 The XDR interface now has placemarks in get responses, and gateway_test.c includes a simple demonstration of the functionality.
2004 February 4 The same as the 2004-01-24 snapshot below, but with lots of bug fixes.
2004 January 24 This snapshot has a better API to the put/get layer (including a gateway.x file in bamboo/src/bamboo/dht), and a preliminary version of a Bamboo simulator based on the Simple OceanStore Simulator (SOSS).

Releases

The following release is the code we used to write the Bamboo USENIX paper. It's really old, and we don't recommend it over the CVS snapshots above, but if you're looking to reproduce our results, it's a good start.

Release Description
Bamboo 1.0.1 This is the codebase used to produce the numbers in the December 2003 Bamboo technical report.

Required Libraries

Bamboo makes use of the Java packages listed below. Jars for these packages are already included in the Bamboo distribution, so you don't need to install them yourself in order to run Bamboo. However, if you're looking at the Bamboo code and want the source for one of these packages to help you understand it, you can find their source using the links below.


Last modified 2006/03/03 14:46:13.