Re: JDBC Transactions

From: Andy Colson <andy(at)squeakycode(dot)net>
To: Jonathan Tripathy <jonnyt(at)abpni(dot)co(dot)uk>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: JDBC Transactions
Date: 2010-11-01 19:12:46
Message-ID: 4CCF112E.4070804@squeakycode.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 11/1/2010 2:01 PM, Jonathan Tripathy wrote:
>
>>> I'll give you the exact case where I'm worried:
>>>
>>> We have a table of customers, and each customer can have multiple
>>> memberships (which are stored in the memberships table). We want our
>>> deleteMembership(int membershipID) method to remove the membership, then
>>> check to see if there are no more memberships left for the corresponding
>>> customer, and if there are none, delete the corresponding customer as
>>> well.
>>>
>>
>> Hum.. yeah, I can see a race condition there. but even with table
>> locking I can see it. Not sure how your stuff works, but I'm thinking
>> website:
>>
>> user1 goes to customer page, clicks on "add membership" and starts
>> filling out info.
>>
>> user2 goes to customer page, clicks on "delete membership" of the last
>> member ship, which blows away the membership, then the customer.
>>
>> user1 clicks save.
>>
>> Wouldnt matter for user2 if you locked the table or not, right?
>>
>> -Andy
>
> In the case described above, our code would throw an exception saying
> "Customer no longer exists", prompting the user to create a fresh
> customer - So I'm not worried about this (Although it may be
> inconvenient for the user, I don't think much can be done in this case).
> Please let me know if I've missed something here.
>
> I'm more worried about the following situation (Where a bad interleaving
> sequence happens):
>
> user1 goes to customer page, clicks on "delete membership" of the last
> member ship, which blows away the membership,
> user2 goes to customer page, clicks on "add membership" and starts
> filling out info.
> user1 then blows away the customer.
>
> However I guess that if the relations are set up properly in the
> database, an exception could be thrown to say that there are
> corresponding memberships still exist...
>

yep, that sequence could be a problem too. It'll be a problem whenever
more than one person gets to the customer page. Another user could
cause that customer to go away at any time. with or without table locks:

user1 and 2 go to customer page.
user1 deletes last membership, and customer
user2 does anything... cuz customer has gone away.

Do you really need to delete the customer? Is leaving it around a problem?

-Andy

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Cédric Villemain 2010-11-01 19:13:49 Re: Why so many xlogs?
Previous Message Jonathan Tripathy 2010-11-01 19:01:48 Re: JDBC Transactions