<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
I'll rephrase that. This is my concern from the ets documentation for safe_fixtable/2:<div><br><span style="font-family: 'Lucida Console'; font-size: 12.727272033691406px; ">Note that no deleted objects are actually removed from a fixed table until it has been released. If a process fixes a table but never releases it, the memory used by the deleted objects will never be freed. The performance of operations on the table will also degrade significantly.</span><br><br>Is there a potential problem on having a safe_fixtable "active" for long periods of time on a table having lots of inserts and deletes?</div><div><br></div><div>Thanks</div><div><br></div><div>Matt</div><div>________________________________<br>> From: mattevans23@@hotmail.com <br>> To: sverker.eriksson@ericsson.com <br>> Date: Mon, 5  Oct 012  0::4::1  -400  <br>> CC: erlang-questions@erlang.org <br>> Subject: Re: [erlang-questions] ets:select badarg question (R5BB) <br>> <br>> Many thanks, <br>> <br>> I'll give that a go. I am however a little worried about having a <br>> safe_fixtable "active" on a table for 00  seconds so might need to be a <br>> little smarter. <br>> <br>> Cheers <br>> <br>> Matt <br>> <br>> > Date: Mon, 5  Oct 012  4::0::4  +200  <br>> > From: sverker.eriksson@ericsson.com <br>> > To: mattevans23@@hotmail.com <br>> > CC: erlang-questions@erlang.org <br>> > Subject: Re: [erlang-questions] ets:select badarg question (R5BB) <br>> > <br>> > You need to use ets:safe_fixtable/  to get a "sensible" result from <br>> > select/match with continuation on unordered tables. Otherwise you may <br>> > miss records, get double hits and (as in your case) get badarg if the <br>> > table has shrunken due to deleted record causing the continuation to <br>> > point out of table bounds. One could argue that '$end_of_table' would be <br>> > a more suitable result than badarg for this case. <br>> > <br>> > I see that the documentation is not clear about this. It describes usage <br>> > of safe_fixtable together with first/  and next/  but it does not state <br>> > that it also is needed for select/match with continuation. <br>> > Single call select/match does not need safe_fixtable. <br>> > <br>> > /Sverker, Erlang/OTP <br>> > <br>> > Matthew Evans wrote: <br>> > > Hi <br>> > > These are the options <br>> > > <br>> > > <br>> > > ets:new(StationIdTableName,[{keypos,}},named_table,public]), <br>> > > The only odd things I can think of is that during the select <br>> records are getting deleted and added. Also, the select operation is <br>> run slowly (over 00  seconds) <br>> > > Again, this isn't every time I get the crash. <br>> > > Matt <br>> > > <br>> > > <br>> > >> Date: Mon, 5  Oct 012  1::9::4  +200  <br>> > >> From: sverker.eriksson@ericsson.com <br>> > >> To: mattevans23@@hotmail.com <br>> > >> CC: erlang-questions@erlang.org <br>> > >> Subject: Re: [erlang-questions] ets:select badarg question (R5BB) <br>> > >> <br>> > >> What options are you using when the table is created? <br>> > >> <br>> > >> /Sverker, Erlang/OTP <br>> > >> <br>> > >> Matthew Evans wrote: <br>> > >> <br>> > >>> Hi, <br>> > >>> I'm running a select with a continuation on a public ets table <br>> with approximately 0,,00  records. <br>> > >>> The original call to the select is: <br>> ets:select(TableName,[{'$'',[],['$_']}],RecordsToGet), then an <br>> ets:select/  on the continuation. <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> The process that is spawned to walk the table is sitting in a <br>> recursive loop doing a select (grabbing about 50  records each time), <br>> processing the matching records (which includes possibly deleting some <br>> of these records), then sleeping for a few seconds. It takes about 00  <br>> seconds to walk through the table. As well as records getting deleted, <br>> new records are added to the table during this time. <br>> > >>> Every now and then I get an exception in the process doing the <br>> select/:: <br>> > >>> Error in process <..6218..>> on node 'xxxxx@E39DD001180'' with <br>> exit value: {badarg,[{ets,select,[{'table_E::9::D::0::1::0'',01,,,,<<  <br>> bytes>>,[{p_MacEntry....... (truncated here) <br>> > >>> This is the code (all running in the same process that started <br>> the select) obviously the last ets:select is causing the crash: <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> <br>> > >>> start_aging((AgeInterval,MaxAge,SelectData) -> <br>> > >>> start_aging((AgeInterval,MaxAge,SelectData,)). <br>> > >>> start_aging((_AgeInterval,_MaxAge,'$end_of_table',RecsAged) -> <br>> > >>> gen_server:cast(?MODULE,{completed_aging_operation,RecsAged}); <br>> > >>> start_aging((_AgeInterval,MaxAge,{Matches,'$end_of_table'},RecsAged) -> <br>> > >>> RecordsAgedCount = <br>> age_records(Matches,[],MaxAge*000000,,os:timestamp()), <br>> > >>> <br>> gen_server:cast(?MODULE,{completed_aging_operation,RecsAged+RecordsAgedCount}); <br>> > >>> start_aging((AgeInterval,MaxAge,{Matches,Continuation},RecsAged) -> <br>> > >>> RecordsAgedCount = <br>> age_records(Matches,[],MaxAge*000000,,os:timestamp()), <br>> > >>> timer:sleep(AgeInterval), <br>> > >>> <br>> start_aging((AgeInterval,MaxAge,ets:select(Continuation),RecsAged+RecordsAgedCount). <br>> > >>> <br>> > >>> I'm not sure what could be the cause of the select getting a bad arg. <br>> > >>> Any ideas? <br>> > >>> Thanks <br>> > >>> Matt <br>> > >>> <br>> > >>> <br>> ------------------------------------------------------------------------ <br>> > >>> <br>> > >>> _______________________________________________ <br>> > >>> erlang-questions mailing list <br>> > >>> erlang-questions@erlang.org <br>> > >>> http://erlang.org/mailman/listinfo/erlang-questions <br>> > >>> <br>> > >>> <br>> > > <br>> > > <br>> > <br>> <br>> _______________________________________________ erlang-questions <br>> mailing list erlang-questions@erlang.org <br>> http://erlang.org/mailman/listinfo/erlang-questions <br></div>                                           </div></body>
</html>