[
https://issues.apache.org/jira/browse/SYNCOPE-1241?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16274429#comment-16274429
]
ASF subversion and git services commented on SYNCOPE-1241:
----------------------------------------------------------
Commit f7dcee1a7672e9a6ce1cbd5af24dcd3a92e5eed6 in syncope's branch
refs/heads/2_0_X from [~ilgrosso]
[ https://git-wip-us.apache.org/repos/asf?p=syncope.git;h=f7dcee1 ]
[SYNCOPE-1241] Avoid carrying around PropagationTask (JPA) instances, use
PropagationTaskTO instead
> Under high load propagation after pull might fail
> -------------------------------------------------
>
> Key: SYNCOPE-1241
> URL: https://issues.apache.org/jira/browse/SYNCOPE-1241
> Project: Syncope
> Issue Type: Bug
> Components: core
> Affects Versions: 2.0.6
> Reporter: Francesco Chicchiriccò
> Assignee: Francesco Chicchiriccò
> Fix For: 2.0.7, 2.1.0
>
>
> The
> [PriorityPropagationTaskExecutor|https://github.com/apache/syncope/blob/2_0_X/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java]
> is designed to run the assigned PropagationTask instance via a
> {{CompletionService}}, e.g. potentially in a separate thread.
> Dach PropagationTask instance carries a reference to ExternalResource, and in
> the end to the underlying JDBC connection (via OpenJPA); given what said
> above, it might happen that a PropagationTask is executed in a different
> thread than the one it was created in, resulting in errors as follows:
> {code}
> ERROR
> org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor
> - Exception during provision on resource USERSCHED-write
> org.apache.openjpa.persistence.PersistenceException: This statement has been
> closed.
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:5003)
> ~[openjpa-jdbc-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4963)
> ~[openjpa-jdbc-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:133)
> ~[openjpa-jdbc-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:115)
> ~[openjpa-jdbc-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
> ~[openjpa-jdbc-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:687)
> ~[openjpa-jdbc-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:117)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.datacache.DataCacheStoreManager.load(DataCacheStoreManager.java:462)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:117)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:78)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:3145)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:3225)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1690)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1624)
> ~[openjpa-kernel-2.4.2.jar:2.4.2]
> at
> org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResource.pcGetorgUnit(JPAExternalResource.java)
> ~[syncope-core-persistence-jpa-2.0.6.jar:2.0.6]
> at
> org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResource.getOrgUnit(JPAExternalResource.java:238)
> ~[syncope-core-persistence-jpa-2.0.6.jar:2.0.6]
> at
> org.apache.syncope.core.provisioning.java.propagation.AbstractPropagationTaskExecutor.execute(AbstractPropagationTaskExecutor.java:389)
> ~[syncope-core-provisioning-java-2.0.6.jar:2.0.6]
> at
> org.apache.syncope.core.provisioning.java.propagation.DefaultPropagationTaskCallable.call(DefaultPropagationTaskCallable.java:89)
> ~[syncope-core-provisioning-java-2.0.6.jar:2.0.6]
> at
> org.apache.syncope.core.provisioning.java.propagation.DefaultPropagationTaskCallable.call(DefaultPropagationTaskCallable.java:38)
> ~[syncope-core-provisioning-java-2.0.6.jar:2.0.6]
> at sun.reflect.GeneratedMethodAccessor798.invoke(Unknown Source)
> ~[?:?]
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:1.8.0_151]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151]
> at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
> ~[spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
> ~[spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
> ~[spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
> ~[spring-tx-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
> ~[spring-tx-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
> ~[spring-tx-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.apache.syncope.core.persistence.jpa.spring.DomainTransactionInterceptor.invoke(DomainTransactionInterceptor.java:64)
> ~[syncope-core-persistence-jpa-2.0.6.jar:2.0.6]
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
> ~[spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
> ~[spring-aop-4.3.11.RELEASE.jar:4.3.11.RELEASE]
> at com.sun.proxy.$Proxy295.call(Unknown Source) ~[?:?]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> ~[?:1.8.0_151]
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> ~[?:1.8.0_151]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> ~[?:1.8.0_151]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> ~[?:1.8.0_151]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> ~[?:1.8.0_151]
> at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
> Caused by: org.postgresql.util.PSQLException: This statement has been closed.
> at org.postgresql.jdbc.PgStatement.checkClosed(PgStatement.java:647)
> ~[postgresql-42.1.1.jar:42.1.1]
> {code}
> Such errors are observed especially when, as a result of a PullTask
> execution, several PropagationTasks are generated and executed.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)