[erlang-questions] Ridiculuous newbie mnesia question.

Jeffrey Rennie surferjeff@REDACTED
Wed Oct 27 04:56:47 CEST 2010


Thank you Mazen.

Where can I find a book or document that contains such detailed
explanations?  I'm having a hard time grasping the big picture for mnesia.
I've read all the docs that are part of the erlang distribution.

> -----Original Message-----
> From: Mazen Harake [mailto:mazen.harake@REDACTED]
> Sent: Monday, October 25, 2010 12:57 AM
> To: erlang-questions@REDACTED
> Cc: Jeffrey Rennie
> Subject: Re: [erlang-questions] Ridiculuous newbie mnesia question.
> 
> Although all these points are valid I would like to add a third point
> which should solve this particular situation;
> 
> 3. The line '[] = [backgammon_games,game_record]' means that no node,
> which is a copy-holder of these tables, is connected. This means that
> you should first start one of those nodes (or a "fake" of one with the
> same nodename) and then start mnesia and do
> mnesia:change_config(extra_db_nodes, N) (as Ulf mentioned) where N is a
> copy-holder of those tables. When this is done the node name will show
> up like this: '[{foo@REDACTED, ram_copies}] =
> [backgammon_games,game_record]'  and then it is safe to remove the
> table.
> 
> The important part here is the "copy-holder" concept. An empty list
> means "no one is available", but the local node still knows about it so
> it "exists" but it doesn't exist in a place where you can change it (it
> is in a different dimension >:P). That is the reason why you can't
> create it nor delete it.
> 
> /Mazen
> 
> On 25/10/2010 08:41, Ulf Wiger wrote:
> > Hi Jeffrey,
> >
> > Looking at the mnesia:info() output, there are a couple of things
> > to note.
> >
> > 1. 'running db nodes = [emacs@REDACTED]' means that while a@REDACTED
> >     and b@REDACTED might be running at the erlang level, perhaps even
> >     with mnesia runnin, they are not connected to emacs@REDACTED
> >
> > 2. The line '"c:/.../Mnesia.emacs@REDACTED" is NOT used' means that
> >      you have not created a persistent schema. Normally, the
> persistent
> >      schema indicates which nodes are part of the mnesia cluster. Any
> >      other nodes that want to join should specify -mnesia
> extra_db_nodes Ns,
> >      where Ns includes at least some of the nodes listed in the
> persistent schema.
> >
> > To create a persistent schema, you run this before starting mnesia:
> >
> > mnesia:create_schema(Nodes).
> >
> > ...with the nodes in Nodes all up and running. You only need to call
> it
> > from one node; it will create a schema on each node automatically.
> >
> > BR,
> > Ulf W
> >
> > On 25 Oct 2010, at 07:30, Jeffrey Rennie wrote:
> >
> >> I launched a new erl node with a proper -sname, and I'm still
> experiencing
> >> the same problem.  Yes, nodes a@REDACTED and b@REDACTED are up and
> running.
> >>
> >> (emacs@REDACTED)17>  backgammon:init().
> >> {atomic,ok}
> >> (emacs@REDACTED)18>  backgammon:insert_game(1, "Jeff").
> >> {aborted,{no_exists,game_record}}
> >> (emacs@REDACTED)19>  backgammon:init().
> >> {aborted,{already_exists,game_record}}
> >> (emacs@REDACTED)20>  mnesia:info().
> >> --->  Processes holding locks<---
> >> --->  Processes waiting for locks<---
> >> --->  Participant transactions<---
> >> --->  Coordinator transactions<---
> >> --->  Uncertain transactions<---
> >> --->  Active tables<---
> >> schema         : with 3        records occupying 656      words of
> mem
> >> ===>  System info in version "4.4.13", debug level = none<===
> >> opt_disc. Directory
> >> "c:/Users/jeff/code/code/scratch/erlang/Mnesia.emacs@REDACTED" is NOT
> used.
> >> use fallback at restart = false
> >> running db nodes   = [emacs@REDACTED]
> >> stopped db nodes   = []
> >> master node tables = []
> >> remote             = [backgammon_games,game_record]
> >> ram_copies         = [schema]
> >> disc_copies        = []
> >> disc_only_copies   = []
> >> [] = [backgammon_games,game_record]
> >> [{emacs@REDACTED,ram_copies}] = [schema]
> >> 4 transactions committed, 3 aborted, 0 restarted, 0 logged to disc
> >> 0 held locks, 0 in queue; 0 local transactions, 0 remote
> >> 0 transactions waits for other nodes: []
> >> ok
> >> (emacs@REDACTED)21>  mnesia:delete_table(backgammon_games).
> >> {aborted,{no_exists,backgammon_games}}
> >> (emacs@REDACTED)22>  mnesia:delete_table(game_record).
> >> {aborted,{no_exists,game_record}}
> >> (emacs@REDACTED)23>  backgammon:init().
> >> {aborted,{already_exists,game_record}}
> >> (emacs@REDACTED)24>
> >>
> >>
> >>> -----Original Message-----
> >>> From: Ulf Wiger [mailto:ulf.wiger@REDACTED]
> >>> Sent: Sunday, October 24, 2010 3:02 PM
> >>> To: Jeffrey Rennie
> >>> Cc: erlang-questions@REDACTED
> >>> Subject: Re: [erlang-questions] Ridiculuous newbie mnesia question.
> >>>
> >>>
> >>> Hi Jeffrey,
> >>>
> >>> The problem is that you have specified that the backgammon_games
> >>> table should have copies on a@REDACTED and b@REDACTED, but your
> >>> Erlang shell has the node name nonode@REDACTED (i.e. Erlang was
> >>> started without distribution).
> >>>
> >>> One might argue whether it wouldn't have been better if mnesia had
> >>> refused to create the table in the first place. As it is now, it
> >>> believes
> >>> it exists, because there is an entry in the schema, but it refuses
> to
> >>> delete it because it has no active replicas. But since that's not
> what
> >>> it
> >>> complains about, I can understand your confusion. :)
> >>>
> >>> BR,
> >>> Ulf W
> >>>
> >>>
> >>> On 24 Oct 2010, at 23:37, Jeffrey Rennie wrote:
> >>>
> >>>> I seem to be stuck in a state where I can't create a table because
> it
> >>>> exists, but I can't delete the table because it doesn't exist!
> >>>>
> >>>> I searched the mnesia documentation, and I couldn't find a
> definition
> >>>> of the "Tab" arg passed to many mnesia functions.
> >>>>
> >>>> Here's what I tried:
> >>>>
> >>>> Eshell V5.7.5  (abort with ^G)
> >>>> 2>  c(backgammon).
> >>>> {ok,backgammon}
> >>>> 5>  c(backgammon).
> >>>> {ok,backgammon}
> >>>> 7>  mnesia:start().
> >>>> ok
> >>>> 8>  backgammon:init().
> >>>> {atomic,ok}
> >>>> 11>  c(backgammon).
> >>>> {ok,backgammon}
> >>>> 12>  backgammon:dumpfields().
> >>>> [player_turn,dice,board]
> >>>> 13>  c(backgammon).
> >>>> {ok,backgammon}
> >>>> 14>  backgammon:init().
> >>>> {aborted,{already_exists,backgammon_games}}
> >>>> 15>  mnesia:info().
> >>>> --->  Processes holding locks<---
> >>>> --->  Processes waiting for locks<---
> >>>> --->  Participant transactions<---
> >>>> --->  Coordinator transactions<---
> >>>> --->  Uncertain transactions<---
> >>>> --->  Active tables<---
> >>>> schema         : with 2        records occupying 546      words of
> >>> mem
> >>>> ===>  System info in version "4.4.13", debug level = none<===
> >>>> opt_disc. Directory
> >>>> "c:/Users/jeff/code/code/scratch/erlang/Mnesia.nonode@REDACTED" is
> NOT
> >>>> used.
> >>>> use fallback at restart = false
> >>>> running db nodes   = [nonode@REDACTED]
> >>>> stopped db nodes   = []
> >>>> master node tables = []
> >>>> remote             = [backgammon_games]
> >>>> ram_copies         = [schema]
> >>>> disc_copies        = []
> >>>> disc_only_copies   = []
> >>>> [] = [backgammon_games]
> >>>> [{nonode@REDACTED,ram_copies}] = [schema]
> >>>> 3 transactions committed, 1 aborted, 0 restarted, 0 logged to disc
> >>>> 0 held locks, 0 in queue; 0 local transactions, 0 remote
> >>>> 0 transactions waits for other nodes: []
> >>>> ok
> >>>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> >>>> %% BEGIN CONFUSING BIT
> >>>> 17>  mnesia:delete_table(backgammon_games).
> >>>> {aborted,{no_exists,backgammon_games}}
> >>>> 18>  backgammon:init().
> >>>> {aborted,{already_exists,backgammon_games}}
> >>>> 19>
> >>>> %% END CONFUSING BIT
> >>>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> >>>>
> >>>>
> >>>> Here's my backgammon.erl:
> >>>> -module(backgammon).
> >>>>
> >>>> -compile(export_all).
> >>>>
> >>>> -include("backgammon.hrl").
> >>>>
> >>>> create_tables(MnesiaNodes) ->
> >>>>    mnesia:create_table(backgammon_games,
> >>>> 			[{attributes, record_info(fields, game_record)},
> >>>> 			 {ram_copies, MnesiaNodes}]).
> >>>>
> >>>> init() ->
> >>>>    create_tables([a@REDACTED, b@REDACTED]).
> >>>>
> >>>> dumpfields() ->
> >>>>    record_info(fields, game_state).
> >>>>
> >>>> ________________________________________________________________
> >>>> erlang-questions (at) erlang.org mailing list.
> >>>> See http://www.erlang.org/faq.html
> >>>> To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
> >>>>
> >>> Ulf Wiger, CTO, Erlang Solutions, Ltd.
> >>> http://erlang-solutions.com
> >>>
> >>
> >>
> > Ulf Wiger, CTO, Erlang Solutions, Ltd.
> > http://erlang-solutions.com
> >
> >
> >
> >
> > ________________________________________________________________
> > erlang-questions (at) erlang.org mailing list.
> > See http://www.erlang.org/faq.html
> > To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
> >




More information about the erlang-questions mailing list