flush_all is broken?

Martin Blais blais at furius.ca
Sat May 13 21:49:38 UTC 2006

Hello memcached'ers,

This will break with memcached-1.1.12:

#!/usr/bin/env python

# Have some data, will store.
value = ("Some value",)

# Connect to memcached.
import memcache
mc = memcache.Client([''], debug=0)

# Flush everything (this triggers the bug).

# Set the value.
mc.set("some_key", value)

# Get it.
newvalue = mc.get("some_key")

# Check that we have what we stored.
assert newvalue == value  ## <-- fails!

Am I missing something about the meaning of flush_all?
I just tested with 1.1.13-pre, and I get the same problem.

Here is the verbose output from the server:

<7 new client connection
<7 flush_all
>7 OK
<7 set some_key 1 0 20
<7 get some_key
>7 END
<7 connection closed.

(Rummaging in the code)

Ah, found it, the problem is due to the resolution of the
clock (1 second) and the way that the flush_all is
implemented.  It simply sets the oldest's time to NOW, but
the set/get that follow also happen within that second,
and the get is thus ignored.  Looking at it more, I think
that the O(1) flush_all implementation is not possible at

Any commments/info welcome.


More information about the memcached mailing list