On Tue, Sep 15, 2009 at 3:23 PM, Mark Volkmann
<r.mark.volkm...@gmail.com> wrote:
> I think the problem is that you only ensure one of the Refs. If you
> want to make sure that a condition between multiple Refs isn't
> violated, you need to sure

I meant "ensure" instead of "sure".

> all of them. Otherwise other transactions
> will be free to modify the Refs that aren't ensured.
>
> On Tue, Sep 15, 2009 at 3:14 PM, Krukow <karl.kru...@gmail.com> wrote:
>>
>> After a discussion in dcug about the write-skew anomaly, I wanted to
>> write a program exhibiting the anomaly, together with a similar
>> program using ensure to eliminate it.
>>
>> My program doesn't work: it exhibits the anomaly, but ensure doesn't
>> fix it, and neither does adding a validator to the refs. I'd like to
>> know if it is a bug in my program, in my understanding of 'ensure' and/
>> or validators, or, finally, in Clojure.
>>
>> The program simulates the write-skew example from wikipedia: there are
>> two accounts a1 and a2 initially holding $100 each, and the bank
>> requires that @a1 + @a2 >= 0 always. A user concurrently tries two
>> transactions: one withdrawing $200 from a1 and one withdrawing $200
>> from a2. The bank code checks that @a1 + @a2 >= 200 before
>> transferring any money. With serializable transaction-semantics, the
>> bank's constraint is never violated; with snapshot-isolation
>> semantics, it may be violated.
>>
>> I have four programs. The first is intended to exhibit the write-skew
>> anomaly, and it works as intended: after running a few times, a state
>> with @a1 = @a2 = -100 may be observed.
>>
>> http://paste.lisp.org/display/87117
>>
>> The second is intended to elibinate the write-skew anomaly, by letting
>> the changing transactions use ensure:
>>
>> http://paste.lisp.org/display/87117#1
>>
>> The third program tries to eliminate the write-skew by using
>> ref :validator instead (also ensures both refs!)
>>
>> http://paste.lisp.org/display/87117#2
>>
>> Finally, I wrote a serialized version using an agent. As expected
>> there is no write-skew.
>>
>> http://paste.lisp.org/display/87117#3
>>
>> Help?

-- 
R. Mark Volkmann
Object Computing, Inc.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to