<div><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">Hi guys</span><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><br></div><div style="font-size:1rem;word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto">I’ve a little issue I’m unable to solve with the current ETS API.</div><div style="font-size:1rem;word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><br></div><div style="font-size:1rem;word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto">My table is of type set. Keys are integers and values are list of names:</div><div style="font-size:1rem;word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto">123 -> [ jane, john, bob ]</div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><span style="font-size:1rem;border-color:rgb(0,0,0);color:rgb(0,0,0)">456 -> [ joe, alice ]</span></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)">…</font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><span style="border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></span></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><span style="font-size:1rem;border-color:rgb(0,0,0);color:rgb(0,0,0)">Process A with Key=123 wants to delete ‘Jane’ while process B with Key=123 wants to add ‘Adam’</span><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)">.</font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)">First, they both needs to read the value associated with Key=123, update that list accordingly and set back the new value.</font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)">But this lead to race condition (ex. process B could put back ‘jane’ - last write wins).</font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="font-size:1rem;border-color:rgb(0,0,0);color:rgb(0,0,0)">Could this problem be solved atomically without involving explicit locking per Key?</font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="font-size:1rem;border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></font></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><font style="font-size:1rem;border-color:rgb(0,0,0);color:rgb(0,0,0)">Is there any other better way to represent this data set which will not suffer from the race condition?</font></div></div><div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto"><br></div><div style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto">Thanks</div><div style="font-size:1rem;word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)" dir="auto">/Frank</div>
</div>