I have been reading the archive. Here is a post about tags from Oct 3. > 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'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. 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.) 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. Brian Beuning
