Concurrent update and rollback capabilities

Hi,

I have a requirement where every select should provide end user with a unique document. For this, I have used a sub-query select like below.

update default use keys ( select raw meta().id from default where type='New' and previousValueField = 'Data123' order by createdTimeStamp limit 1) set user='user1' and type='working' and previousValueField = 'DataABC123' returning meta().id as docId

This is working fine for concurrent users with minimum reties for CAS conflicts.
However, if a downstream system after the update using the above query fails; I do not have the provision to roll back the ‘previousValueField’ back to ‘Data123’ as I will not be able to capture individual field value for roll-back in a single n/w update call and keep it for rollback.
Requesting your help in understanding what can be done to achieve this.
If I divide the select query to provide the documentId and the before sate of the fields that helps to be capture (for rollback) before updating (2 network calls - one for select and other for update); the concurrency issue is experienced more (concurrent selects are giving the same doc().id but while the second network call is made to update, the document is already in updated state) and hence the number of retries increases causing a delay in getting unique cases (End user experience is not good)
CB Version - 6.5 EE

Regards,
bora.mohan

OR

update default 
use keys ( select raw meta().id from default where type='New' and previousValueField = 'Data123' order by createdTimeStamp limit 10) 
set user='user1' , type='working' , previousValueField = 'DataABC123' 
 where type='New' and previousValueField = 'Data123' 
LIMIT 1
returning meta().id as docId

Retry on cas mismatch or 0 rows

OR

If above doesn’t work

select raw meta().id from default where type=‘New’ and previousValueField = ‘Data123’ order by createdTimeStamp limit 10

All above documents in loop in SDK.
     GET document with cas
      If values changed continue
     else update with cas if succeed break
     else continue

If none of them updated repeat select and loop