1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| def update_with_optimistic_lock(user_id, new_data, version):
try:
table.update_item(
Key={'user_id': user_id},
UpdateExpression='SET #data = :data, #ver = :new_ver',
ConditionExpression='#ver = :current_ver',
ExpressionAttributeNames={
'#data': 'data',
'#ver': 'version'
},
ExpressionAttributeValues={
':data': new_data,
':new_ver': version + 1,
':current_ver': version
}
)
except ClientError as e:
if e.response['Error']['Code'] == 'ConditionalCheckFailedException':
print('競合が発生しました。再取得して再試行してください')
raise
|