2016-11-11 2 views
0

J'écris ici parce que j'ai un problème avec Mnesia, en particulier il semble que quand je démarre mon noeud et que je lance la procédure pour initialiser la base de données (ça fait table et popultes eux), une table résultats corrompus. Cette table n'a pas d'options particulières et est un disk_only_copy.Erlang 13B04: Mnesia écrit corrompt la table

L'initialisation s'est faite avec une transaction simple dans une fonction utilisée par une liste: foldl.

Je suis déjà essayer de tout faire dans le shell Erlang et tous les travaux, la transaction et l'écriture d'enregistrement renvoie un résultat potive donc il n'y a pas de plantages de code.

J'ai déjà fait une recherche mais il n'y a pas de réponse claire à ce problème: quelqu'un dit qu'il doit utiliser la transaction (fait mais n'importe quel changement), la table est en train d'écrire en mémoire (ce n'est pas parce que si je fais tout en coquille tous les travaux), alors que peut-il être?

Merci à tous d'avance pour l'aide.

Répondre

1

Une table disk_only_copies utilise des dets pour le stockage, et dans une version très ancienne comme 13B04, certains bugs dans les dets peuvent ne pas avoir été corrigés. Essayez d'exécuter le même code sur une version plus récente (au moins R15B03-1) et voyez si la même chose se produit.

+0

Merci pour la réponse. Je sais que c'est une ancienne version mais maintenant je n'ai pas le temps de faire le portage vers une version plus récente. Mais s'il n'y a pas d'autre solution, je dois trouver le temps de le faire. Est-ce possible que j'ai ce problème avec seulement cette table et les autres fonctionnent bien? – Mat

+0

Oui, c'est possible. Serait-il simple pour vous de créer une version minimale de votre code de démarrage qui n'a qu'une seule table mais qui présente toujours le même problème de corruption? Ensuite, vous pouvez essayer cela sur différentes versions d'OTP. – RichardC