If multi-threads call UDF function(with write-operation) on same record, there have internal locks or something else to protect the data?
Yes, records are locked during write operations (from either the client or from record UDF).
1 Like
Locked when writing operation. How about reading?
Calling as_operations_add_incr(ops, “bin”, 1) from client should be thread-safe.
But calling a lua function below thread-safe ? :
if aerospike:exists(rec) then
local v = rec['bin']
rec['bin'] = v + 1
return aerospike:update(rec)
else
...
end
Yes.
More info here:
Thanks. The link is helpful
I am recently doing a POC on UDP with a similar use case. Can someone explain how aersopike avoids race condition when multiple threads call this UDP on same record?
Ahead of executing a record UDF on a specified key a record lock is obtained. If other threads are trying to do the same they will queue up.