вопрос о мнезии - PullRequest
       21

вопрос о мнезии

1 голос
/ 23 ноября 2010

У меня два узла, бегущие мнезию.Я создал схему и некоторые таблицы на узле 1 и использовал mnesia:add_table_copy на узле 2 , чтобы скопировать таблицы с узла 1 на узел 2 .

Все работает хорошо, пока я не вызову q() на узле 1 и затем q() на узле 2 .Я обнаружил, что когда я снова запускаю узел 1 , mnesia:wait_for_tables([sometable], infinity) не вернется.Он вернется только при следующем запуске node 2 .

Есть ли способ исправить это?Это проблема, потому что я не смогу запустить узел 1 снова, если узел 2 не работает.

1 Ответ

2 голосов
/ 23 ноября 2010

В этом обсуждении представлена ​​ситуация, аналогичная той, с которой вы столкнулись.

Чтение из этого источника:

При запуске Mnesia пытается подключиться с другими узлами, и если это успешно загружает свои таблицы из их. Если другие узлы не работают, это ищет отметки mnesia_down в своем локальный журнал транзакций для того, чтобы определить, имеет ли он копия или нет его таблиц. Узел это было отключение в прошлом Mnesia_down от всех других узлы. Это означает, что он может безопасно загрузить свои таблицы. Если некоторые из других узлы, где начались первыми (как в вашем случай) Мнезия будет ждать бесконечно для другого узла для подключения в порядке загрузить его таблицы

Сначала вы закрываете узел 1, поэтому у него нет mnesia_down от другого узла. Что произойдет, если вы измените порядок выключения?

Кроме того, должна быть возможность принудительной загрузки таблицы с помощью функции force_load_table / 1 :

force_load_table(Tab) -> yes | ErrorDescription

Алгоритм Mnesia для загрузки таблицы может привести к ситуации, когда таблица не может быть загружена. Эта ситуация происходит, когда узел запущен и Мнезия заключает или подозревает, что другая копия таблицы была активна после того, как эта локальная копия стала неактивной из-за сбоя системы.

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

...