Ich habe eine verteilte Anwendung. In diesem startet ein Master-Knoten ein Mnesia-Schema mit 4 Tabellen. Einige von ihnen werden auf andere Knoten repliziert, andere nicht. Wenn ein Knoten spawnt, wird er am Master-Knoten registriert und dem Schema hinzugefügt, und die Daten werden auf diesen Knoten repliziert.Erlang sicherstellen Mnesia Schema-Replikation
Wie kann ich sicherstellen, dass meine Replikation abgeschlossen ist? Ich habe versucht, die folgenden:
Timeout=60000,
TabList = [tab1, tab2, tab3, tab4],
mnesia:wait_for_tables(TabList, Timeout).
Es ist jedoch nicht 60 Sekunden dauert, nicht einmal 5 Sekunden, bis ich einen Fehler:
{{badmatch,{aborted,{no_exists,tab1}}}
Offensichtlich funktioniert es nicht ..
Wenn ein neuer Knoten einem Cluster beitritt, führt ein RPC-Aufruf vom Master-Knoten die folgende Funktion auf dem neuen Knoten aus:
Wartet es auch, bis es auf ram_copies geschrieben wird?
Danke.
Synchronisation und Replikation sind zwei verschiedene Dinge (die Replikation muss nicht mit irgend etwas synchronisiert werden, sondern kann auch asynchron sein). Interessiert es Sie wirklich, wenn die Replikation abgeschlossen ist? Oder interessiert Sie die Synchronisation aus Transaktionssicht (z. B. um DB-Transaktionen sicher durchzuführen)? – Michael
Nun, mein Anwendungsfall ist eine verteilte Firewall. Wenn ein neuer Knoten dem Cluster beitritt, muss er wissen, welche Regeln gesetzt sind, um zu entscheiden, ob ein Paket bestehen kann oder nicht. Daher benötige ich zunächst alle Daten am neuen Knoten, bevor der Verkehr überprüft wird. – muehsi
Wenn Ihr neuer Knoten dem Cluster beigetreten ist, kann er nicht auf die Daten in den Tabellen zugreifen, die Daten müssen nicht lokal kopiert werden. – Michael