I want to implement locking in my application with below approach:
To get lock: Agent will call my custom API which would call couchbase server’s getAndLock API to get a lock. If it gets lock successfully, it would return CAS value otherwise would return -1. Returned CAS value would be passed to agent.
To release lock:Updated document with CAS value would be synced through Sync Gateway which would release lock if CAS value matches with that in server.
My question is where in document should I set CAS value?
Will it work through sync gateway(save doc and release lock) or should I call couchbase server API to save and release lock?
I think I’d need more specifics to understand exactly what you’re trying to accomplish with the locking, but there are a couple of problems with the approach. In particular, there’s no functionality during a Sync Gateway write that would allow you to do a CAS check against the Couchbase Server CAS (since Sync Gateway is designed for MVCC and not CAS-based concurrency).
An alternative might be to set a ‘lockedBy’ property in the document to a username (via your custom API), and then use the Sync Function to restrict write access based on the lockedBy property of oldDoc.
Are you doing the Couchbase Server SDK to do CRUD operation on the data.
or
are you doing CRUD using HTTP REST through Sync Gateway Data port :4984/{db}/