On Nov 2, 2007, at 16:17 , Brian Beuning wrote:
Firstly, I think there are two new commands to implement tags:
1) add_tag (key, tag_name)
2) invalidate_tag (tag_name)
It took me a little while to figure out that add_tag() does not
need to talk
with all nodes of the cache but it seems like invalidate_tag() does
need to talk to all nodes.
What is going to happen if one or more nodes are behind a network
partition
type failure?
(The Ethernet cable on a server is unplugged but memcached is still
running.)
They could not be notified to increment their tag generation number
so when
the partition is fixed and the machines become accessible, those
nodes have stale data.
It has been pointed out that mass invalidation would not be an
atomic operation. Perhaps it should be stated more clearly on the
packaging. :)
[It's unclear whether it's worth the effort to ever release a tag
once
it's been added.
If we assume that tags live forever, we don't have to refcount
them and a
few things get easier. Any opinions?]
I think the list agreed releasing tags is good.
Right, there were good arguments for this.
A unified way to handle this is to let a tag age out of the cache
using the
LRU and timeout mechanisms already in place. The only twist is
that accessing a key is also considered accessing all the tags
associated with that key for LRU purposes. Given this rule, a tag
should never get flushed until after all the keys using the tag are
flushed.
(When a tag has just one key left using the tag and the key has not
been accessed, there is sort of a race as to which will age out
first. This is a tricky case to get right.)
We didn't actually consider placing the tags *in* the cache, but it
would be possible. Every object has a reference count, so you could
just keep the reference count high enough to avoid LRU (perhaps the
count would be equal to the things doing the referencing).
Are the key and tag names one or two namespaces? That is can you
have a tag
and key with the same name?
I suggest making it one namespace for simplicity.
The original thought was that they were completely orthogonal, so
no, there wouldn't be any implicit correlation between an key and a
tag with the same name.
--
Dustin Sallings