Memcache CAS

Chris Goffinet goffinet at
Mon Sep 17 07:31:13 UTC 2007

1) Okay. Does it make sense then to just implement a 'revision' into  
the item struct? That way we can just revision++ on new 'set'?

2) I'll add support for those 3 again so you can see what happened.  
I'll look into draining the output correctly so client's won't have an  
issue with this.

Chris Goffinet
goffinet at

On Sep 17, 2007, at 12:23 AM, Dustin Sallings wrote:

> 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