> On Feb 28, 2017, at 3:07 PM, Aldo Caruso wrote:
> 
>   I'm trying to understand interactions between transactions with 
> different isolation levels.

The problem is not mixed isolation levels. You would get the same behavior if 
all transactions were Snapshot

The scenario (described below in detail) is

Start transaction A

Start transaction B

B updates some record

B commits

Start transaction C

C updates the same record

A attempts to update that record and waits for C to end

Whatever C dies A will fail because of a conflict with C if C commits or a 
conflict with B if C rolls back.  Why doesn't A just fail immediately?

The answer is that Firebird checks only the most recent record version for 
conflicts.  Checking the next back version would avoid having A wait in this 
case but would require more reading in general. 

Good luck,

Ann


> 
>   My environment is Firebird Super Server 2.5 (v. 2.5.2) on Linux 
> Ubuntu 14.04
> 
>   I'm testing by opening two consoles and running isql-fb on both consoles.
> 
> On the first one I start a SNAPSHOT transaction ( lets call it 
> transaction A ).
> 
> Afterwards, on the second console, I start another transaction with a 
> READ COMMITTED RECORD_VERSION isolation level ( lets call it transaction 
> B ).
> 
> In transaction B, I update a record X and commit the transaction.
> 
> In the same second console I start a third transaction, also READ 
> COMMITTED RECORD_VERSION ( lets call it transaction C ).
> 
> In transaction C, I update record X, but neither commit it nor roll it 
> back ( transaction C remains active ).
> 
> On the first console, in transaction A, I update record X and it 
> obviously waits for a commit or a rollback of transaction C.
> 
> Back on the second console, in transaction C, I roll it back.
> 
> Not surprisingly, on the first console, transaction A ends waiting with 
> a collision error, because although transaction C rolled back, 
> transaction B, that had started after transaction A, had made an update 
> and committed it. As the isolation level of transaction A was SNAPSHOT, 
> it finds a collision and so an error is risen.
> 
> So we have the following situation:
> 
> If transaction C ends rolling back (as in the example), transaction A 
> raises an error because of the collision with the previous transaction 
> that touched and committed the record ( transaction B ).
> 
> If transaction C ends committing, transaction A also raises an error 
> because of the collision with transaction C.
> 
> Whichever way transaction C ends ( committing or rolling back ), the 
> waiting update in transaction A is aborted with an error message because 
> of a collision.
> 
> The question is which was the point of waiting in transaction A for the 
> end of transaction C ? Why didn't it raise an error in the same moment I 
> tried to do an update in transaction A ? Couldn't it foresee that the 
> record was previously updated by a committed transaction B, which 
> started after the SNAPSHOT transaction A, and so whichever the outcome 
> of C were there would be a collision ?
> 
> Note also that if in the example above, we wouldn't have started 
> transaction C, transaction A would raise an error as soon as it tried to 
> update the record that was updated and committed by B ( I tested it ).
> 
> Thanks for any answer.
> 
> Aldo Caruso
> 
> 
> 
> 
> ------------------------------------
> Posted by: Aldo Caruso <aldo.car...@argencasas.com>
> ------------------------------------
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Visit http://www.firebirdsql.org and click the Documentation item
> on the main (top) menu.  Try FAQ and other links from the left-side menu 
> there.
> 
> Also search the knowledgebases at 
> http://www.ibphoenix.com/resources/documents/ 
> 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ------------------------------------
> 
> Yahoo Groups Links
> 
> 
> 
  • [firebird-suppor... Aldo Caruso aldo.car...@argencasas.com [firebird-support]
    • Re: [firebi... Ann Harrison aharri...@ibphoenix.com [firebird-support]
      • Re: [fi... Aldo Caruso aldo.car...@argencasas.com [firebird-support]
        • Re:... Ann Harrison aharri...@ibphoenix.com [firebird-support]
          • ... Aldo Caruso aldo.car...@argencasas.com [firebird-support]
        • [fi... Sandris sand...@solcraft.lv [firebird-support]
          • ... Helen Borrie hele...@iinet.net.au [firebird-support]

Reply via email to