Error while adding string to large set


#1

hi ,

I got “1427:LDT-TOP Record Update Error” while adding string to a large set The large set might be updated by other process and this error occurs randomly.

how can I fix this issue, and what’s mean of “1427…” ?

thanks


#2

When modifying the LDT, the record that owns the bin which is the LDT needs to be updated. Do you have lots of writes to this LDT at the same time? Is the top record being updated as well? You might be running into the transaction queue limit for operations on a single record. You can try increasing or removing this limit:

transaction-pending-limit

Maximum pending transactions that can be queued up to work on the same key. Default set to 20.

http://www.aerospike.com/docs/reference/configuration/#transaction-pending-limit

FYI: Large Set is also being deprecated and only Large List will be available as the LDT type, you might want to convert to using that so you can avoid any future issues.


#3

Quexer,

I would suspect the issue with the record size limitation being hit with the default LLIST setting you are runing with.

What build are you using. Get to 3.5.8, that should resolve the issue.

– R


#4

hi raj,

I’m using 3.5.8, and I believe this issue is caused be by concurrent update, which has been mentioned by manigandham.

thanks.


#5

Transaction queue limit checks happen before transaction (i.e UDF) starts executing. Once UDF starts executing then such an errors cannot happen … Most common case of LDT hitting update errors is when attempt is made to write a record size bigger than configured write block size.

What is the error messages showing up in log file ?? What is size of string you are insert into set ?? What is configured write block size for the namespace ??

Also I just realilzed you are using LSET. It will be deprecated soon.

Please consider using LLIST. LLIST allows you to insert/delete unique items and check for list membership.

LLIST.add ( binName, value ) LLIST.exists ( binName, value ) LLIST.find ( binName, value ) LLIST.take ( binName, value ) LLIST.size ( binName ) LLIST.scan ( binName )

Value here can be one of the Integer or String for a given LLIST – R


#6

hi raj,

I didn’t change write block size for namespace, so it should be the default. The string adding to set is 24-length hex string.

As for LSET, I choose it because it provides atomic “add” operation (although there’s “LDT-Unique Key or Value Violation” error)

Does LLIST has this capacity ?


#7

LSET is set it is not a multiset. So any time an attempt to insert duplicate value into it you will hit unique key violation.

“atomic add” Can you elaborate what you intend to say.

All the LDT operation on all LDT type is atomic in nature.

LLIST.add(value) in its behavior exactly similart to LSET.add(value). LLIST does suppot mulitset but it is in Beta …

– R


#8

“atomic add”, I mean LSET should keep unique values, and we don’t need LSET.exists to check the value before it’s added. LSET works as expected.

if “LLIST.add(value) in its behavior exactly similart to LSET.add(value)”, I’ll try LLIST

thx.


#9

@quexer and @manigandham:

Thank you for posting about LDTs in our forum. Please see the LDT Feature Guide for current LDT recommendations and best practices.


#10

@quexer and @manigandham,

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.