aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mnesia
AgeCommit message (Collapse)Author
2010-06-02remove debug printout and accidental variable name reuseUlf Wiger
2010-06-02Allow a user_defined function to wrap mnesia_schema:merge_schema()Ulf Wiger
Mnesia currently notifies the user if it detects a partitioned network, but the options for resolving the situation are limited. In practice, the only safe options are: - set master_nodes and restart one of the affected 'islands' - restart the entire system from backup This patch introduces a way to resolve the situation without restarting any nodes. The key to doing this safely is to lock affected tables and run the merge function inside the same transaction that merges the schema. Otherwise, one transaction will merge the schema, after which writes to the database will be replicated across the (potentially) inconsistent copies; the transaction triggered by the asynchronous inconsistency event will have to race to be the first to access the tables. The normal call to merge the schema is done from mnesia_controller. Previously, this was mnesia_schema:merge_schema(). The new function is merge_schema(UserFun), with the following behaviour: merge_schema(UserFun) -> schema_transaction( fun() -> UserFun(fun(Arg) -> do_merge_schema(Arg) end) end). Where do_merge_schema(LockTabs) will execute the schema merge as before, but also lock all tables in the list LockTabs which have copies on the affected nodes (that is, everywhere the schema table is locked). The effect of this is to allow a wrapper function that calls the merge and, if successful, continues to resolve the inconsistency on the tables, knowing that they have now been locked on all affected nodes. The function that is actually called by the deconflict function is mnesia_controller:connect_nodes(Nodes, UserFun), as in: Tables = tables_to_deconflict(Node), mnesia_controller:connect_nodes( [Node], fun(MergeF) -> case MergeF(Tables) of {merged,_,_} -> deconflict(Tables, Node); Other -> Other end). In the case where the merge fails, it is probably wise to restart from a backup... I have not run the mnesia test suite, as it is not available. I have not updated documentation, as these functions are not documented in the first place.
2010-03-30Merge branch 'mh/doc-loose-lose' into devErlang/OTP
* mh/doc-loose-lose: Fix spelling: "loose" is not a verb
2010-03-30Merge branch 'bd/mnesia-activity-subscription' into devErlang/OTP
* bd/mnesia-activity-subscription: Add mnesia activity subscription message
2010-03-30Add mnesia activity subscription messageBernard Duggan
A process that calls mnesia:subscribe(activity) will receive the message: {mnesia_activity_event, ActivityID, complete} when any activity that caused a change to a database has finished committing its changes. This allows a subscriber to collect messages already available through the mnesia:subscribe({table, ...}) system to group them as completed transactions.
2010-03-26Fix spelling: "loose" is not a verbMagnus Henoch
"Lose" means not "not win", but "loose" means "not tight". Change "loose" to "lose" where appropriate.
2010-02-19mnesia: fix vsnDan Gudmundsson
2010-02-17mnesia: prepare releaseDan Gudmundsson
2010-02-12Merge branch 'bd/doc-fixes' into ccase/r13b04_devErlang/OTP
* bd/doc-fixes: Fix minor documentation errors
2010-02-10Fix minor documentation errorsBernard Duggan
Fix three minor typos and reorder one of a pair of lists of functions so that the ordering is consistent.
2010-02-04OTP-8402 Transactions could be left hanging if a node went down whenDan Gudmundsson
invoking mnesia:sync_transaction/[1,2]. Thanks Igor Ribeiro Sucupira.
2010-02-03Merge branch 'is/mnesia-send-compressed' into ccase/r13b04_devErlang/OTP
* is/mnesia-send-compressed: Add option to compress data when copying tables between Mnesia nodes OTP-8406 Igor Ribeiro Sucupira added the option to compress data when copying tables between Mnesia nodes.
2010-02-02Add option to compress data when copying tables between Mnesia nodesIgor Ribeiro Sucupira
Optionally using data compression for copying Mnesia tables allows the system to be tuned to eliminate network bottlenecks from deployments where enough CPU is available to use zlib. With this patch, running erl -mnesia send_compressed <level> will enable compression for sending tables between nodes. The compression level can be any integer in [0, 9], with 0 (the default) meaning no compression (exactly the previous behaviour) and 9 being the highest compression level. To set any non-zero compression level at the sender, both nodes must have the updated Mnesia modules (the receiver will work according to the sender's configuration).
2009-11-20The R13B03 release.OTP_R13B03Erlang/OTP