memcapable and memcached binary protocol
memcapable is a tool that was recently included into the libmemcached package (as of version 0.33). In short, you can use it to verify whether a particular server supports the memcached binary protocol. You can read why such a tool was created in the blog entries published by the guys who came up with it:
Running memcapable against memcached is not so interesting since it’s been done by many of us already. Instead, I decided to run it against a full text search engine called Groonga which apparently supports a subset of the memcached binary protocol.
For those that are interested, Groonga is a successor project to Senna, which is a open source embedded fulltext search engine that gained huge success in Japan. Senna is commonly used by embedding it into MySQL but Groonga _can_ run as a standalone server. For more info, here’s Kaj Arnö’s past blog entry on Senna.
Testing Groonga with memcapable
Running Groonga in foreground:
$ groonga -s -p 11211
Results obtained from running memcapable on the same host:
$ memcapable noop [pass] quit [pass] quitq [pass] set [pass] setq [FAIL] flush [pass] flushq [pass] add [pass] addq [FAIL] replace [pass] replaceq [FAIL] delete [pass] deleteq [FAIL] get [pass] getq [pass] getk [pass] getkq [pass] incr [FAIL] incrq [pass] decr [FAIL] decrq [pass] version [pass] append [FAIL] appendq [FAIL] prepend [FAIL] prependq [FAIL] stat [FAIL] illegal [FAIL] 12 of 28 tests failed
As you can see above, Groonga doesn’t support the full binary command stack but it shows how it will be possible to perform full text search from your favorite client library in the future. I’m saying future because Groonga is still a project in progress.
memcapable is your friend when you need to verify whether your server is communicating properly. I’m sure there are other projects that take advantage of the binary protocol whether it’s closed or open. For example, someone pinged me on Twitter that they’re working on something along this line.
Mac OS X users will need to wait for libmemcached-0.34
I found a minor glitch in OS X that would make certain tests fail. Fortunately it was fixed and committed while I was sleeping after I filed the bug. The power of global scale development still surprises me :)
