kostd kostd created WFLY-7835:
---------------------------------
Summary: StatefulSessionSynchronizationInterceptor can`t see that current tx
replaced by arjuna`s tx reaper and can`t aquire it`s own component lock
Key: WFLY-7835
URL:
https://issues.jboss.org/browse/WFLY-7835
Project: WildFly
Issue Type: Bug
Components: Transactions
Affects Versions: 10.0.0.Final
Environment: wildfly 10.0.0.Final
java 8u101
narayana-jts-integration-5.2.12.Final
SFSB with CMT
Reporter: kostd kostd
Assignee: Tom Jenkinson
Priority: Minor
full log will be attached, now short chronology:
1. ~02:20 default task-186 starts request processing. During request where was call to
ExtendedPersistenceContainer (SFSB with CMT).
So StatefulSessionSynchronizationInterceptor#processInvocation called and component lock
aquired (owner = current tx, see StatefulSessionSynchronizationInterceptor#getLockOwner)
2. 02:39:26: tx timeout reached (20min), so arjuna`s reaper thread trying cancel tx. Now
current tx == null (?):
{quote}
02:39:26,882 WARN [arjuna] (Transaction Reaper Worker 73) ARJUNA012381: Action id
0:ffff0aa010c9:22fba49e:5848e8ad:446f10c completed with multiple threads - thread default
task-186 was in progress with java.net.SocketInputStream.socketRead0(Native Method)
{quote}
3. 02:39:32: query timeout in task thread reached:
02:39:32,806 ERROR [sql] (default task-186) SQL query error: 2c344b99 (executed in
1 205 917 ms): java.sql.SQLTimeoutException: ORA-01013: пользователем запрошена отмена
текущей операции
4. 02:39:32: arjuna`s reaper thread trying to release component lock but fails because
does not own`em:
{quote}
02:39:32,808 WARN [txn] (Transaction Reaper Worker 73) WFLYTX0027: The pre-jca
synchronization
org.jboss.as.ejb3.component.stateful.StatefulSessionSynchronizationInterceptor$StatefulSessionSynchronization@58e72087
associated with tx TransactionImple < ac, BasicAction:
0:ffff0aa010c9:22fba49e:5848e8ad:446f10c status: ActionStatus.ABORTED > failed during
after completion: java.lang.IllegalMonitorStateException
{quote}
5. 02:39: task-thread contiunes request processing: hibernate noticed that current tx
replaced(removed) by arjuna`s reaper:
{quote}
02:39:32,822 WARN [lifecycle] (default task-186) #{viewModel.save}:
javax.persistence.PersistenceException: org.hibernate.HibernateException: Transaction was
rolled back in a different thread!: javax.faces.FacesException: #{viewModel.save}:
javax.persistence.PersistenceException: org.hibernate.HibernateException: Transaction was
rolled back in a different thread!
{quote}
6. but StatefulSessionSynchronizationInterceptor not noticed.
StatefulSessionSynchronizationInterceptor trying to aquire same lock, but owner changed,
was current tx and now current thread (?):
{quote}
02:39:37,827 ERROR [invocation] (default task-186) WFLYEJB0034: EJB Invocation failed on
component ExtendedPersistenceContainer for method public javax.persistence.EntityManager
ru.argustelecom.system.inf.transaction.ExtendedPersistenceContainer.getEntityManager():
javax.ejb.ConcurrentAccessTimeoutException: WFLYEJB0228: EJB 3.1 FR 4.3.14.1 concurrent
access timeout on ExtendedPersistenceContainer - could not obtain lock within 5000
MILLISECONDS
{quote}
So, next two clauses is bug-behavour or by-desighn behavour:
c1. arjuna`s reaper thread trying release component lock through
StatefulSessionSynchronizationInterceptor, but does not owns this lock.
c2. StatefulSessionSynchronizationInterceptor can`t see that current tx replaced and
trying to aquire it`s own component lock with different owners. In second try lock cannot
be aquired during any timeout
?
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)