[erlang-questions] mnesia question

Michael McDaniel <>
Sat Nov 22 02:06:50 CET 2008


  try 
 
  5> mnesia:stop().
  6> q().
 
 
  instead of the CTRL-C,

  then restart and check - showed abcde for me.
 
 ~Michael
 P.S. of course, using db_put and db_get instead, and commenting out
      'utils' lines
 
 
 On Sat, Nov 22, 2008 at 12:28:03AM +0000, Linan Wang wrote:
 >    hi,
 > 
 >    I'm coding a simple queue application on top of mnesia. I found one
 >    strange thing that the last inserted row would lost if not referenced
 >    after restart. Is this a feature, bug, or my mistake? It has been
 >    troubling me for two days. I'm running R12 B5 on an iMac. Any
 >    suggestion is appreciated.
 > 
 >    =================================
 > 
 >    My codes:
 > 
 >    =================================
 > 
> >    -module(taskq).
> >    -export([start/0, db_put/1, db_get/0]).
> > 
> >    -record(oid, {name, id}).
> >    -record(task, {id, info}).
> >    start()->
> >        %% start db or create;
> >        mnesia:start(),
> >        try
> >            mnesia:table_info(task, type)
> >        catch
> >            exit: _ ->
> >                utils:log("No db exists, create one."),
> >                mnesia:stop(),
> >                mnesia:create_schema([node()]),
> > 
> >                mnesia:start(),
> >                mnesia:create_table(oid,  [{disc_copies, [node()]}, {type,
> >    set}, {attributes, record_info(fields, oid)}]),
> >                mnesia:create_table(task, [{disc_copies, [node()]}, {type,
> >    ordered_set}, {attributes, record_info(fields, task)}]),
> > 
> >                mnesia:transaction(fun()->
> >                        mnesia:s_write(#oid{name = task, id = 0})
> >                    end),
> > 
> >                utils:log("Taskdb created.")
> >        end.
> > 
> >    db_put(Info)->
> >        mnesia:transaction(fun()->
> >            Id = mnesia:dirty_update_counter({oid, task}, 1),
> >            mnesia:s_write(#task{id = Id, info =  Info})
> >            end).
> >    db_get()->
> >        {atomic, R} = mnesia:transaction(fun()->
> >            Id = mnesia:first(task),
> >            case Id of
> >                '$end_of_table' ->
> >                    none;
> >                _ ->
> >                    [Ret] = mnesia:wread({task, Id}),
> >                    mnesia:s_delete({task, Id}),
> >                    Ret#[1]task.info
> >            end
> >            end),
> >        R.
> >    ==================================
> >    Execution session:
> >    ==================================
> >    Linan-iMac:~$ erl
> >    Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0]
> >    [kernel-poll:false]
> >    Eshell V5.6.5  (abort with ^G)
> >    1> c(taskq).
> >    {ok,taskq}
> >    2> c(utils).
> >    {ok,utils}
> >    3> taskq:start().
> >    2008/11/22 0:23:17 No db exists, create one.
> >    =INFO REPORT==== 22-Nov-2008::00:23:17 ===
> >        application: mnesia
> >        exited: stopped
> >        type: temporary
> >    2008/11/22 0:23:18 Taskdb created.
> >    ok
> >    4> taskq:put(abcde).
> >    {atomic,ok}
> >    5>
> >    BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
> >           (v)ersion (k)ill (D)b-tables (d)istribution
> >    q
> >    Linan-iMac:~$ erl
> >    Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0]
> >    [kernel-poll:false]
> >    Eshell V5.6.5  (abort with ^G)
> >    1> taskq:start().
> >    ordered_set
> >    2> taskq:get().
> >    none
> >    3>
> >    Linan Wang
> > 
> > References
> > 
> >    1. http://task.info/
> 
> > _______________________________________________
> > erlang-questions mailing list
> > 
> > http://www.erlang.org/mailman/listinfo/erlang-questions
> 
> -- 
> Michael McDaniel
> Portland, Oregon, USA
> http://autosys.us
> 




More information about the erlang-questions mailing list