我有Mnesia成为一个非常奇怪的错误。 我有大约10个表Mnesia在被记录,通常它工作正常。 然而,在我的代码,每当我试图从特定表中读取某个地方(尝试从其它表读的是罚款)我得到一个错误DETS。
我在我的代码,以减少
{atomic, ok} = mnesia:transaction(fun() ->
[Entry] = mnesia:read(table_name, Key),
ok
end)
我有一个try
/ catch
事务块左右,我得到的错误是这样的:
error:{badmatch,
{aborted,
{{badmatch,
{error,
{bad_object_header,
"/path/to/table_name.DAT"}}},
[{callback,
'-handle/2-fun-0-',
1,
[{file,
"src/src.erl"},
{line,
234}]},
{mnesia_tm,
apply_fun,
3,
[{file,
"mnesia_tm.erl"},
{line,
830}]},
{mnesia_tm,
execute_transaction,
5,
[{file,
"mnesia_tm.erl"},
{line,
810}]},
]}}}
不幸的是我不能用简短的例子重现错误。 即使我打电话从REPL功能,它不会出错。 它仅错误,当它发生在我的实际代码。 但它确实可靠每次发生。
如果我拿出了mnesia:read
线,一切工作正常。 我试图改造模式和表,并没有帮助。 这真是奇怪,因为我的代码都对后来的成功使用该表。 如果它是从这个一个失败的地方使用它而已。
可能是什么回事?
更新
我尝试一些,似乎当两个这些交易发生的错误仅发生(在不同的进程)几乎同时。 是不是意味着Mnesia的这种方式来使用吗?
更新2
原来,问题得到了解决由R16B-6降级我的Arch Linux的二郎安装R16B-3。 希望这个bug会很快冰释前嫌。