Upcoming memcached releases + rambling.

dormando dormando at rydia.net
Thu Feb 7 08:56:58 UTC 2008

Yo all,

The original plan for today was to pop on the list and yell "Hey! Have 
some -rc's to test! Go nuts! Thanks for all the patches!" - but my 
awesome  fever for the last few days has pushed that off by ... a few 
more days.

But it's totally cool, because it's happening. For the first time in a 
long time memcached will act like it's releasing early, often. Thanks to 
everyone for all of the recent code submissions and bugfixes :)

So we have two -rc's which are coming up as soon as I can wrap a few bug 
reports and merge all this code:

1.3.0-rc (the binary tree, in its current state)
1.2.5-rc (non-binary branch with all of the recent fixes and patches)

There might not be an immediate merge of 1.2.5 -> 1.3.0, but I'm not 
convinced that matters immediately.

I believe should probably give the binary tree a couple of real 
development releases until we've had a few client implementations. So in 
the case of the protocol having to change due to issues with actual 
client integration, we won't be backing out on a stable API.

SO! I'd like to lay out my own wishlist for memcached, some of which is 
underway, some not:

- Binary protocol. It's been too long, lets finish it. We need more 
native tests, and we need to benchmark its speed relative to the text 
protocol, make sure we're actually coming out ahead here.

- Dynamic storage engines. Toru has a promising proof of concept that 
I'd love to merge for an eventual 1.4 release.

Most of the memcached forks have been due to folks not liking the 
storage method. While I disagree with how a lot of these forks are done, 
there's definitely merit in the flexibility. A lot of these folks start 
from scratch, but I believe memcached should be a simple, efficient, 
network platform for dead simple key=value datastores, no matter how 
they're actually implemented.

- Dedupe the error messages. We have 11 instances of "SERVER_ERROR out 
of memory". This makes it impossible to even guess what happened, even 
with full context. Did we fail to allocate a msghdr? Did do_item_alloc 
fail? Who knows. We can do this for 1.2.5 if there're people on board. 
I'll float the patches.

- Add stats about failures. I'd love counters for all of the times 
something failed without causing an eviction. Sometimes machines will be 
hosed for a long time before we realize the hit rate is way down due to 
the OS refusing 50% of the mallocs. Hard to tell if you've hit maxconns, 
blah blah blah. More easy work, maybe for 1.2.5.

- Method of dumping refcounts of "locked" items. I'm tracking down what 
I suspect is a refcount bug, and I expect us to have more of these in 
the future. It'll be great to be able to verify these offhand. If 
someone isolates a bum server, they can dump slabs, refcount, etc, and 
send to the list.

- Full item dump. I guess we should do this with the appropriate 
caveats. There's a potential patch floating around, we'll see about it.

- Fixing a lot of dynamic memory buffers. Per connection, per freelist, 
whatever. A lot of these can be turned into linked lists if, say, the 
'item' struct had a 'next' pointer. This should remove most of the 
various realloc logic.

- Clean up the network iov's to work like above, and also manage generic 
freelisted buffers. Which would remove the need for the specialized cas 
suffix buffer. These should be wrapped so they can be linklisted, 
instead of managed via dynamic arrays per connection. Could also be used 
with the binary protocol to reduce syscalls.

- TCP_CORK/TCP_NOPUSH where appropriate. I totally agree here, and it 
used to explicitly do this.

- New slabber engine. I view this as a bonus to making the slabber code 
dynamic. We can start cooking an experimental new slabber to do 
slab-reassignment, fragmentation avoidance, etc. Without really hosing 

- More tests. We need better test coverage. Please submit tests!

- "Standard benchmarks". Memcached's contributions have historically 
been based on "we ran this in production, here're some tests and proof 
it works fine". Recently it's been more about rapid cleanups and the new 
storage engine independence. It'd be really great to have some (say 
libmemcached based) tests to exercize (under realistic AND unrealistic 
measures!) everything.

- More documentation. I figure eventually someone will write docs with 
better english, but there're tons of ideas floating around. We should 
get them all down. Along with standard troubleshooting info, of which 
there is practically none!

- Cache::Memcached updates. Uh, whoops. This doesn't support any of the 
recent features.

On community related measures:

- Buildbot. I totally started on this, but have not completed it. I want 
to offer a buildbot network to the developer community. If you want a 
platform supported, provide a slave. Otherwise we will not target it 
(besides a couple of standby's).

- GIT. SVN is dead. We'll need to move on to git or hg in order to scale 
the developer pace. It's my understanding that just as many folks on the 
list prefer GIT as they do Mercurial, and SVN is mainly a convenience. 
Anything will be better. I could crack out weekly releases if I didn't 
have to worry about SVN branches/merges.

- Add more committers. I promise you guys; we're in an awkward position 
with commit access, but people at sixapart absolutely acknowledge and 
care about it. I've been having meetings, discussions, etc, about 
dealing with this sooner than later. I mostly help with memcached on my 
own time. However, sixapart does love memcached and the rest of the 
danga projects. I can't say anything definitive, of course, but I feel 
like I can share the feeling of "we give a shit" with all of you folks.

Part of having more committers means we need more dedicated reviewers. 
Memcached is a stable project trusted by many, many websites.

- We should do more, less formal, hackathons. These are great for 
hashing out minor issues, and I feel with more frequence they'd also be 
really good for cranking out code, too ;)

That's all for now.

I'm missing a number of line items (please don't be offended if I missed 
mentioning your submissions!) If it's in my inbox, it'll get a fair 
review and probably go in.

have fun,

More information about the memcached mailing list