We do not have both: scheduler.quartzProperties.org.quartz.scheduler.instanceId and scheduler.quartzProperties.org.quartz.jobStore.isClustered in iiq.properties.
I looked up Google AI for "scheduler.quartzProperties" "quartz.jobStore.isClustered"
and it is a very good candidate not only for Request but also for anything quartz manages in IdentityIQ.
More research showed that RequestProcessor class method private void processRequest(SailPointContext context, ThreadPool pool, String id)
which looks like is the one, uses call Request request = (Request)ObjectUtil.transactionLockById(context, Request.class, id);
Transaction lock seams to work only inside Hibernate Session, in other words - lock works within one VM.
For lock to mutually exclude between multiple VMs - it has to be persistent lock. This way it would go to DB and visible across VMs.
In addition, as far as I understand, Request processing is not using Quartz.
@opalyvoda Paul rightly said transactions lock should lock the object across all threads and servers and if they try to access, they simply need to wait. While you fix the concurrency issue, as a stopgap solution you might want to add a transition script in your “Scheduled Assignment” to check if the user still has the access or not, if not, then you transition to end, otherwise move forward with the next step.
While analyzing logs from 3 VM on millisecond level I noticed requests being executed sequentially.
I tried to simulate situation in our Staging today and this time there were no errors.
In production I see duplicated and errored out executions, not many. Starting from Feb 1 2026 until now failure rate is 0.963% or 0.00963 requests failing out of all executed.
I was thinking about Hibernate cache. It might be that cache is populated when requests start and each VM see role assigned to identity from cache.
I’ll try to drop cache in Start step and see if this helps.
Ideally when Plan gets compiled into Project IdentityIQ notices that role to be removed is not assigned anymore and does not include this role into project. Is this correct?
I’m not actively working on this issue, so will respond with some delays.
Thank you for following up,
I’ll try adding condition and skip significant part of workflow if identity does not have role to be removed.
Do you see a “Request” object created in the debug page for the deprovisioning of role? if so, you can see which VM it will run on? you will also see if multiple requests are created.