Age | Commit message (Collapse) | Author |
|
'dumbbell/mnesia-hang-if-remote-stopped-after-proto-negotiation' into maint
* dumbbell/mnesia-hang-if-remote-stopped-after-proto-negotiation:
mnesia: Check nodes after protocol negotiation
OTP-12473
|
|
During Mnesia startup, after protocol negotiation, the list of connected
nodes is written to "recover_nodes". This list is later used to merge
the schema.
If Mnesia was stopped on a remote node between the protocol negotiation
and the moment the list is stored in "recover_nodes", the remote node
is still considered running: the value of "recover_nodes" stored during
mnesia_down/1 is overwritten. Therefore, this node may be used to
acquire a write lock on the schema in order to perform the merge. In
this case, the remote node never answers to the lock request and Mnesia
hang forever (application:start(mnesia) never returns).
To fix the problem, we check the list one last time and remove from it
all nodes where Mnesia is stopped. And because there is still a chance
for missing mnesia_down event, handle_cast({mnesia_down, ...}, ...)
writes to recover_nodes again, in addition to mnesia_down/1.
|
|
|
|
|
|
match_object returned wrong objects when matching on non key fields
and updates in the same transaction had been performed.
|
|
|
|
|
|
|
|
Conflicts:
OTP_VERSION
|
|
|
|
By doing an abort, the create_table can be restarted
if a node go down during the transaction.
{badarg,
[{erlang,link,[undefined],[]},
{mnesia_controller,
wait_for_schema_commit_lock,0,
[{file,"mnesia_controller.erl"},
{line,303}]},
{mnesia_schema,prepare_commit,3,
[{file,"mnesia_schema.erl"},
{line,1838}]},
{mnesia_tm,commit_participant,6,
[{file,"mnesia_tm.erl"},
{line,1669}]}]}}},
|
|
|
|
* nox/reedr-logging/OTP-12115:
Add number of entries to mnesia copy debug message
Add thread index to allocator enomem dump slogan
Add run queue index to process dump info
Add missing error string to syslog logging in epmd
Demote rare debug slogan of message discarding to debug build
|
|
|
|
|
|
* gorillainduction/improve_mnesia_locker_complexity:
Optimize tid lock table
OTP-11981
|
|
By making the ets table mnesia_tid_locks an ordered set instead of a
bag, the time for inserting locks for a transaction with large number
of locks is reduced significantly.
|
|
* dgud/mnesia/timing-issue:
mnesia: Fix timing issue
|
|
* dgud/testcasecuddling:
mnesia: Improve tests
|
|
* dgud/mnesia/force-load-hangs/OTP-11948:
mnesia: Handle failed net_loads better
|
|
In case of a failed net load and no more available copies,
remove the table from late_load_queue, otherwise tables
can not be forced loaded.
|
|
Be sure to gather release_tid msgs even though we have a mnesia_down
in the queue.
|
|
Need to re-raise the match macro if inside transaction
|
|
|
|
|
|
|
|
Most dependencies introduced are exactly the dependencies to other
applications found by xref. That is, there might be real dependencies
missing. There might also be pure debug dependencies listed that
probably should be removed. Each application has to be manually
inspected in order to ensure that all real dependencies are listed.
All dependencies introduced are to application versions used in
OTP 17.0. This since the previously used version scheme wasn't
designed for this, and in order to minimize the work of introducing
the dependencies.
|
|
Ensure all are "normal" versions according to the new version scheme
introduced in OTP 17.0
|
|
* schlagert/fix_basic_appups:
Dynamically configure typer_SUITE according to environment
Disable hipe_SUITE when environment doesn't support it
Make hipe non-upgradable by setting appup file empty
Fix missing module on hipe app file template
Add test suites performing app and appup file checks
Introduce appup test utility
Fix library application appup files
Fix non-library appup files according to issue #240
OTP-11744
|
|
Add the mentioned test suites for *all* library and touched
non-library applications.
|
|
* dgud/mnesia/add-sync-log/OTP-11729:
mnesia: cleanup some dialyzer unmatched return warnings
mnesia: Shorten testcase names
mnesia: Improve mnesia coredump info
mnesia: Add explicit sync_log command
|
|
|
|
For windows tests (limited path lenghts)
|
|
Add stacktrace of mnesia processes.
|
|
For performance reasons the file data is not synced to disk in mnesia,
data loss can happen between each dump.
mnesia:dump_log() can be used explicitly to ensure data is written to disk.
But that can take a long time, so mnesia:sync_log() which just
sync the log have been added.
|
|
* hsv/using_lists_droplast:
lib/mnesia/test/ - Replace reverse(tl(reverse(L))) with lists:droplast/1
lib/ssh - Replace reverse(tl(reverse(L))) with lists:droplast/1
lib/wx - Replace reverse(tl(reverse(L))) with lists:droplast/1
Use lists:droplast/1 in orber/orber_interceptors.erl
Import and use lists:droplast/1 in v3_core/v3_kernel
OTP-11678
OTP-11677
|
|
|
|
The R16B03 release
Conflicts:
lib/sasl/vsn.mk
|
|
|
|
|
|
dirty_update_counter returned the wrong value when a subscriber existed
and no events was sent. Thanks Anton Ryabkov.
|
|
Conflicts:
erts/etc/win32/Install.c
|
|
Mnesia_monitor detect mnesia down using a remote process link
and net_kernel nodeup to detect that a node are reacable again.
If there is a short node communication problem.
The node-down and node-up events can happen before the
remotely linked process generates an 'EXIT'.
When node-down and node-up events are recevied they are
stored and later checked if the node came up just before
mnesia flagged the node as down.
|
|
Bad timing could lead to hanging transactions after a mnesia down from a
node with sticky locks.
Excellent bug report from janchochol
Situation:
* node A and B have copies of table T
* node A ows sticky of table T
* node A goes down (e.g. crash)
* node B tries to perform transactional operation on table T
(e.g. mnesia:select)
In this situation there is possibility that first (and maybe other)
transaction on node B will hang indefinitely.
This is caused by race condition, when transaction process send lock
request operation to node A and waits for reply. When node A is down
it will never send reply, so process on node B will be stuck
forever.
Reason is that message sent to mnesia_locker gen_server from
mnesia_locker:mnesia_down can be received after mnesia_locker gen_server
already replies to transaction processes with {switch, N, Req} and
node N is down.
Monitoring remote process when sending request to other node should
be safe solution.
|
|
The R16B02 release
Conflicts:
lib/sasl/vsn.mk
|
|
|
|
Most notes.xml files will be updated in every release and cause
the kind of the problems described in the previous commit.
|
|
|
|
Avoid hanging waiting for other processes on other node
to commit.
|
|
Fixed a race where some parts of a transaction could
be added to the checkpoint.
There are probably more races here but this improves the current
testcases.
|