[midPoint] errorHandling controlFlow for tasks
Yakov Revyakin
yrevyakin at gmail.com
Sun Mar 26 12:29:52 CEST 2023
Playing with iterative scripting task and trying to move forward with
retries I've found strange behavior in error handling.
If Midpoint identifies a reaction as "retryLater" it tries to attach a
trigger to *a shadow* object identified by OID of the object on which an
exception is happening.
For example, if an object is the "administrator" of UserType, Midpoint
thinks that "00000000-0000-0000-0000-000000000002" is a shadow oid.
In result there is an exception
ERROR
(com.evolveum.midpoint.repo.common.activity.run.ErrorHandlingStrategyExecutor):
Couldn't create shadow synchronization trigger for shadow
00000000-0000-0000-0000-000000000002 -- live synchronization must stop.
com.evolveum.midpoint.util.exception.ObjectNotFoundException: Object of
type 'ShadowType' with OID '00000000-0000-0000-0000-000000000002' was not
found.
This happens in ErrorHandlingStrategyExecutor
2023-03-26 12:50:19,456 [REPOSITORY] [midPointScheduler_Worker-4] ERROR
(com.evolveum.midpoint.repo.common.activity.run.ErrorHandlingStrategyExecutor):
Couldn't create shadow synchronization trigger for shadow
00000000-0000-0000-0000-000000000002 -- live synchronization must stop.
com.evolveum.midpoint.util.exception.ObjectNotFoundException: Object of
type 'ShadowType' with OID '00000000-0000-0000-0000-000000000002' was not
found. at
com.evolveum.midpoint.repo.sql.helpers.ObjectRetriever.throwObjectNotFoundException(ObjectRetriever.java:215)
at
com.evolveum.midpoint.repo.sql.helpers.ObjectRetriever.getObjectInternal(ObjectRetriever.java:190)
at
com.evolveum.midpoint.repo.sql.helpers.ObjectUpdater.modifyObjectAttempt(ObjectUpdater.java:420)
at
com.evolveum.midpoint.repo.sql.SqlRepositoryServiceImpl.modifyObject(SqlRepositoryServiceImpl.java:576)
at
com.evolveum.midpoint.repo.cache.handlers.ModificationOpHandler.modifyObject(ModificationOpHandler.java:135)
at
com.evolveum.midpoint.repo.cache.RepositoryCache.modifyObject(RepositoryCache.java:189)
at
com.evolveum.midpoint.repo.cache.RepositoryCache.modifyObject(RepositoryCache.java:175)
at
com.evolveum.midpoint.repo.cache.RepositoryCache.modifyObject(RepositoryCache.java:164)
at
com.evolveum.midpoint.repo.common.activity.run.ErrorHandlingStrategyExecutor.createShadowSynchronizationTrigger(ErrorHandlingStrategyExecutor.java:209)
at *com.evolveum.midpoint.repo.common.activity.run.ErrorHandlingStrategyExecutor.processRetryLater(ErrorHandlingStrategyExecutor.java:185)
at
com.evolveum.midpoint.repo.common.activity.run.ErrorHandlingStrategyExecutor.executeErrorHandlingReaction(ErrorHandlingStrategyExecutor.java:163)
at *com.evolveum.midpoint.repo.common.activity.run.ErrorHandlingStrategyExecutor.handleError(ErrorHandlingStrategyExecutor.java:118)
at
com.evolveum.midpoint.repo.common.activity.run.IterativeActivityRun.handleError(IterativeActivityRun.java:641)
It looks like a bug. What do you think?
On Thu, 12 Jan 2023 at 13:23, Ivan Noris via midPoint <
midpoint at lists.evolveum.com> wrote:
> Could you try with iterative scripting instead?
>
> Activity (without error handling) with iterativeScripting example:
>
>
> <activity>
> <work>
> <iterativeScripting>
> <objects>
> <type>UserType</type>
> <query>
> <filter xmlns=
> "http://prism.evolveum.com/xml/ns/public/query-3"
> <http://prism.evolveum.com/xml/ns/public/query-3> xmlns:mext=
> "http://midpoint.evolveum.com/xml/ns/public/model/extension-3"
> <http://midpoint.evolveum.com/xml/ns/public/model/extension-3>>
> <ref>
> <path>archetypeRef</path>
> <value
> oid="7135e68c-ee53-11e8-8025-170b77da3fd6"/>
> <!-- Employee Archetype -->
> </ref>
> </filter>
> </query>
> </objects>
> <scriptExecutionRequest>
> <s:action xmlns:s=
> "http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
> <http://midpoint.evolveum.com/xml/ns/public/model/scripting-3>
> xmlns:scext=
> "http://midpoint.evolveum.com/xml/ns/public/model/scripting/extension-3"
> <http://midpoint.evolveum.com/xml/ns/public/model/scripting/extension-3>>
> <s:type>execute-script</s:type>
> <s:parameter>
> <s:name>script</s:name>
> <c:value xmlns:xsi=
> "http://www.w3.org/2001/XMLSchema-instance"
> <http://www.w3.org/2001/XMLSchema-instance>
> xsi:type="c:ScriptExpressionEvaluatorType">
> <c:code>
> log.info('PRINTING OBJECT PROPERTIES: Name: {},
> Given name: {}, Family name: {}',
> input.getName(), input?.getGivenName(),
> input?.getFamilyName())
> </c:code>
> </c:value>
> </s:parameter>
> </s:action>
> </scriptExecutionRequest>
> </iterativeScripting>
> </work>
> </activity>
>
> Best regards,
>
> Ivan
> On 12. 1. 2023 12:19, Yakov Revyakin wrote:
>
> <task xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3" xmlns:org="http://midpoint.evolveum.com/xml/ns/public/common/org-3" xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3" xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oid="207e057f-d5fc-4523-ad76-ccf2401291ba" version="91"> <name>Test CSV Downloader</name> <assignment> <targetRef oid="00000000-0000-0000-0000-000000000508" relation="org:default" type="c:ArchetypeType"/> </assignment> <executionState>runnable</executionState> <schedulingState>ready</schedulingState> <category>BulkActions</category> <binding>loose</binding> <schedule> <recurrence>recurring</recurrence> <interval>30</interval> <misfireAction>reschedule</misfireAction> </schedule> <activity> <work> <nonIterativeScripting> <scriptExecutionRequest xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"> <s:execute> <s:script> <code> throw new java.lang.Exception("Configuration error")
> </code> </s:script> <s:forWholeInput>true</s:forWholeInput> </s:execute> </scriptExecutionRequest> </nonIterativeScripting> </work> <controlFlow> <errorHandling> <entry> <situation> <errorCategory>configuration</errorCategory> <status>fatal_error</status> </situation> <reaction> <retryLater> <initialInterval>PT1M</initialInterval> <nextInterval>PT1M</nextInterval> <retryLimit>3</retryLimit> </retryLater> </reaction> </entry> </errorHandling> </controlFlow> </activity></task>
>
>
> On Thu, 12 Jan 2023 at 13:00, Yakov Revyakin <yrevyakin at gmail.com> wrote:
>
>> At least for 4.4.3 it doesn't work this way. My task includes
>>
>> <controlFlow> <errorHandling> <entry> <situation> <errorCategory>configuration</errorCategory> <status>fatal_error</status> </situation> <reaction> <retryLater> <initialInterval>PT1M</initialInterval> <nextInterval>PT1M</nextInterval> <retryLimit>3</retryLimit> </retryLater> </reaction> </entry> </errorHandling></controlFlow>
>>
>> But the task becomes suspended right after the first error. Status of the
>> task becomes "Fatal Error"
>> I have set enableExperimentalCode to true.
>>
>>
>> On Thu, 12 Jan 2023 at 10:24, Ivan Noris via midPoint <
>> midpoint at lists.evolveum.com> wrote:
>>
>>> Hi Yakov,
>>>
>>> have you tried
>>>
>>> https://docs.evolveum.com/midpoint/reference/tasks/task-error-handling/#triggers-2
>>> example? Perhaps you are missing the errorCategory.
>>>
>>> Please see also the whole documentation page.
>>>
>>> As the feature is marked Experimental, you may have also hit some of its
>>> limits. I remember it worked according to the samples for Live sync task
>>> for sure.
>>>
>>> Best regards,
>>>
>>> Ivan
>>>
>>> On 11. 1. 2023 18:06, Yakov Revyakin via midPoint wrote:
>>> > Hi all,
>>> > It is not clear how to configure retry for a task.
>>> > I have a task which got fatal_error because of an incorrect accessKey
>>> > for an external resource. The task is suspended after the error.
>>> > I'd like to have another behavior - task must retry attempt to execute
>>> > after a minute.
>>> > I configured errorHandling in the activity section but still have the
>>> > same result - the task is suspended after an error and there is any
>>> > retry. What's wrong?
>>> >
>>> > <activity>
>>> > .......
>>> > <controlFlow>
>>> > <errorHandling>
>>> > <entry>
>>> > <reaction>
>>> > <retryLater>
>>> > <initialInterval>PT1M</initialInterval>
>>> > <nextInterval>PT3M</nextInterval>
>>> > <retryLimit>3</retryLimit>
>>> > </retryLater>
>>> > </reaction>
>>> > </entry>
>>> > </errorHandling>
>>> > </controlFlow>
>>> > </activity>
>>> >
>>> > _______________________________________________
>>> > midPoint mailing list
>>> > midPoint at lists.evolveum.com
>>> > https://lists.evolveum.com/mailman/listinfo/midpoint
>>>
>>> --
>>> Ivan Noris
>>> Expert Identity Engineer
>>> evolveum.com
>>>
>>> _______________________________________________
>>> midPoint mailing list
>>> midPoint at lists.evolveum.com
>>> https://lists.evolveum.com/mailman/listinfo/midpoint
>>>
>> --
> Ivan Noris
> Expert Identity Engineerevolveum.com
>
> _______________________________________________
> midPoint mailing list
> midPoint at lists.evolveum.com
> https://lists.evolveum.com/mailman/listinfo/midpoint
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20230326/48e480d5/attachment-0001.htm>
More information about the midPoint
mailing list