Which IIQ version are you inquiring about?
8.4p2
Share all details about your problem, including any error messages you may have received.
We are facing an issue where the identity refresh task for 10 users is almost taking 2 hours to finish. We have turned off the events and tried as well. It is OOTB task which is being triggered from the rule. No errors or anything. Just taking a lot of time to get it completed. We are seeing this issue only in 1 of our 3 environments. We have compared with other environments, but there is no difference. Any suggestions or inputs are highly appreciated.
Thanks,
Maneesh.B
dheerajk27
(dheeraj kumar)
April 23, 2025, 1:10am
2
Hi @mbommakanti3298 ,
WOuld you be able to share the taskDefination and the rule from where your are calling the refresh task, so that we could see what all tasks are checked in your refresh task. Ideally running refresh on 10 users should not be taking that much time, and looks to be more like environmental and data issue.
Hi Dheeraj,
TaskDefinition:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE TaskDefinition PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<TaskDefinition name="APPNAME Daily refresh-External-Night" resultAction="Delete" subType="task_item_type_identity" type="Identity">
<Attributes>
<Map>
<entry key="TaskSchedule.host"/>
<entry key="checkHistory" value="false"/>
<entry key="checkPolicies" value="false"/>
<entry key="correlateEntitlements" value="true"/>
<entry key="correlateScope" value="false"/>
<entry key="deleteDormantGroups" value="false"/>
<entry key="disableIdentityProcessingThreshold" value="false"/>
<entry key="disableManagerLookup" value="false"/>
<entry key="doManualActions" value="false"/>
<entry key="enableManualAccountSelection" value="false"/>
<entry key="enablePartitioning" value="false"/>
<entry key="excludeInactive" value="false"/>
<entry key="filterNeedsRefresh" value="false"/>
<entry key="forceWorkflow" value="false"/>
<entry key="includeWindowModified" value="false"/>
<entry key="keepInactiveViolations" value="false"/>
<entry key="markDormantScopes" value="false"/>
<entry key="noAutoCreateScopes" value="false"/>
<entry key="noCheckPendingWorkflow" value="true"/>
<entry key="noMaintenanceWindowRetry" value="false"/>
<entry key="noResetNeedsRefresh" value="false"/>
<entry key="noRoleDeprovisioning" value="false"/>
<entry key="processTriggers" value="true"/>
<entry key="promoteAttributes" value="true"/>
<entry key="promoteManagedAttributes" value="false"/>
<entry key="provision" value="true"/>
<entry key="refreshCompositeApplications" value="false"/>
<entry key="refreshGroups" value="false"/>
<entry key="refreshIdentityEntitlements" value="false"/>
<entry key="refreshManagerStatus" value="false"/>
<entry key="refreshRoleMetadata" value="true"/>
<entry key="refreshScorecard" value="false"/>
<entry key="synchronizeAttributes" value="true"/>
<entry key="taskCompletionEmailNotify" value="Disabled"/>
<entry key="taskCompletionEmailRecipients"/>
<entry key="taskCompletionEmailTemplate"/>
</Map>
</Attributes>
<Description>Template for identity refresh scans.</Description>
<Parent>
<Reference class="sailpoint.object.TaskDefinition" name="Identity Refresh"/>
</Parent>
</TaskDefinition>
Rule:
import sailpoint.object.Identity;
import sailpoint.object.Link;
import sailpoint.object.Application;
import sailpoint.object.QueryOptions;
import sailpoint.object.Filter;
import sailpoint.object.TaskResult;
import sailpoint.tools.Util;
import java.text.SimpleDateFormat;
import java.util.Date;
import sailpoint.api.TaskManager;
import sailpoint.object.Attributes;
import sailpoint.object.TaskDefinition;
import sailpoint.tools.Message;
import sailpoint.api.Terminator;
import sailpoint.object.GroupDefinition;
import sailpoint.object.Filter.BooleanOperation;
import sailpoint.object.Filter.CompositeFilter;
import java.util.Calendar;
List modifiedUserList = new ArrayList();
Terminator arnold = new Terminator(context);
GroupDefinition groupDefinition = context.getObject(GroupDefinition.class, "APPNAME_External_Users_ModifiedLastDay");
log.debug("groupDefinition.."+groupDefinition);
if(groupDefinition != null){
arnold.deleteObject(groupDefinition);
}
log.debug("Starting APPNAME-Refresh-Task....");
TaskResult lastTaskResult = context.getObjectByName(TaskResult.class, "APPNAME Account Aggregation");
QueryOptions taskQo = new QueryOptions();
taskQo.add(Filter.like("name", "APPNAME Daily refresh- Night"));
List taskResultList = context.getObjects(TaskResult.class, taskQo);
log.debug("taskResultList...."+taskResultList.size());
String oldTaskName = "APPNAME Daily refresh-External- "+(taskResultList.size()-1);
log.debug("oldTaskName..name.."+oldTaskName);
if(lastTaskResult !=null){
Calendar cal = Calendar.getInstance();
//cal.setTime(lastTaskResult.getCreated());
cal.add(Calendar.DATE, -1);
Date oneDayBack = cal.getTime();
QueryOptions linkQo = new QueryOptions();
linkQo.add(Filter.eq("application.name", "APPNAME"));
//linkQo.add(Filter.lt("modified", ));
linkQo.add(Filter.gt("modified", oneDayBack));
List linksList = context.getObjects(Link.class, linkQo);
log.debug("linksList...."+linksList.size());
log.debug("taskResult...."+lastTaskResult.getCompleted());
List dates = new ArrayList();
TaskResult taskResult = context.getObject(TaskResult.class, "APPNAME Daily refresh-External-Night");
int counter = 0;
for(Link link : linksList){
if(link.getModified() != null) {
//if(link.getAttribute("HELPDESK_SF_CONTACT_ID") != null) {
log.debug("UserName .....- "+link.getIdentity().getName()+" -is Internal..counter.."+counter);
Identity id = link.getIdentity();
//modifiedUserList.add(link.getIdentity().getName());
String idType = null;
idType = id.getType();
if(idType!=null && idType.equals("Partner")){
modifiedUserList.add(id.getName());
}
if(idType==null){
modifiedUserList.add(id.getName());
}
counter++;
//}
}
}
}
else{
taskResult.addMessage(Message.info("There is no previous task reult for APPNAME Immtrac Refresh Identity: ", null));
return ;
}
log.debug("Running the refresh task for users........."+modifiedUserList.size());
StringBuilder sb = new StringBuilder("");
if(modifiedUserList !=null @and !modifiedUserList.isEmpty()){
for(String userName : modifiedUserList){
sb.append("name==\"" + userName + "\"").append("||");
}
GroupDefinition groupDefinition = context.getObject(GroupDefinition.class, "APPNAME_External_Users_ModifiedLastDay");
// for(String userName : modifiedUserList){
//groupDefinition.getFilter().add(Filter.eq("name", userName));
// }
log.debug("after deletion..");
if(groupDefinition == null){
groupDefinition = new GroupDefinition();
groupDefinition.setName("APPNAME_External_Users_ModifiedLastDay");
//CompositeFilter compositeFilter = new CompositeFilter();
//compositeFilter.or(Filter.eq("name", modifiedUserList.get(0)));
groupDefinition.setFilter(Filter.or(Filter.in("name", modifiedUserList)));
log.debug("after deletion.groupDefinition."+groupDefinition);
context.saveObject(groupDefinition);
context.commitTransaction();
List filterList = new ArrayList();
}
context.saveObject(groupDefinition);
context.commitTransaction();
String filterString = sb.toString().substring(0, sb.toString().length() -2);
log.debug("Running the refresh task for ........."+modifiedUserList);
log.debug("Running the refresh task for ..users filter ......."+filterString);
Attributes attributes = new Attributes();
String filter = "name==\"" + modifiedUserList + "\"";
attributes.put("filterGroups", groupDefinition.getName());
attributes.put("noCheckPendingWorkflow", "true");
attributes.put("correlateEntitlements", "true");
attributes.put("processTriggers", "true");
attributes.put("provision", "true");
attributes.put("promoteAttributes", "true");
attributes.put("refreshRoleMetadata", "false");
attributes.put("synchronizeAttributes", "true");
attributes.put("noCheckPendingWorkflow", "true");
//attributes.put("enablePartitioning", "true");
TaskDefinition task = context.getObjectByName(TaskDefinition.class, "APPNAME Daily refresh-External-Night");
if (null != task) {
try {
Date now = new Date();
TaskManager tm = new TaskManager(context);
tm.run(task,attributes);
} catch (Exception e) {
log.debug("Exception processing request for "+task.getName());
throw new Exception(e);
}
}
}
taskResult.addMessage(Message.info("Total number of Users : " + modifiedUserList, null));
if(lastTaskResult !=null){
//arnold.deleteObject(context.getObjectByName(TaskResult.class, oldTaskName));
}
return modifiedUserList;
Hi @mbommakanti3298
Have you tried restarting your application server?
If you are on Linux, you could run “netstat -a | grep SYN_SENT” to see if you are having trouble connecting to something.
dheerajk27
(dheeraj kumar)
April 23, 2025, 5:47am
6
hi @mbommakanti3298 ,
can you please try executing task marking below option as false, and see if you see any improvement is processing time:
<entry key="provision" value="false"/>
provision task performs bulky operation of provisioning missing targetAssignments, if in case there are any connection which is hung or taking longer in connection, this option may cause in delay of the task completion.
Hello Paul.
Thanks for your reply. Yes, we did try re-starting the server. We have ran the command that you have specified and it did not return any stalled or hanging connections.
Thanks,
Maneesh.B
Hello Dheeraj,
We do need the provision key to be true as there are some provisioning workflows that are needed to be triggered during refresh. But, this used to be pretty quick earlier and it’s quick in our other environments even now.
Thanks,
Maneesh.B
Update:
We have tried running a plain OOTB task for 4 users. Even that is taking more than 45 mins to get complete. We have tried increasing the heap size xms values as well.
can u remove it and then try ?
Hello,
Thank you for your response. We have removed this and tried - still it’s taking same time.
Thanks,
Maneesh.B
Update:
We had a workflow that was missing end step and the workflow case is open since then, deleted the workflow case and tried the refresh task again - which is working almost instantaneously now. Thank you everyone for your time and inputs on this. Highly appreciate it.
Thanks,
Maneesh.B
2 Likes
system
(system)
Closed
June 22, 2025, 4:28pm
14
This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.