[erlang-questions] mnesia silent failure and table corruption

Janos Hary <>
Tue Aug 27 15:05:58 CEST 2013


All,

I started to write records into a table from a simple test function. When
the table size reaches 2GB write transactions still report success, but they
are silently ignored. The table became unusable, read operations return
error, and mnesia cannot recover the table. How shall I avoid such
situation?

I use R16B01 x64 SMP on Windows 7.

The table creation code:
mnesia:create_table(tab2,
		[
		 {record_name, trec},
		 {attributes, record_info(fields, trec)},
		 {disc_only_copies, [node()]}
		])

My write function:
write_transaction(Tab, Trec) ->
	F = fun () ->
				mnesia:write(Tab, Trec, write)
		end,
	case mnesia:transaction(F) of
		{atomic, ok} ->
			ok;
		_ ->
			error
	end.

After reaching 2GB:
()25> db_test:read_transaction(tab1, 1).
{atomic,{error,{{bad_object,read_buckets},
                "d:/db_test/tab1.DAT"}}}

()27> application:start(mnesia).        
dets: file "d:/db_test/tab2.DAT" not properly closed, repairing ...

=ERROR REPORT==== 27-Aug-2013::11:24:18 ===
Mnesia(): ** ERROR ** (core dumped to file:
"c:/work/dirXDS5/")
 ** FATAL ** {error,{"Cannot open dets table",tab2,
                     [{file,"d:/db_test/tab2.DAT"},
                      {keypos,2},
                      {repair,true},
                      {type,set}],
                     {no_more_space_on_file,"d:/db_test/tab2.DAT.TMP"}}}

=ERROR REPORT==== 27-Aug-2013::11:24:28 ===
Mnesia(): ** ERROR ** mnesia_event got unexpected event: {'EXIT',
 
<0.4288.0>,
 
killed}

=INFO REPORT==== 27-Aug-2013::11:24:28 ===
    application: mnesia
    exited: {killed,{mnesia_sup,start,[normal,[]]}}
    type: temporary
{error,{killed,{mnesia_sup,start,[normal,[]]}}}

Thanks for your help.
Janos




More information about the erlang-questions mailing list