UnlockAsync fails with KV Error ETMPFAIL

Hi,

I’m trying to implement locking and unlocking around a document access. Lock succeeds fine using GetAndLockAsync.

When I try to unlock with UnlockAsync I get an error message, even with multiple retries:

Message: "KV Error: {Name=“ETMPFAIL”, Description=“Temporary failure. Try again”, Attributes=“temp,retry-now”}

Any idea what is going wrong or how to fix?

If it is significant, the GetAndLockAsync and UnlockAsync are in separate invocations of :
using ( var bucket = await _cluster.OpenBucketAsync

Thanks.

Hi @SLam,

Could you post a minimum sample of the code that’s not doing what you expect? If it can be reproduced, it could be a bug.

Note that when unlocking, you need to provide the CAS retrieved when getAndLocking. That’s how it knows the unlock comes from the same actor. You might double check that you’re doing that.

Yes. That is what I am doing but it still fails.

I am performing this command in between the GetAndLockAsync and UnlockAsync:

                var upsertResult = await bucket
                    .MutateIn<IDictionary<string, T>>( id )
                    .WithCas( docLock.CAS )
                    .Upsert( key, value )
                    .ExecuteAsync();

using the cas from the lock command. In the result of the upsert is a new cas value.

Which cas should I use when unlocking? The cas from the lock or the cas from the last mutation on the locked document?

My understanding is that every time a document is modified, it gets a new CAS value. Therefore, to unlock, you would use the CAS from the sub-document upsert. Is that what you’re currently doing?

Yes, that is what I am doing now but I still get an error when unlocking. I’ll try get an isolated example to share.
Thanks for following up :slightly_smiling_face:

Attached is a demo program that shows the problem I am having.
I’m using .net sdk 2.7.12

CBLockTest.zip (1.4 KB)