I am trying to lock an object in a table with a function that looks like this:
def lock():
dynamodb = boto3.resource('dynamodb', endpoint_url="http://localhost:8000")
table = dynamodb.Table('table')
response = table.update_item(
Key={
'id': "id1",
'created_at': "2022-02-06T12:07:45.602721617Z"
},
UpdateExpression="SET #O.L = :locked",
ConditionExpression="object.locked <> :locked",
ExpressionAttributeValues={':locked': True},
ReturnValues="UPDATED_NEW"
)
return response
Given that several workers might be trying to get the lock at the same time and there is no way to have consistent write in Dynamodb. Is it possible for multiple workers to acquire the lock at the same time?
When we use conditional expression in save operation (with Save expression), does the read for that conditional expression is strongly consistent?