]
RH Bugzilla Integration commented on TEIID-4057:
------------------------------------------------
Juraj Duráni <jdurani(a)redhat.com> changed the Status of [bug
OData - if PUT fails, next update request fails because table in DB
is still locked
-----------------------------------------------------------------------------------
Key: TEIID-4057
URL:
https://issues.jboss.org/browse/TEIID-4057
Project: Teiid
Issue Type: Sub-task
Components: OData
Reporter: Juraj Duráni
Assignee: Steven Hawkins
Fix For: 9.0, 8.12.5
I can see (from the log) that processing of PUT request is as follows:
# select record from table
# delete record
# parse entity from HTTP request
# insert new record
But if e.g. step 3 fails, Teiid cancels transaction and returns error. In my opinion,
parsing of the entity should be the first step (or at least right after select).
What happen here is, that DELETE statement creates transaction and locks the table. But
the transaction is not canceled immediately after cancel request \[1\]. This causes that
no other query can succeed, because of lock on the table (EAP uses connection pool and
does not close connections immediately and therefore open connection has still one
transaction in active state).
*Note:* We use H2 database for testing purpose. But I think that this could happen with
any DB. Anyway, parsing of the entity should not be performed after delete.
\[1\]
{code:plain}
09:35:33,937 DEBUG [org.teiid.TRANSPORT] (New I/O worker #1) Channel closed
09:40:31,430 WARN [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117:
TransactionReaper::check timeout for TX 0:ffff7f000001:113c3cbe:56e131a7:e in state RUN
09:40:31,438 WARN [com.arjuna.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012121:
TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 0,5,main]
successfully canceled TX 0:ffff7f000001:113c3cbe:56e131a7:e
{code}