[erlang-questions] Mnesia: Error on insert object with same key in Set

Ulf Wiger <>
Mon Oct 17 09:00:56 CEST 2011


On 17 Oct 2011, at 08:45, Kostis Sagonas wrote:

> On 10/17/11 09:40, Dan Gudmundsson wrote:
>> This should be fixed now and thus safe to use now.
> 
> But doesn't the code below have an obvious race condition?
> 
> Kostis

Kostis,

Those functions in the mnesia API only work when called from within a transaction, so the race condition is managed through implicit locking.

BR,
Ulf


> 
>> On Sun, Oct 16, 2011 at 11:29 PM, Tristan Sloughter
>> <>  wrote:
>>> I wanted to make sure there was still no way to tell Mnesia to return an
>>> error if it is given a record to write that has the same key as an object
>>> already stored in the table.
>>> Reading through the docs it looks like there is no way through configuration
>>> but you must simply read and then write if its not there, like I found when
>>> this was asked in 2004 on this mailing list:
>>> insert(K,V) ->
>>>   fun() ->
>>>   case mnesia:wread(K) of
>>>     [Exist] ->  {abort, Exist};
>>>     _ ->  mnesia:write(V)
>>>   end
>>>   end.
>>> Which doesn't seem safe, as Ulf points on in that
>>> thread: http://erlang.org/pipermail/erlang-questions/2004-May/012307.html
>>> As well as slow.
>>> So I was hoping maybe in 2011 there is a better way to do this? :)
>>> Thanks,
>>> Tristan
>>> _______________________________________________
>>> erlang-questions mailing list
>>> 
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>> 
>>> 
>> _______________________________________________
>> erlang-questions mailing list
>> 
>> http://erlang.org/mailman/listinfo/erlang-questions
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

Ulf Wiger, CTO, Erlang Solutions, Ltd.
http://erlang-solutions.com






More information about the erlang-questions mailing list