Il giorno 29/gen/2013, alle ore 10.10, Andrei Shakirin ha scritto:

> Hi Fabio,
> 
>> Hi Andrei, I found the problem: into the AbstractPropagationTaskExecutor,
>> line 334, the call to getRemoteObject have to be encapsulated into a try-
>> catch body.
>> As you can see, this is not an issue related to the TimeoutException only but
>> it is an issue of the whole propagation process.
> 
> OK, sounds reasonable. Propagation exceptions should be wrapped on high level 
> exception like SCCEE.
> Just curious how this test runs by you before? Is there the same reason as in 
> my topic (2)?

Really I don't know. Probably (2) is the main reason.

> 
>> This is terrible: why the creation of a new virtual attribute should fail?
>> Doesn't UVirAttr id auto generation work fine anymore?
>> Can you investigate more?
> 
> I already have seen the same effect with Notification DAO object: discussion 
> http://mail-archives.apache.org/mod_mbox/syncope-dev/201301.mbox/%3c50f3c43f.1000...@apache.org%3E
>  .
> It seems that AUTO generation strategy doesn't work properly under high 
> volume/ high concurrency at least for H2 DB.
> 
> Currently I see only one reliable way to avoid it: use TABLE based ID 
> strategy for all objects.
> WDYT?

A little overhead during the development phase but stronger in fact.
I can agree.

Regards,
F.

> Regards,
> Andrei.
> 
>> -----Original Message-----
>> From: Fabio Martelli [mailto:fabio.marte...@gmail.com]
>> Sent: Dienstag, 29. Januar 2013 09:40
>> To: Andrei Shakirin
>> Cc: dev@syncope.apache.org
>> Subject: Re: [Question] Problem with test UsertTestITCase.issueSYNCOPE279
>> 
>> 
>> Il giorno 28/gen/2013, alle ore 18.54, Andrei Shakirin ha scritto:
>> 
>>> Hi Fabio,
>>> 
>>> Investigated a little bit more and found the following:
>>> 
>>> 1. TimeoutException
>>>> This is the expected exception: it should be handled and returned as
>>>> a SyncopeClientErrorException.
>>> 
>>> Not really. As far as I can see TimeoutException thrown by
>> ConnectorFacadeProxy.getObject() is never wrapped to
>> SyncopeClientErrorException.
>>> Check the whole chain: UserController.create() ->
>>> UserController.createInternal() -> taskExecutor.execute() ->
>>> PriorityPropagationTaskExecutor.execute() ->
>>> AbstractPropagationTaskExecutor.getRemoteObject() ->
>>> ConnectorFacadeProxy.getObject();
>>> 
>>> AbstractPropagationTaskExecutor.getRemoteObject() just re-throws the
>> Timeout exception.
>>> syncopeClientError.jsp doesn't handle the TimeoutException and returns
>> InternalServerError that I get from my test.
>> 
>> Hi Andrei, I found the problem: into the AbstractPropagationTaskExecutor,
>> line 334, the call to getRemoteObject have to be encapsulated into a try-
>> catch body.
>> As you can see, this is not an issue related to the TimeoutException only but
>> it is an issue of the whole propagation process.
>> 
>> TimeoutException (or whatever specific propagation exception) won't be
>> never thrown ...
>> 
>> Let me take care of this particular fix.
>> 
>>> That explains why this test doesn't work. Why it works during the
>>> build? - see topic (2)
>>> 
>>> 2. Why UserTestITCase. issueSYNCOPE279() works sometimes.
>>>    If UserTestITCase executed after some previous tests (or under some
>> other conditions: JDK, OS, etc), it throws other exception BEFORE execute
>> the task:
>> 
>> This is terrible: why the creation of a new virtual attribute should fail?
>> Doesn't UVirAttr id auto generation work fine anymore?
>> Can you investigate more?
>> 
>>> 18:23:41.946 ERROR
>>> org.apache.syncope.core.rest.controller.AbstractController - Exception
>>> thrown by REST methods
>>> org.springframework.dao.DataIntegrityViolationException: The transaction
>> has been rolled back.  See the nested exceptions for details on the errors
>> that occurred.; nested exception is <openjpa-2.2.1-r422266:1396819 fatal
>> store error> org.apache.openjpa.persistence.EntityExistsException: The
>> transaction has been rolled back.  See the nested exceptions for details on
>> the errors that occurred.
>>> FailedObject:
>> org.apache.syncope.core.persistence.beans.user.UVirAttr@cd0cca3
>>>     at
>> org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessE
>> xceptionIfPossible(EntityManagerFactoryUtils.java:313) ~[spring-orm-
>> 3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible
>> (DefaultJpaDialect.java:121) ~[spring-orm-3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransac
>> tionManager.java:517) ~[spring-orm-3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.transaction.support.AbstractPlatformTransactionMana
>> ger.processCommit(AbstractPlatformTransactionManager.java:755) ~[spring-
>> tx-3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.transaction.support.AbstractPlatformTransactionMana
>> ger.commit(AbstractPlatformTransactionManager.java:724) ~[spring-tx-
>> 3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.transaction.interceptor.TransactionAspectSupport.com
>> mitTransactionAfterReturning(TransactionAspectSupport.java:387) ~[spring-
>> tx-3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(
>> TransactionInterceptor.java:120) ~[spring-tx-
>> 3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
>> ReflectiveMethodInvocation.java:172) ~[spring-aop-
>> 3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDyna
>> micAopProxy.java:204) ~[spring-aop-3.2.1.RELEASE.jar:3.2.1.RELEASE]
>>>     at $Proxy137.create(Unknown Source) ~[na:na]
>>>     at
>> org.apache.syncope.core.rest.controller.UserController.createInternal(User
>> Controller.java:306) ~[UserController.class:na]
>>>     at
>> org.apache.syncope.core.rest.controller.UserController.create(UserControll
>> er.java:284) ~[UserController.class:na]
>>> 
>>> Caused by: org.apache.openjpa.persistence.EntityExistsException:
>> Eindeutiger Index oder Primärschlüssel verletzt: "PRIMARY_KEY_C4 ON
>> PUBLIC.UVIRATTR(ID)"
>>> Unique index or primary key violation: "PRIMARY_KEY_C4 ON
>> PUBLIC.UVIRATTR(ID)"; SQL statement:
>>> INSERT INTO PUBLIC.UVirAttr (ID, OWNER_ID, VIRTUALSCHEMA_NAME)
>> VALUES
>>> (?, ?, ?) [23505-170] {prepstmnt 2122205967 INSERT INTO
>>> PUBLIC.UVirAttr (ID, OWNER_ID, VIRTUALSCHEMA_NAME) VALUES (?, ?,
>> ?)}
>>> [code=23505, state=23505]
>>> 
>>> DataIntegrityViolationException is mapped to
>> SyncopeClientCompositeError Type header in syncopeClientError.jsp and
>> interpreted as SCCEE on the client side. Test is green just because this 
>> effect.
>>> I think the reason of this DataIntegrityViolationException is AUTO
>> generation strategy in AbstractVirtualAttribute entity.
>>> 
>>> It seems that this test runs successfully only occasionally because of
>> another error.
>>> Could you confirm my findings?
>>> 
>>> If yes, we should fix the following:
>>> 1. Map TimeoutException to SCCEE
>>> 2. Fix DataIntegrityViolationException for AbstractVirtualAttribute
>>> 
>>> Generally I would propose to design integration tests as independent as
>> possible. Dependencies between different test cases and individual tests
>> makes error analyse extreme difficult and time consuming. Ideally
>> integration test should leave environment unchanged or compensated.
>>> WDYT?
>>> 
>>> Regards,
>>> Andrei.
>>> 
>>>> -----Original Message-----
>>>> From: Fabio Martelli [mailto:fabio.marte...@gmail.com]
>>>> Sent: Montag, 28. Januar 2013 16:42
>>>> To: dev@syncope.apache.org
>>>> Subject: Re: [Question] Problem with test
>>>> UsertTestITCase.issueSYNCOPE279
>>>> 
>>>> Hi Andrei, answers and comment inline.
>>>> 
>>>> Il giorno 28/gen/2013, alle ore 16.09, Andrei Shakirin ha scritto:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> I am analysing problem regarding UsertTestITCase.issueSYNCOPE279().
>>>>> It is reproducible in following situations:
>>>>> 
>>>>> 1)      Run it as single test: mvn -Pdev -DwaitForCheck=false -Dit.test=
>>>> UserTestITCase# issueSYNCOPE279
>>>> 
>>>> Wow, strange, I implemented using these options ...
>>>> 
>>>>> Because of some reasons this test is succeed in case if
>>>> 
>> AuthenticationTestITCase,ResourceTestITCase,RoleTestITCase,SchemaTest
>>>> IT Case,UserRequestTestITCase were executed before (interesting :) )
>>>> 
>>>> This is really strange. issueSYNCOPE279 shouldn't have any dependency.
>>>> Please, take a look at the code: it simply create a new profile
>>>> giving it an ad- hoc resource (never used before).
>>>> 
>>>>> 2)      If all core integration tests is running under JDK 1.7
>>>>> 3)      With some other conditions.
>>>>> 
>>>>> My analysis shows that the end reason is that SOAP connector (using
>>>>> CXF
>>>> client) receives HTML as response for test() invocation:
>>>>> 
>>>>> 15:47:46.041 DEBUG
>>>> org.identityconnectors.framework.api.operations.GetApiOp.getObject
>>>> Exception:
>>>>> javax.xml.ws.soap.SOAPFaultException: Response was of unexpected
>>>> text/html ContentType.  Incoming portion of HTML stream: OK
>>>>>              at
>>>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:15
>>>> 6) ~[cxf-rt-frontend-jaxws-2.7.0.jar:2.7.0]
>>>>>              at $Proxy196.checkAlive(Unknown Source) ~[na:na]
>>>>>              at
>>>> 
>> org.connid.bundles.soap.WebServiceConnection.test(WebServiceConnectio
>>>> n.java:89) ~[na:na]
>>>>>              at
>>>> 
>> org.connid.bundles.soap.WebServiceConnector.checkAlive(WebServiceCon
>>>> nector.java:169) ~[na:na]
>>>>>              at
>>>> org.identityconnectors.framework.impl.api.local.ConnectorPoolManager$
>>>> Co
>>>> nnectorPoolHandler.testObject(ConnectorPoolManager.java:105)
>>>> ~[framework-internal-1.3.2.jar:na]
>>>> 
>>>> This exception occurs after the Timeout. It is thrown by the "zombie" task.
>>>> 
>>>>> Therefore propagation of resource "ws-target-resource-3" is failed
>>>>> with
>>>> following error:
>>>>> 
>>>>> 15:46:55.221 ERROR
>>>> 
>> org.apache.syncope.core.propagation.impl.AbstractPropagationTaskExecu
>>>> to r - Exception during provision on resource ws-target-resource-3
>>>>> org.apache.syncope.core.propagation.TimeoutException: Request
>> timeout
>>>>>              at
>>>> 
>> org.apache.syncope.core.propagation.impl.ConnectorFacadeProxy.getObje
>>>> c
>>>> t(ConnectorFacadeProxy.java:380) ~[ConnectorFacadeProxy.class:na]
>>>>>              at
>>>> 
>> org.apache.syncope.core.propagation.impl.AbstractPropagationTaskExecu
>>>> to
>>>> r.getRemoteObject(AbstractPropagationTaskExecutor.java:438)
>>>> ~[AbstractPropagationTaskExecutor.class:na]
>>>>>              at
>>>> 
>> org.apache.syncope.core.propagation.impl.AbstractPropagationTaskExecu
>>>> to
>>>> r.execute(AbstractPropagationTaskExecutor.java:288)
>>>> ~[AbstractPropagationTaskExecutor.class:na]
>>>> 
>>>> This is the expected exception: it should be handled and returned as
>>>> a SyncopeClientErrorException.
>>>> 
>>>>> Could you give a hint how to investigate this connector invocation error?
>>>>> To which instance SOAP connector sends test() request? Why it
>>>>> sometimes
>>>> answers with HTML?
>>>> 
>>>> It is not a really soap resource: it is a servlet returning "OK"
>>>> after a delay of 60 seconds.
>>>> Syncope shouldn't take care of the result because it comes after the
>> timeout.
>>>> 
>>>> Regards,
>>>> F.
>>>> 
>>>> 
>>> 
> 

Reply via email to