Memcache CAS
Dustin Sallings
dustin at spy.net
Mon Sep 17 07:23:13 UTC 2007
On Sep 17, 2007, at 0:12, Chris Goffinet wrote:
> 1) For :1113 I noticed if I added the item_remove diff like you
> suggested, it ends up returning the memory identifier of the new
> variable that is always the same in memory vs address of actual
> item pulled from item_get. Suggestions to fix? Try it yourself,
> when you use the same itmp variable on it and set a few items over
> and over again. It will usually always be same memory address (even
> if data changes).
I suppose that makes sense with the slab allocator. Perhaps the
memory address is not adequate and a counter would be more
appropriate after all.
> 2) Yeah I expanded item_alloc because the way memcache reads
> through the loop of data sent. Originally I did it the way I sent
> you, but ran into an issue with existing clients. I noticed that
> memcached would throw an error right when memcache read the cas
> command (which is OK..). But all of our commands (add,replace,set)
> wait until complete_nread occur before returning either STORED/
> NOT_STORED to be compatible with existing clients.
Draining the input buffer does seem like the right thing to do. I
think it's somewhat important to be able to distinguish between an
allocation failure, match failure, and and a missing record.
In my binary protocol implementation, I implemented a command that
could transmit an error back to the client and sink a chunk of data
whose size is known ahead of time. I use it for unknown commands,
failing sets, etc... so I can basically do this when a cas comparison
fails:
write_bin_error(c, ERR_EXISTS, vlen);
--
Dustin Sallings
More information about the memcached
mailing list