Are generation errors triggered if an LDT, LargeMap in particular, is modified concurrently?
No. The way LDTs work is that the entire LDT operation (create, read, update, delete) is done under the main (parent) record lock. Operations to the LDT are basically serialized thru the parent record. Thus, it is not possible to have concurrent (inter-mingled) LDT operations from multiple client calls; they will be implicitly serialized.
There’s an interesting side-effect to this design, which is that when you call a UDF that does multiple LDT operations (confined to one record, although it can involve multiple LDTs), all of that work is basically done as a single transaction – since it is holding the parent record lock. So, you can do some fairly inventive things with this capability.
So the generation number for a record is not changed if an LDT on that record is modified?
The generation count is modified for any UDF or LDT call, just like it would be modified for any Key-Value call. My point is that there is nothing special about UDF/LDT that would trigger generation count errors when invoking LDT functions.
Thank you for posting about LDTs in our forum. Please see the LDT Feature Guide for current LDT recommendations and best practices.
Effective immediately, we will no longer actively support the LDT feature and will eventually remove the API. The exact deprecation and removal timeline will depend on customer and community requirements. Instead of LDTs, we advise that you use our newer List and SortedMap APIs, which are now available in all Aerospike-supported clients at the General Availability level. Read our blog post for details.