<div dir="auto"><p style="font-family:arial,sans-serif;font-size:small">Hello,<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">I noticed a performance issue with approvals when the approverRef references a group of user (Org or Role) in a Midpoint instance with 20000+ users. My approvals are specified in a globalPolicyRule in the SystemConfiguration object.<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">When I specifies the approverRef as below, the approval request or the approval response each takes up to 30 seconds :<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small"><approverRef oid="00000000-0000-0000-0000-000000000000" relation="org:default" type="c:OrgType"><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">Or<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small"><approverRef type="OrgType"><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">   <filter><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">      <q:equal><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">         <q:path>name</q:path><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">         <q:value>Name of the org</q:value><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">      </q:equal><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">   </filter><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">   <resolutionTime>run</resolutionTime><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"> </approverRef><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">If I reduce the number of users in Midpoint, the approval request/response gets faster.<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">On the other hand, If I specify a static list of approverRef like :<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small"><approverRef oid="00000000-0000-0000-0000-000000000000" type="c:UserType"><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><approverRef oid="00000000-0000-0000-0000-000000000000" type="c:UserType"><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">Or a dynamic list of approvers through an approverExpression like :<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small"><approverExpression><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">    <script><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">      <code>midpoint.getMembersAsReferences("00000000-0000-0000-0000-000000000000")</code><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">    </script><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"></approverExpression><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">Then , even with 20000+ users, the approval request/response takes less than a second to be processed.<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">For reference, the full global policy rule :<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small"><globalPolicyRule><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        <name>Delete user approvals</name><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        <policyConstraints><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">            <modification><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                <operation>delete</operation><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">            </modification><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        </policyConstraints><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        <policyActions><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">            <approval><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                <approvalSchema><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                    <stage><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                        <approverRef oid="00000000-0000-0000-0000-000000000000" relation="org:default" type="c:OrgType"><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                        <!-- Administrateurs Identités Arobas --><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                        </approverRef><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                        <automaticallyCompleted><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                            <description>If the user has the superuser role, we automatically approve</description><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                            <script><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                <code><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                    if (midpoint.isDirectlyAssigned(actor, "00000000-0000-0000-0000-000000000004")) {<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                        return 'skip';<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                    }<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                    else {<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                        return null;<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                    }<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                                </code><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                            </script><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                        </automaticallyCompleted><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                    </stage><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">                </approvalSchema><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">            </approval><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        </policyActions><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        <focusSelector><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">            <type>UserType</type><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">        </focusSelector><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">    </globalPolicyRule><u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">An excerpt of the trace:<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> <u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 DEBUG: ##### Exit: 2255272            ...repo.cache.RepositoryCache->getObject# etime: 1.311 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 TRACE: ###### retval: systemConfiguration:00000000-0000-0000-0000-000000000001(SystemConfiguration)<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 DEBUG: ##### Exit: 2255271           ...wf.impl.engine.helpers.NotificationHelper->sendPreparedNotifications etime: 1.755 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 DEBUG: ##### Exit: 2255257          ...wf.impl.engine.EngineInvocationContext->commit etime: 40.146 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 DEBUG: ##### Exit: 2255157         ...wf.impl.engine.WorkflowEngine->executeRequest etime: 25067.345 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 DEBUG: ##### Exit: 2255136        ...wf.impl.processors.primary.PrimaryChangeProcessor->executeStartInstructions etime: 25146.234 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 DEBUG: ##### Exit: 2255118       ...wf.impl.processors.primary.PrimaryChangeProcessor->previewOrProcessModelInvocation etime: 25153.706 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,948 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: ##### Exit: 2255117      ...wf.impl.hook.WfHook->invoke etime: 25153.876 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: ##### Exit: 2254939     ...model.impl.lens.Clockwork->click etime: 25198.070 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: #### Entry: 2255276    ...provisioning.impl.ProvisioningServiceImpl->exitConstraintsCheckerCache#<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 TRACE: ###### args: ()<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: ##### Exit: 2255276     ...provisioning.impl.ProvisioningServiceImpl->exitConstraintsCheckerCache# etime: 0.012 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 TRACE: ###### retval: null<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: ##### Exit: 2254935    ...model.impl.lens.Clockwork->run etime: 25198.487 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: ##### Exit: 2254934   ...model.api.ModelService->executeChanges etime: 25198.728 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 TRACE: ###### retval: {}<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small">2019-10-21 17:22:16,949 DEBUG: ##### Exit: 2254933  ...model.impl.controller.ModelController->executeChanges# etime: 25201.841 ms<u></u><u></u></p><p style="font-family:arial,sans-serif;font-size:small"><u></u> </p></div>