aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mnesia/src
AgeCommit message (Collapse)Author
2011-09-21Merge branch 'dgud/mnesia/leaking-log/OTP-9551' into devDan Gudmundsson
* dgud/mnesia/leaking-log/OTP-9551: [mnesia] Use api to log decisions.
2011-09-19[mnesia] Use dedicated api for clearing tablesDan Gudmundsson
Mainly to correctly clear dets tables. It may also be faster to use the dedicated functions.
2011-09-19[mnesia] Use api to log decisions.Dan Gudmundsson
Instead of just appending decisions to the log, use mnesia_log:log(Decision), it will increment the counter which causes the log to be dumped even if no actual commits are stored on this node. This fixed a bug where the LATEST.log would grow forever on a node which had the schema on disc, but where not involved in any commits.
2011-09-19Merge branch 'dev' into majorDan Gudmundsson
2011-09-15[mnesia] Fix schema conversion to previous versionsDan Gudmundsson
2011-09-15[mnesia] Whitespace fixesDan Gudmundsson
2011-09-15[mnesia] Update protocol versionDan Gudmundsson
And remove old protocol version hacks
2011-09-15[mnesia] Mnesia schema merge tested with 2 nodes, r13b04 -> r14b (dev)Ulf Wiger
The do_merge_schema function now converts cstructs from a remote node when it detects that they are different. In order to be compatible the other way around, mnesia_controller:get_cstructs() detects a remote caller, and converts the cstructs before sending them.
2011-09-15[mnesia] Fixed bug in aborted schema transactionsDan Gudmundsson
2011-09-15[mnesia] Add hrl dependencyDan Gudmundsson
2011-08-16emulator: Add a fourth element in exception stacktracesBjörn Gustavsson
This commit is a preparation for introducing location information (filename/line number) in stacktraces in exceptions. Currently a stack trace looks like: [{Mod1,Function1,Arity1}, . . . {ModN,FunctionN,ArityN}] Add a forth element to each tuple that can be used indication the filename and line number of the source file: [{Mod1,Function1,Arity1,Location1}, . . . {ModN,FunctionN,ArityN,LocationN}] In this commit, the fourth element will just be an empty list, and we will change all code that look at or manipulate stacktraces.
2011-05-20Update copyright yearsBjörn-Egil Dahlberg
2011-05-17Prepare mnesia releaseDan Gudmundsson
2011-05-17Remove deadcodeDan Gudmundsson
2011-05-17Merge branch 'uw/mnesia-majority' into devHenrik Nord
* uw/mnesia-majority: dialyzer warning on mnesia_tm Add documentation text about majority checking add mnesia_majority_test suite where_to_wlock optimization + change_table_majority/2 bug in mnesia_tm:needs_majority/2 optimize sticky_lock maj. check check majority for sticky locks Write locks now check majority when needed. Add {majority, boolean()} per-table option. OTP-9304
2011-05-16dialyzer warning on mnesia_tmUlf Wiger
2011-05-16where_to_wlock optimization + change_table_majority/2Ulf Wiger
2011-05-16bug in mnesia_tm:needs_majority/2Ulf Wiger
2011-05-16optimize sticky_lock maj. checkUlf Wiger
2011-05-16check majority for sticky locksUlf Wiger
2011-05-16Write locks now check majority when needed.Ulf Wiger
Since the table loader also sets (table) write locks, a special lock type, 'load', was needed. Unfortunately, this affects mnesia activity callbacks that redefine the lock operation.
2011-05-16Add {majority, boolean()} per-table option.Ulf Wiger
With {majority, true} set for a table, write transactions will abort if they cannot commit to a majority of the nodes that have a copy of the table. Currently, the implementation hooks into the prepare_commit, and forces an asymmetric transaction if the commit set affects any table with the majority flag set. In the commit itself, the transaction will abort if it cannot satisfy the majority requirement for all tables involved in the thransaction. A future optimization might be to abort already when a write lock is attempted on such a table (/-object) and the lock cannot be set on enough nodes. This functionality introduces the possibility to automatically "fence off" a table in the presence of failures. This is a first implementation. Only basic tests have been performed.
2011-05-12Merge branch 'dgud/mnesia/add_index_crash/OTP-9285' into devDan Gudmundsson
* dgud/mnesia/add_index_crash/OTP-9285: Fix mnesia crash when adding index on non loaded tables.
2011-05-12Use recover_nodes when deciding alive nodesDan Gudmundsson
Fixes timing issue in test cases
2011-05-11Fix mnesia crash when adding index on non loaded tables.Dan Gudmundsson
This could happen on ram_copies tables.
2011-04-27Reduce calls to phash in key_to_frag_numberPhilip Robinson
Original code calls phash 1..2 times, based on which fragment the hashed key targets and how many fragments exist. New code always calls phash only once.
2011-04-04Prepare releaseDan Gudmundsson
2011-04-04Mnesia sometimes failed to tell all nodes that it had started.Dan Gudmundsson
2011-03-11Update copyright yearsBjörn-Egil Dahlberg
2011-03-09Prepare releaseDan Gudmundsson
2011-03-09Applied from mnesia_frag:first patch from Magnus HenochDan Gudmundsson
"When I run mnesia:first on an empty fragmented table, it tries to access the fragment with the number one beyond the maximum. In the sample code below, I create a table with two fragments, 'foo' and 'foo_frag2', but mnesia tries to access 'foo_frag3':"
2011-03-09Abort/restart if network has changed, can be a partioned networkDan Gudmundsson
2011-03-02Remove wrong specDan Gudmundsson
2011-03-02Mnesia dialyzer fixesDan Gudmundsson
With help from Kostis
2010-12-02Prepare releaseDan Gudmundsson
2010-11-29Created wrong header in dcd files when creating files at startup.Dan Gudmundsson
That caused a 'log_header' entry to added to the disc_copies tables.
2010-09-15mnesia: Do not auto-import error/2Tuncer Ayaz
Resolve name clash with auto-imported BIF error/2.
2010-09-10Remove warnings for clashes with new autoimported BIFsPatrik Nyblom
2010-06-09Prepare ReleaseDan Gudmundsson
2010-06-04Merge branch 'uw/mnesia-overload' into devErlang/OTP
* uw/mnesia-overload: Enable continuous monitoring of mnesia overload status
2010-06-04Merge branch 'uw/mnesia-schema-merge' into devErlang/OTP
* uw/mnesia-schema-merge: remove debug printout and accidental variable name reuse Allow a user_defined function to wrap mnesia_schema:merge_schema()
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-05-09Enable continuous monitoring of mnesia overload statusUlf Wiger
Mnesia currently issues an event whenever it detects an overload condition. It recognizes two different types of overload: - whenever the message queue of mnesia_tm process grows large - when a log dump interval triggers before the previous dump is done These events could be used to trigger a load regulation mechanism to reduce the load until the condition seizes. The missing piece is that there is no facility to ask mnesia whether the overload condition still exists. This patch implements a couple of functions in mnesia_lib that can be used to sample the overload status. It has been tested in a load regulator component being developed by Erlang Solutions. No mnesia test suites have been run, since they are not available. No documentation has been updated. The functions in mnesia_lib are at any rate undocumented (as are all other functions in that module). A decision would have to be made about whether to provide a documented API on top of these functions. The internal state record of mnesia_recover has been modified. For this reason, a code change hook has been provided.
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-02-17mnesia: prepare releaseDan Gudmundsson
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).