1

私は次のコードを持っています:

J = fun()->mnesia:clear_table(names) end.
 mnesia:activity(transaction, J, [], mnesia_frag).

そして、私はこのエラーを受け取ります:

** exception exit: {aborted,{aborted,nested_transaction}}

私はただ走ることができた

mnesia:clear_table(names) 

しかし、テーブル名が複数のノードに断片化されているため、mnesia_frag モジュールを使用する必要があると考えました。

私は何を間違っていますか?そして、それはどのように正しいでしょうか?ありがとうございました。

4

1 に答える 1

6

mnesia:clear_table(names) が断片化されたテーブル全体をクリアしないことは正しいです。

mnesia:clear_table/1 は既にトランザクション内で実行されているため、mnesia:activityトランザクションAccessContextでは使用できません。

代わりに試してください:

mnesia:activity(sync_dirty, fun mnesia:clear_table/1, [names], mnesia_frag).

mnesia_frag.erl のソース コードを見ると、個々のテーブルごとに mnesia:clear_table/1 を呼び出しているだけであることがわかります。4 つのフラグメントを想定すると、上記は基本的に次と同等です。

[mnesia:clear_table(T) || T <- [names, names_frag2, names_frag3, names_frag4]].

テーブル名は次のとおりです。

mnesia_frag:frag_names(names).
于 2011-05-29T16:48:54.693 に答える