As I've said in other venues, I believe a lot of value in the
memcached ecosystem/community stems from well defined client APIs and a
well defined over-the-network protocol. The protocol just makes sense
for a large class of things you may need from (as NorthScale's Dustin Sallings calls it) a sloppy LRU
distributed hashmap. There are clients for every platform and language
I can think of, and implementing the basics of the protocol for another
client are so straightforward, there are a lot of partial clients out
there.
On the server side, the same is true. Here in the last
few years, we've seen quite a number of things pop up which speak
either all, or a subset of, the memcached protocol. In some cases,
these things are pretty explicit about the fact they don't speak the
full protocol and in other cases there may just be parts which weren't
considered. What was needed was a quick way to determine if something
which speaks memcached protocol supported all of the operations and
options. It was possible to do this by grabbing spymemcached or
libmemcached and running the tests, but those felt more like tests to
validate spymemcached and libmemcached functionality... you'd have to
know a lot about them to dig into the weeds to find out based on the
failures what was due to protocol support not being there.
I had suggested something like this at the Drizzle Developer days in Seattle not so long ago. In a later conversation between Brian Aker
and I, I made the suggestion that memcached is something that pretty
much any developer could implement the basics of in hours or days.
That being the case, it'd be really useful to have a simple tool to
point at something to see to what degree it's protocol compliant. He
agreed, and then between he and Trond, and separately between Trond and
I we came up with memcapable.
Trond
went and implemented the first version. My contributions were the idea
and some discussion with Trond, plus the name itself (which is a great
name, if I do say so myself).
memcapable has just been merged into the trunk of libmemcached as one of the utilties. This means it should be in the next release.
NorthScale's own Patrick Galbraith (a.k.a. CaptTofu)
recently picked up Tokyo Tyrant to put it through it's paces. This is
exactly the kind of thing that memcapable should help memcached users
with. Given a new thing implementing memcached protocol, can you point
memcapable at it and quickly find out which portion of the protocol it
supports!