[erlang-questions] ets:select badarg question (R15B)

Sverker Eriksson <>
Mon Oct 15 11:49:14 CEST 2012


What options are you using when the table is created?

/Sverker, Erlang/OTP

Matthew Evans wrote:
> Hi,
> I'm running a select with a continuation on a public ets table with approximately 20,000 records.
> The original call to the select is: ets:select(TableName,[{'$1',[],['$_']}],RecordsToGet), then an ets:select/1 on the continuation.
>
>
>
>
>
>
>
>
> The process that is spawned to walk the table is sitting in a recursive loop doing a select (grabbing about 150 records each time), processing the matching records (which includes possibly deleting some of these records), then sleeping for a few seconds. It takes about 900 seconds to walk through the table. As well as records getting deleted, new records are added to the table during this time.
> Every now and then I get an exception in the process doing the select/1:
> Error in process <0.16218.1> on node '' with exit value: {badarg,[{ets,select,[{'table_E0:39:D7:00:11:80',301,6,<<0 bytes>>,[{p_MacEntry.......  (truncated here)
> This is the code (all running in the same process that started the select) obviously the last ets:select is causing the crash:
>
>
>
>
>
>
>
>
> start_aging1(AgeInterval,MaxAge,SelectData) ->
>      start_aging1(AgeInterval,MaxAge,SelectData,0).
> start_aging1(_AgeInterval,_MaxAge,'$end_of_table',RecsAged) ->
>      gen_server:cast(?MODULE,{completed_aging_operation,RecsAged});
> start_aging1(_AgeInterval,MaxAge,{Matches,'$end_of_table'},RecsAged) ->
>      RecordsAgedCount = age_records(Matches,[],MaxAge*1000000,os:timestamp()),
>      gen_server:cast(?MODULE,{completed_aging_operation,RecsAged+RecordsAgedCount});
> start_aging1(AgeInterval,MaxAge,{Matches,Continuation},RecsAged) ->
>      RecordsAgedCount = age_records(Matches,[],MaxAge*1000000,os:timestamp()),
>      timer:sleep(AgeInterval),
>      start_aging1(AgeInterval,MaxAge,ets:select(Continuation),RecsAged+RecordsAgedCount).
>
> I'm not sure what could be the cause of the select getting a bad arg.
> Any ideas?
> Thanks
> Matt                                             		 	   		  
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>   




More information about the erlang-questions mailing list