-
Bug
-
Resolution: Unresolved
-
Low
-
None
-
4.20.3, 4.20.13, 5.4.4
-
3
-
Severity 3 - Minor
-
Issue Summary
Customer is not able to see any users from the assignee drop-down provided on the bulk change -> Edit issues screen. Whereas the user's details are displayed in the assignee drop-down of the issue-view page. This happens in a specific setup where the project has the "Assignable users" setup, and it is pointing to a Group custom field value.
This is reproducible on Data Center: yes
Steps to Reproduce
- Create a new group , and add users to it. ex: poolGroup is the newly created group with users user1, user2, user3.
- Create another user user4, but do not add it to poolGroup.
- Create a custom field of type Single group picker. And set the default value to the group created above. ex: pool is the name of the custom field, and the default value is poolGroup
- Open project permissions for a project, and change the Assignable users list. Set it to "Group custom field value" and choose value pool from the dropdown.
- Open project settings for a project (ex: ITSD ). Open users and roles, and add user1, user2, user3 , user4 to the role "Service Desk Team"
- Create a new issue for that project. In the issue view screen, select the drop-down on the user's list to assign it. You will only see the users from poolGroup. ( Only user1, user2, user3 ). Do not assign yet.
- Now, select only this issue by using bulk change option, and choose "edit issues", in the next screen, select "change Assignee" and select the users dropdown. You will not see any users. The call below that is made returns 0 results.
<jira-base0url>/rest/api/latest/user/assignable/multiProjectSearch?username=&projectKeys=ITSD&maxResults=50&startAt=0&_=1643201992388
Expected Results
The assignee drop-down from bulk change screen should also show up user1, user2, and user3.
Actual Results
No user details are provided in the drop-down.
The below WARN is thrown in the atlassian-jira.log file.
2022-03-30 08:32:18,898-0700 https-jsse-nio-8443-exec-38 WARN username xb75a227w X.X.X.X /rest/api/latest/user/assignable/multiProjectSearch [c.a.jira.permission.DefaultIssueUserSearchManager] Requested top N=150 and is greater then max top allowed: 100. Enable trace logging to see stack trace.
And when trace is enabled for package com.atlassian.jira.permission.DefaultIssueUserSearchManager, we see below exception.
2022-04-01 13:49:21,885+0530 http-nio-44203-exec-25 WARN user 123fsrgrg6yy 45gt4 0:0:0:0:0:0:0:1 /rest/api/latest/user/assignable/multiProjectSearch [c.a.jira.permission.DefaultIssueUserSearchManager] Requested top N=150 and is greater then max top allowed: 100. Enable trace logging to see stack trace. 2022-04-01 13:49:21,885+0530 http-nio-44203-exec-25 TRACE user 123fsrgrg6yy 45gt4 0:0:0:0:0:0:0:1 /rest/api/latest/user/assignable/multiProjectSearch [c.a.jira.permission.DefaultIssueUserSearchManager] Requested top N=150 from: java.lang.Throwable at com.atlassian.jira.permission.DefaultIssueUserSearchManager.reasonableMax(DefaultIssueUserSearchManager.java:551) at com.atlassian.jira.permission.DefaultIssueUserSearchManager.findTopAssignableUsers(DefaultIssueUserSearchManager.java:114) at com.atlassian.jira.bc.user.search.DefaultUserPickerSearchService.findTopAssignableUsers(DefaultUserPickerSearchService.java:326) at sun.reflect.GeneratedMethodAccessor2017.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at com.sun.proxy.$Proxy57.findTopAssignableUsers(Unknown Source) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56) at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70) at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) at com.sun.proxy.$Proxy10074.findTopAssignableUsers(Unknown Source) at com.atlassian.jira.rest.v2.issue.users.UserPickerResourceHelperImpl.findTopAssignableUsers(UserPickerResourceHelperImpl.java:205) at com.atlassian.jira.rest.v2.issue.UserResource.findAssignableUsers(UserResource.java:722) at com.atlassian.jira.rest.v2.issue.UserResource.lambda$findBulkAssignableUsers$6(UserResource.java:1027) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:479) at com.atlassian.jira.rest.v2.issue.UserResource.findBulkAssignableUsers(UserResource.java:1029) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) ... 5 filtered at com.atlassian.jira.rest.exception.ExceptionInterceptor.intercept(ExceptionInterceptor.java:55) ... 1 filtered at com.atlassian.jira.rest.v2.issue.scope.RequestScopeInterceptor.intercept(RequestScopeInterceptor.java:39) ... 15 filtered at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:160) ... 1 filtered at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:70) ... 32 filtered at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:55) ... 8 filtered at com.atlassian.jira.plugin.mobile.web.filter.MobileAppRequestFilter.doFilter(MobileAppRequestFilter.java:59) ... 4 filtered at com.atlassian.jira.plugin.mobile.login.MobileLoginSuccessFilter.doFilter(MobileLoginSuccessFilter.java:54) ... 3 filtered at com.atlassian.diagnostics.internal.platform.monitor.http.HttpRequestMonitoringFilter.doFilter(HttpRequestMonitoringFilter.java:55) ... 8 filtered at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) ... 43 filtered at com.atlassian.ratelimiting.internal.filter.RateLimitFilter.doFilter(RateLimitFilter.java:73) ... 3 filtered at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46) ... 17 filtered at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66) ... 1 filtered at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64) ... 16 filtered at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:38) ... 3 filtered at com.atlassian.pats.web.filter.TokenBasedAuthenticationFilter.doFilter(TokenBasedAuthenticationFilter.java:83) ... 19 filtered at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30) ... 5 filtered at com.atlassian.plugins.authentication.impl.basicauth.filter.DisableBasicAuthFilter.doFilter(DisableBasicAuthFilter.java:70) ... 3 filtered at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:215) at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:136) at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:89) at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:47) at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:206) at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:134) at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:123) ... 4 filtered at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:37) ... 8 filtered at com.atlassian.ratelimiting.internal.filter.RateLimitPreAuthFilter.doFilter(RateLimitPreAuthFilter.java:71) ... 3 filtered at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) ... 4 filtered at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46) ... 3 filtered at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36) ... 26 filtered at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25) ... 25 filtered at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
Workaround
Workaround 1:
- In project permission, change the assignable users to Group, and add poolGroup. Remove the "Group custom field value".
- Try bulk change, and change the assignee.
Workaround 2:
- Even though no user details are displayed in the dropdown of bulk change, customers can manually enter the username and proceed next.
- And the username entered is validated behind the scenes to check if the user is assignable or not.
- If the user is assignable, the transaction proceeds. If not, an error is thrown on the screen.
- links to