Hi Community,
I´m executing a user search via Scriptrunner´s userSearchService for all active users according to a specific directory (ad directory). This is my call:
def allUserParams = new UserSearchParams(allowEmptyQuery, includeActive, includeInactive, canMatchEmail, userFilter as UserFilter, projectIds as Set<Long>)
def allAdUsers = userSearchService.findUsers('', allUserParams).findAll { it.directoryId == ad.id }
Unfortunately I only get 880 records (knowing that there should be more users). So I checked the log file and found the following:
ipd-worker:thread-1 ERROR [c.a.d.internal.ipd.DefaultIpdJobRunner] Error during executing com.atlassian.jira.ipd.http.HttpConnectionPoolInProductDiagnosticJob job com.atlassian.jira.ipd.exception.UnableReadAttributeException: Unable to read attributes [currentThreadCount, currentThreadsBusy, maxThreads] from Mbean : [Catalina:type=ThreadPool] at com.atlassian.jira.ipd.http.HttpConnectionPoolInProductDiagnosticJob.getHttpPoolSizeValue(HttpConnectionPoolInProductDiagnosticJob.java:60) at com.atlassian.jira.ipd.http.HttpConnectionPoolInProductDiagnosticJob.measure(HttpConnectionPoolInProductDiagnosticJob.java:36) at com.atlassian.diagnostics.internal.ipd.DefaultIpdJobRunner.runJobs(DefaultIpdJobRunner.java:50) at com.atlassian.jira.ipd.JiraIpdScheduler.ipdEmitterIteration(JiraIpdScheduler.java:105) at com.atlassian.jira.util.thread.JiraThreadLocalUtils.lambda$wrap$1(JiraThreadLocalUtils.java:156) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: com.atlassian.jira.ipd.exception.UnableReadAttributeException: Unable to find Object name : [Catalina:name="http-nio-*",type=ThreadPool] ThreadPool type under Catalina domain at com.atlassian.jira.ipd.http.HttpConnectionPoolInProductDiagnosticJob.lambda$findSourceName$0(HttpConnectionPoolInProductDiagnosticJob.java:72) at java.base/java.util.Optional.orElseThrow(Optional.java:408) at com.atlassian.jira.ipd.http.HttpConnectionPoolInProductDiagnosticJob.findSourceName(HttpConnectionPoolInProductDiagnosticJob.java:72) at com.atlassian.jira.ipd.http.HttpConnectionPoolInProductDiagnosticJob.getHttpPoolSizeValue(HttpConnectionPoolInProductDiagnosticJob.java:55) ... 10 more
Any help appreciated.
Best
Stefan
Hi @Ram Kumar Aravindakshan _Adaptavist_
I could resolve the missing results with adding another searchParam:
either adding "limitResults" or "maxResults" (maxResults is depricated) provided us all the records.
The problem with the exception is still ongoing but as mentioned before this seems to be a configuration problem in the tomcat server as this appears in other actions too.
Thanks for your hints.
Best
Stefan
Thanks for the update and great to hear you were able to resolve this issue.
Thank you and Kind regards,
Ram
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Ram Kumar Aravindakshan _Adaptavist_
one question from one of my comments is still open:
Another question came up when I read through the answer:
I´ve seen the jiraServiceContext now in many examples but I´m not really understanding what it is for or what it does. Could you describe the jiraServiceContext in some words to me? Or share any resource that might bring some light into the dark? ;)
Would it be possible to give me some hints regarding this?
Thanks in advance.
Best
Stefan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
In this case, when invoking the UserSearchService one of the options is to use the JiraServiceContext which stores the current logged-in user object and passes it to the UserSearchService's findUsers method.
def jiraServiceContext = new JiraServiceContextImpl(Users.loggedInUser)
def allActiveUsers = ComponentAccessor.getComponent(UserSearchService).findUsers(jiraServiceContext, '', paramBuilder.build())
There are other alternatives, e.g. using a String for the named query or a query. The simpler approach is to user the JiraServiceContext.
More information on this is available at the Jira Api Docs.
Thank you and Kind regards,
Ram
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Could you please clarify which version of Jira and ScriptRunner you currently use when testing the code?
Also, from the log extract you have shared, I do not see any errors returned by ScriptRunner. It looks more like a Thread-related issue.
To proceed, could you please change the approach you are taking to invoke the UserSearchParams class, i.e. from:-
def allUserParams = new UserSearchParams(allowEmptyQuery, includeActive, includeInactive, canMatchEmail, userFilter as UserFilter, projectIds as Set<Long>)
to using the UserSerachParams Builder as shown below:-
import com.adaptavist.hapi.jira.users.Users
....
....
import com.atlassian.jira.bc.user.search.UserSearchParams
import com.atlassian.jira.bc.user.search.UserSearchService
....
....
UserSearchParams.Builder paramBuilder = UserSearchParams.builder()
.allowEmptyQuery(true)
.includeActive(true)
.includeInactive(false)
def jiraServiceContext = new JiraServiceContextImpl(Users.loggedInUser)
def allActiveUsers = ComponentAccessor.getComponent(UserSearchService).findUsers(jiraServiceContext, '', paramBuilder.build())
Please refer to the sample code in the AdaptavistLibrary for a complete example of how to use the UserSearchParams.Builder class.
I am looking forward to your feedback and clarification.
Thank you and Kind regards,
Ram
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Ram Kumar Aravindakshan _Adaptavist_
Thanks for your reply.
Versions are:
Unfortunately changing to userSearchParams builder didn´t change the behaviour:
Still only get 880 records --> is there any limitation of users/pagination I´m not aware of? The exception in the log still occurs (which I also would refer to a thread-related issue in the tomcat config --> already contacted the responsible person).
Another question came up when I read through the answer:
I´ve seen the jiraServiceContext now in many examples but I´m not really understanding what it is for or what it does. Could you describe the jiraServiceContext in some words to me? Or share any resource that might bring some light into the dark? ;)
Best
Stefan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Important to remember that this code does not show licensed users, i.e. those with authorization to use Jira and who count towards the license limit.
I'd like to know if there's a way of getting just those users.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Atlassian Government Cloud has achieved FedRAMP Authorization at the Moderate level! Join our webinar to learn how you can accelerate mission success and move work forward faster in cloud, all while ensuring your critical data is secure.
Register NowOnline forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.