Skip to content

fix: optimistic lock condition#26

Merged
shidil merged 2 commits intomainfrom
fix-optimistic-lock-condition
Jul 1, 2025
Merged

fix: optimistic lock condition#26
shidil merged 2 commits intomainfrom
fix-optimistic-lock-condition

Conversation

@NalinSajwan
Copy link
Contributor

@NalinSajwan NalinSajwan commented Jun 30, 2025

Description

Fixes optimistic lock condition to consider possibility of version attribute being non existing.

Info on how attribute_not_exists function works:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html#Expressions.OperatorsAndFunctions.Functions

Fixes:

Bug in the optimistic lock condition where the PutItem request fails with error (if attribute does not exists):

Failed to Put itemoperation error DynamoDB: PutItem, https response error StatusCode: 400, RequestID: 90696dd0-a67b-4039-a03d-41a4663f5515, ConditionalCheckFailedException: The conditional request failed

Other information & screenshots:

  • Optimistic lock test case works (when item does not exist in DB): image

@NalinSajwan NalinSajwan marked this pull request as ready for review July 1, 2025 00:31
Copilot AI review requested due to automatic review settings July 1, 2025 00:31
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR addresses a bug in the optimistic lock condition by updating the condition expression for DynamoDB PutItem requests to account for the non-existence of the version attribute. Key changes include:

  • Updating the condition expression in put_item.go to use "attribute_not_exists(#version) or #version = :oldVersion"
  • Removing the explicit creation of a new account item in tests/putitem_test.go
  • Refining the error variable assignment in the test file

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
tests/putitem_test.go Removed unnecessary account creation and refined variable assignment.
put_item.go Updated the optimistic lock condition expression to account for new items.
Comments suppressed due to low confidence (2)

put_item.go:24

  • The updated optimistic lock condition now correctly handles the case when the version attribute does not exist. Please confirm that this change fully aligns with the intended behavior for new item creation.
		condition := "attribute_not_exists(#version) or #version = :oldVersion"

tests/putitem_test.go:147

  • Using the short variable declaration improves clarity; however, please ensure that error handling remains consistent and any potential errors from GetItem are handled appropriately.
	err, _ := table.GetItem(ctx, pk, pk, &acc)

@shidil shidil merged commit 13b2e46 into main Jul 1, 2025
2 checks passed
@shidil shidil deleted the fix-optimistic-lock-condition branch July 1, 2025 00:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants