Mnesia - прерывается с bad_type при указании стратегии хранения

Итак, я получаю {aborted,{bad_type,link,disc_copies, 'my_server@127.0.0.1'}} (возвращается моим init_db/0 функция):

-record(link, {hash, original, timestamp}).
init_db() ->
    application:set_env(mnesia, dir, "/tmp/mnesia_db"),
    mnesia:create_schema([node()]),
    mnesia:start(),
    mnesia:create_table( link,[
        {index,[timestamp]},
        {attributes, record_info(fields, link)},
        {disc_copies, [node()]}]).

Без {disc_copies, [node()]} таблица создана правильно.

3 ответа

Проверьте права на запись в родительском каталоге mnesia dir, через который вы указываете application:set_env/3, Если родительский каталог mnesia dir не позволяет вам писать, вы получите эту ошибку. (Другой способ получить эту ошибку - забыть полностью установить mnesia dir, но ваш set_env Звонок явно делает это.)

Обновление: более внимательно изучив сообщение об ошибке, я вижу узел, упомянутый в сообщении об ошибке, отсутствует в списке:

{прервано,{bad_type, ссылка,disc_copies, 'my_server@127.0.0.1'}}

Это может означать, что код, который вы показываете в своем вопросе, не соответствует тому, что действительно выполняется. В частности, если вы звоните mnesia:create_table/2 передавая узел вместо списка узлов в disc_copies кортеж, как показано ниже, вы получите точно такую ​​же ошибку:

mnesia:create_table(link,[{index,[timestamp]},
                          {attributes, record_info(fields, link)},
                          {disc_copies, node()}]). % note no list here, should be [node()]

Возможно, вам придется изменить schema стол к disc_copies что, кажется, влияет на весь узел.

mnesia:change_table_copy_type(schema, node(), disc_copies)

Из документов mnesia:

Эту функцию также можно использовать для изменения типа хранения таблицы с именем schema. Таблица схемы может иметь только ram_copies или disc_copies в качестве типа хранения. Если тип хранения схемы - ram_copies, никакая другая таблица не может быть резидентной на этом узле.

После этого вы сможете создать disc_copies таблицы на узле.

Я столкнулся с той же проблемой. я получил{aborted {bad_type,account,disc_copies,nonode@nohost}}потому что я звонилmnesia:wait_for_tablesдо создания схемы. Изменение порядка решило эту проблему для меня.

Другие вопросы по тегам