It depends on which client you used. For libmemcached:
http://docs.libmemcached.org/libmemcached/memcached_return_t.html

2016-06-24 18:37 GMT+01:00 Nishant Varma <tnish...@zeomega.com>:

> Also helpful if we have a detailed API documentation with error codes?
> Trying to read this but not so sure if I got it right
> https://github.com/memcached/memcached/wiki/BinaryProtocolRevamped
>
>
> On Friday, June 24, 2016 at 10:28:41 PM UTC+5:30, Nishant Varma wrote:
>>
>> Right, Thanks for clarifying and reaffirming my thoughts on how CAS is
>> used. Also appreciate pointing out that error codes exist in Memcache. We
>> use clients (Python Memcached) that mask these errors, so never knew these
>> existed.
>>
>> I have seen CAS getting done as a re-try mechanism in a code and was
>> wondering if it might just work as a side effect in this scenario: 
>> memcache.cas(key,
>> value), the CAS failed because of server load(?), client indicated a
>> failure, and the programmer started using this side effect. The CAS
>> might have failed due to a dirty state too, but the programmer kept on
>> retrying until it effectively set of the new value. You get my point?
>> The programmer achieved his goal which actually was not really intended and
>> was a side effect due to his client. I know it depends on the clients.
>>
>> That also leads to me one extra question would memcache.cas and
>> memcache.add fails because of server load or is it only memcache.set that
>> has this problem?
>> I believe I need to really start dealing with error codes to solve my
>> problem with memcache (which is a weird kind of lock thing) and possibly
>> use a different tool though memcache does achieve a good 99% success ratio.
>>
>> Thanks in advance for your help.
>>
>>
>> On Friday, June 24, 2016 at 8:59:00 PM UTC+5:30, Colin Pitrat wrote:
>>>
>>> The usage is the same whethere your data is a simple counter or a
>>> complex structure serialized.
>>> CAS allows you to ensure that the value didn't change between the read
>>> and the update that follows it.
>>> The idea is that if it fails, it means someone else updated the value in
>>> between and therefore you need to re-read it, redo your process and redo
>>> the CAS.
>>>
>>> If you do a set and it fails, I don't see why you would make a CAS after
>>> that.
>>> I see 4 options that make sense in my opinion:
>>>  - retrying the set (but beware of adding more load in case the first
>>> set failed because the server is overloaded)
>>>  - failing the transaction (e.g: returning an error to the user doing
>>> the action)
>>>  - doing a delete on the key (to remove a now outdated value) but if the
>>> update fail it will probably fail, unless the issue was with the value you
>>> tried to set
>>>  - ignoring the error
>>> A possibility is to take a different action depending on the error you
>>> get.
>>>
>>> What you can do is make a CAS after a failing add, because if you read
>>> the value, it was missing and the add fails (with the "already exist" error
>>> code) it means the key was set in the meantime.
>>> So you can read the value and make a cas to update it.
>>>
>>> Hope it helps
>>>
>>> 2016-06-24 14:12 GMT+01:00 Nishant Varma <tnis...@zeomega.com>:
>>>
>>>> http://neopythonic.blogspot.in/2011/08/compare-and-set-in-memcache.html,
>>>> GVR talks about a use case of a simple counter.
>>>>
>>>> Generalizing that, 1) would it be fine to say you could use CAS when
>>>> you need to modifying the data according to the latest state? For
>>>> example counter, appending a list, modifying a dictionary etc ..?
>>>>
>>>> 3) I could *retry* memcache.cas(key, value) where value is a static
>>>> data, but I think it doesn't serve any more purpose than memcache.set(key,
>>>> value) right?
>>>>
>>>> I have seen some snippets that try to overcome memcache.set misses by
>>>> implementing a memcache.cas. It sounds logical because it is done in a
>>>> *retry* but what is not logical is that it *fails* if the value has
>>>> *changed* already and not if a *miss* happened, am I right?
>>>>
>>>> 4) However I wonder if it is possible to use memcache.cas for
>>>> overcoming set misses as a side effect? A miss happened, client
>>>> returned a failure, retry happened it worked.
>>>>
>>>> And I wonder 5) if there is a better way to handle set failures 6) does
>>>> memcache.add also have set failure possibilities.
>>>>
>>>> This e-mail message (including any attachments) may contain information
>>>> that is confidential, protected by the attorney-client or other applicable
>>>> privileges, or otherwise comprising non-public information. This message is
>>>> intended to be conveyed only to the designated recipient(s). If you have
>>>> any reason to believe you are not an intended recipient of this message,
>>>> please notify the sender by replying to this message and then deleting it
>>>> from your system. Any use, dissemination, distribution, or reproduction of
>>>> this message by unintended recipients is not authorized and may be 
>>>> unlawful.
>>>>
>>>> --
>>>>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "memcached" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to memcached+...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
> This e-mail message (including any attachments) may contain information
> that is confidential, protected by the attorney-client or other applicable
> privileges, or otherwise comprising non-public information. This message is
> intended to be conveyed only to the designated recipient(s). If you have
> any reason to believe you are not an intended recipient of this message,
> please notify the sender by replying to this message and then deleting it
> from your system. Any use, dissemination, distribution, or reproduction of
> this message by unintended recipients is not authorized and may be unlawful.
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "memcached" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to memcached+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"memcached" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to memcached+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to