-
Type:
Bug
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 3.6.1
-
Fix Version/s: 3.15.0
-
Component/s: Browse Storage, Content Selectors, Security
-
Labels:
-
Epic Link:
If you have very large numbers of content selector path privileges then browsing components and assets in Nexus 3 becomes unusably slow.
This was observed in a user's instance which has 813 repositories, 7836 content selector privileges, and 429 path based content selectors which use regular expressions. There were a very large number of components as well, ~5Tb.
qtp747243986-1558 id=1558 state=RUNNABLE at java.lang.Object.hashCode(Native Method) at java.util.HashMap.hash(HashMap.java:338) at java.util.HashMap.put(HashMap.java:611) at java.util.HashSet.add(HashSet.java:219) at org.sonatype.nexus.security.internal.AuthorizationManagerImpl.listPrivileges(AuthorizationManagerImpl.java:232) at org.sonatype.nexus.security.internal.DefaultSecuritySystem.listPrivileges(DefaultSecuritySystem.java:173) at org.sonatype.nexus.rapture.internal.security.SecurityComponent.calculatePermissions(SecurityComponent.java:206) at org.sonatype.nexus.rapture.internal.security.SecurityComponent.getPermissions(SecurityComponent.java:177) at org.sonatype.nexus.rapture.internal.security.SecurityComponent$$EnhancerByGuice$$53f0c4b1.CGLIB$getPermissions$3(<generated>) at org.sonatype.nexus.rapture.internal.security.SecurityComponent$$EnhancerByGuice$$53f0c4b1$$FastClassByGuice$$e138cccd.invoke(<generated>) at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:76) at com.palominolabs.metrics.guice.ExceptionMeteredInterceptor.invoke(ExceptionMeteredInterceptor.java:49) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.palominolabs.metrics.guice.TimedInterceptor.invoke(TimedInterceptor.java:47) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:55) at org.sonatype.nexus.rapture.internal.security.SecurityComponent$$EnhancerByGuice$$53f0c4b1.getPermissions(<generated>) at org.sonatype.nexus.rapture.internal.security.SecurityComponent.getState(SecurityComponent.java:186) at org.sonatype.nexus.rapture.internal.state.StateComponent.getState(StateComponent.java:87) at org.sonatype.nexus.rapture.internal.state.StateComponent$$EnhancerByGuice$$c680be9.CGLIB$getState$0(<generated>) at org.sonatype.nexus.rapture.internal.state.StateComponent$$EnhancerByGuice$$c680be9$$FastClassByGuice$$f5589e80.invoke(<generated>) at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:76) at com.palominolabs.metrics.guice.ExceptionMeteredInterceptor.invoke(ExceptionMeteredInterceptor.java:49) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.palominolabs.metrics.guice.TimedInterceptor.invoke(TimedInterceptor.java:47) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:55) at org.sonatype.nexus.rapture.internal.state.StateComponent$$EnhancerByGuice$$c680be9.getState(<generated>) at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) qtp747243986-1578 id=1578 state=RUNNABLE at java.util.AbstractCollection.containsAll(AbstractCollection.java:317) at org.apache.shiro.authz.permission.WildcardPermission.implies(WildcardPermission.java:217) at org.apache.shiro.realm.AuthorizingRealm.isPermitted(AuthorizingRealm.java:471) at org.apache.shiro.realm.AuthorizingRealm.isPermitted(AuthorizingRealm.java:499) at org.apache.shiro.realm.AuthorizingRealm.isPermitted(AuthorizingRealm.java:489) at org.sonatype.nexus.security.authz.ExceptionCatchingModularRealmAuthorizer.isPermitted(ExceptionCatchingModularRealmAuthorizer.java:256) at org.apache.shiro.mgt.AuthorizingSecurityManager.isPermitted(AuthorizingSecurityManager.java:125) at org.apache.shiro.subject.support.DelegatingSubject.isPermitted(DelegatingSubject.java:175) at org.sonatype.nexus.rapture.internal.security.SecurityComponent.calculatePermissions(SecurityComponent.java:214) at org.sonatype.nexus.rapture.internal.security.SecurityComponent.getPermissions(SecurityComponent.java:177) at org.sonatype.nexus.rapture.internal.security.SecurityComponent$$EnhancerByGuice$$53f0c4b1.CGLIB$getPermissions$3(<generated>) at org.sonatype.nexus.rapture.internal.security.SecurityComponent$$EnhancerByGuice$$53f0c4b1$$FastClassByGuice$$e138cccd.invoke(<generated>) at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:76) at com.palominolabs.metrics.guice.ExceptionMeteredInterceptor.invoke(ExceptionMeteredInterceptor.java:49) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.palominolabs.metrics.guice.TimedInterceptor.invoke(TimedInterceptor.java:47) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:55) at org.sonatype.nexus.rapture.internal.security.SecurityComponent$$EnhancerByGuice$$53f0c4b1.getPermissions(<generated>) at org.sonatype.nexus.rapture.internal.security.SecurityComponent.getState(SecurityComponent.java:186) at org.sonatype.nexus.rapture.internal.state.StateComponent.getState(StateComponent.java:87) at org.sonatype.nexus.rapture.internal.state.StateComponent$$EnhancerByGuice$$c680be9.CGLIB$getState$0(<generated>) at org.sonatype.nexus.rapture.internal.state.StateComponent$$EnhancerByGuice$$c680be9$$FastClassByGuice$$f5589e80.invoke(<generated>) at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:76) at com.palominolabs.metrics.guice.ExceptionMeteredInterceptor.invoke(ExceptionMeteredInterceptor.java:49) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.palominolabs.metrics.guice.TimedInterceptor.invoke(TimedInterceptor.java:47) at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:77) at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:55) at org.sonatype.nexus.rapture.internal.state.StateComponent$$EnhancerByGuice$$c680be9.getState(<generated>)