I’ve got a bunch of browsers tabs open. This is unusual; I try to have zero open. Except right now. I’m digging into something. I’m spreading ephemeral papers around on my epemeral desk and trying to make a concept, not ephemeral, at least in my head.
It all started with locking. It’s a hard concept, but some programs need it. In particular, applications running across multiple machines connected by imperfect software and unreliable networks need it. And this sort of thing ends up being difficult to get right.
I’ve poked around with this before. Reading the code of some libraries that are implementing locking in a way that might come in handy to me, I check out some documentation that I’ve seen referenced a couple times. Redis’
setnx command can function as a useful primitive for implementing locks. It turns out (
getset) is pretty interesting too. Ohm, redis-objects and adapter-redis all implement locking using a combination of those two primitives. Then I start to dig deeper into Ohm; there’s some interesting stuff here. Activity feeds with Ohm is relevant to my interests. I’ve got a thing for persistence tools that enumerate their philosophy. Nest seems like a useful set of concepts too.
I’m mentally wandering here. Let’s rewind back to what I’m really after: a way to do locking in Cassandra. There’s a blog post I came across before on doing critical sections in Cassandra, but it uses ZooKeeper, so that’s cheating. Then I get distraced by a thing on HBase vs. Cassandra and another perspective on Cassandra that mentions but does not really focus on locking.
And then, paydirt. A wiki page on locking in Cassandra. It may be a little rough, and might not even work, but it’s worth playing with. Turns out it’s an adaptation of an algorithm devised by Leslie Lamport for implementing locking with atomic primitives. It uses a bakery as an analgoy. Neat.
Then I get really distracted again. I remember doozer, a distributed consensus gizmo developed by Blake Mizerany at Heroku. I get to reading its documentation and come across the protocol spec, which has an intriguing link to a Plan 9 manpage on the Plan 9 File Protocol. That somehow drives me to ponder serialization and read about TNetstrings.
At this point, my cup has overfloweth. I’ve got locking, distributed consensus, serialization, protocols, and philosophies all on my mind. Lots of fun intellectual fodder, but I’ll get nowhere if I don’t stick my nose into one of them exclusively and really try to figure out what it’s about. So I do. Fin.