Dynamoid / dynamoid

Ruby ORM for Amazon's DynamoDB.
MIT License
582 stars 195 forks source link

calling .save on a nested obj is not working on 3.10.0 #814

Closed rhuang closed 1 month ago

rhuang commented 1 month ago
my_obj.metadata[:some][:path][:count] = 5
my_obj.save # this does not actually trigger an `UPDATE` request

my_obj.fubar = 'something else'
my_obj.save # this triggers an `UPDATE` request

On 3.8.0, calling .save triggers a PUT for both scenarios above. On 3.8.0, if you change nested attributes like my_obj.metadata[:some][:path][:count] = 5, calling my_obj.changes afterwards returns an empty hash.

For context, I was operating on the same object but different columns, from 2 different threads, and realized one thread was overriding the other because .save calls PUT, so I was checking if I can get Dynamoid to call UPDATE to avoid this issue.

andrykonchin commented 1 month ago

Yeah, it's a known issue. Changes in a nested object (e.g. of a custom type, or serialized/map/array types) aren't detected and don't trigger persisting.

There are already issues for it: #666, #749, #738

rhuang commented 1 month ago

Ah, sorry for the dup. I will close and follow the others.