Hey everyone,
I’ve been working through a bit of a head-scratcher since our move to Jira 9.x Data Center, and I wanted to see if anyone else in the community has run into this or if I’m just over-engineering my solution.
We’re running a fairly massive instance (30k+ users), and like most of you, we rely heavily on ScriptRunner listeners. Specifically, we have a listener on Issue Updated that does a bit of "heavy lifting"—it runs a JQL search to check sibling issues in a hierarchy and then rolls up those values to a parent issue to keep our SLAs accurate.
In Jira 8.x, this was rock solid. But since moving to 9.x and its new "lazy loading" index architecture, we’re seeing what I’ve started calling "Ghost Indexing." Essentially, the script runs, the database updates perfectly, and we even trigger a reIndex(). But the next time a listener or a search runs (even just a second later), the index hasn't "caught up" yet. It’s like the data is there, but Jira’s searcher is still looking at the old version for a brief window. This is causing some of our automated calculations to lag or, worse, use stale data.
A couple of things I’m curious about:
Is anyone using a specific "Retry Logic" or a "Wait for Index" wrapper in their Groovy scripts to account for the 9.x index writer speed?
Have you found that moving these to Async Listeners helps with the UI lag, or does that just make the data consistency worse?
Are there any specific JVM tweaks you’ve found that help the index writer commit faster under heavy load?
I’m currently playing around with a custom retry loop to verify the index state before the script finishes, but it feels like a bit of a hack. I’d love to know if there's a "cleaner" way to handle this in the new 9.x world.
Looking forward to hearing your thoughts!