<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi!<br>
    <br>
    On 10/15/2012 05:09 PM, Matthew Evans wrote:
    <blockquote cite="mid:SNT125-W43F778CF69C334747F09DD9C710@phx.gbl"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
      <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>
    </blockquote>
    It all depends... <br>
    Memory-wise the deletes will actually take place after the fixation
    is released.<br>
    Fixtable also means longer link chains in the buckets, so if you for
    example will replace all the objects in the table once during the
    timeslot, lookup will need to traverse twice as long lists for every
    element. <br>
    If you do heavy insertion (without deletion), you will also get much
    longer chains, as the number of buckets will not increase while the
    table is 'fixed'. <br>
    <br>
    So it depends on how much 'lots' is in your case...<br>
    <br>
    Have you considered using ordered_set instead? Then you wouldn't
    need fixation and would have no problem traversing the "moving"
    table. Performance on ordered set is not as bad as you would think
    and you can do nice optimizations when selecting by using partially
    bound keys. <br>
    <br>
    /Patrik<br>
    <blockquote cite="mid:SNT125-W43F778CF69C334747F09DD9C710@phx.gbl"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Thanks</div>
        <div><br>
        </div>
        <div>Matt</div>
        <div>________________________________<br>
          > From: <a class="moz-txt-link-abbreviated" href="mailto:mattevans23@@hotmail.com">mattevans23@@hotmail.com</a> <br>
          > To: <a class="moz-txt-link-abbreviated" href="mailto:sverker.eriksson@ericsson.com">sverker.eriksson@ericsson.com</a> <br>
          > Date: Mon, 5 Oct 012 0::4::1 -400 <br>
          > CC: <a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a> <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: <a class="moz-txt-link-abbreviated" href="mailto:sverker.eriksson@ericsson.com">sverker.eriksson@ericsson.com</a> <br>
          > > To: <a class="moz-txt-link-abbreviated" href="mailto:mattevans23@@hotmail.com">mattevans23@@hotmail.com</a> <br>
          > > CC: <a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a> <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: <a class="moz-txt-link-abbreviated" href="mailto:sverker.eriksson@ericsson.com">sverker.eriksson@ericsson.com</a> <br>
          > > >> To: <a class="moz-txt-link-abbreviated" href="mailto:mattevans23@@hotmail.com">mattevans23@@hotmail.com</a> <br>
          > > >> CC: <a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a> <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>
          > > >>> <a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a> <br>
          > > >>>
          <a class="moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a> <br>
          > > >>> <br>
          > > >>> <br>
          > > > <br>
          > > > <br>
          > > <br>
          > <br>
          > _______________________________________________
          erlang-questions <br>
          > mailing list <a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a> <br>
          > <a class="moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a> <br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
erlang-questions mailing list
<a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>
<a class="moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>