[erlang-questions] Ridiculuous newbie mnesia question.

Ulf Wiger <>
Mon Oct 25 00:01:31 CEST 2010


Hi Jeffrey,

The problem is that you have specified that the backgammon_games
table should have copies on  and , but your 
Erlang shell has the node name  (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/" is NOT
> used.
> use fallback at restart = false
> running db nodes   = []
> stopped db nodes   = []
> master node tables = []
> remote             = [backgammon_games]
> ram_copies         = [schema]
> disc_copies        = []
> disc_only_copies   = []
> [] = [backgammon_games]
> [{,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([, ]).
> 
> dumpfields() ->
>    record_info(fields, game_state).
> 
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
> 

Ulf Wiger, CTO, Erlang Solutions, Ltd.
http://erlang-solutions.com





More information about the erlang-questions mailing list