{"action":"reopened","issue":{"url":"https://api.github.com/repos/Commonjava/indy/issues/266","repository_url":"https://api.github.com/repos/Commonjava/indy","labels_url":"https://api.github.com/repos/Commonjava/indy/issues/266/labels{/name}","comments_url":"https://api.github.com/repos/Commonjava/indy/issues/266/comments","events_url":"https://api.github.com/repos/Commonjava/indy/issues/266/events","html_url":"https://github.com/Commonjava/indy/issues/266","id":128594627,"number":266,"title":"ConcurrentModificationException on group constituents","user":{"login":"jdcasey","id":65614,"avatar_url":"https://avatars.githubusercontent.com/u/65614?v=3","gravatar_id":"","url":"https://api.github.com/users/jdcasey","html_url":"https://github.com/jdcasey","followers_url":"https://api.github.com/users/jdcasey/followers","following_url":"https://api.github.com/users/jdcasey/following{/other_user}","gists_url":"https://api.github.com/users/jdcasey/gists{/gist_id}","starred_url":"https://api.github.com/users/jdcasey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdcasey/subscriptions","organizations_url":"https://api.github.com/users/jdcasey/orgs","repos_url":"https://api.github.com/users/jdcasey/repos","events_url":"https://api.github.com/users/jdcasey/events{/privacy}","received_events_url":"https://api.github.com/users/jdcasey/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Commonjava/indy/labels/bugs","name":"bugs","color":"e11d21"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/Commonjava/indy/milestones/17","html_url":"https://github.com/Commonjava/indy/milestones/1.0","labels_url":"https://api.github.com/repos/Commonjava/indy/milestones/17/labels","id":1097477,"number":17,"title":"1.0","description":"","creator":{"login":"jdcasey","id":65614,"avatar_url":"https://avatars.githubusercontent.com/u/65614?v=3","gravatar_id":"","url":"https://api.github.com/users/jdcasey","html_url":"https://github.com/jdcasey","followers_url":"https://api.github.com/users/jdcasey/followers","following_url":"https://api.github.com/users/jdcasey/following{/other_user}","gists_url":"https://api.github.com/users/jdcasey/gists{/gist_id}","starred_url":"https://api.github.com/users/jdcasey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdcasey/subscriptions","organizations_url":"https://api.github.com/users/jdcasey/orgs","repos_url":"https://api.github.com/users/jdcasey/repos","events_url":"https://api.github.com/users/jdcasey/events{/privacy}","received_events_url":"https://api.github.com/users/jdcasey/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":9,"state":"open","created_at":"2015-05-05T19:09:59Z","updated_at":"2016-02-17T23:18:15Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2016-01-25T17:33:05Z","updated_at":"2016-02-17T23:18:15Z","closed_at":null,"body":"When two threads try to adjust / iterate the group's membership concurrently. Causes things like this (though it's not enough to synchronize within either the group or store manager instance):\r\n\r\n```\r\nId: 314d0d8e1c43ad9880b8d16d051dfbeffd5cba884436e7b30e38d42e3e64107cFailed to run validation rule: artifact-refs-via.groovy for request: GroupPromoteRequest [source=hosted:build_jboss-modules-1-5-0-clone_20160125.0615, target-group=builds-untested]. Reason: java.util.ConcurrentModificationException\r\nError:\r\n\r\njava.util.ConcurrentModificationException\r\n\tat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)\r\n\tat java.util.ArrayList$Itr.next(ArrayList.java:851)\r\n\tat org.commonjava.indy.mem.data.MemoryStoreDataManager.recurseGroup(MemoryStoreDataManager.java:190)\r\n\tat org.commonjava.indy.mem.data.MemoryStoreDataManager.recurseGroup(MemoryStoreDataManager.java:196)\r\n\tat org.commonjava.indy.mem.data.MemoryStoreDataManager.getGroupOrdering(MemoryStoreDataManager.java:172)\r\n\tat org.commonjava.indy.mem.data.MemoryStoreDataManager.getOrderedConcreteStoresInGroup(MemoryStoreDataManager.java:151)\r\n\tat org.commonjava.indy.flat.data.DataFileStoreDataManager$Proxy$_$$_WeldSubclass.getOrderedConcreteStoresInGroup(Unknown Source)\r\n\tat org.commonjava.indy.autoprox.data.AutoProxDataManagerDecorator.getOrderedConcreteStoresInGroup(AutoProxDataManagerDecorator.java:357)\r\n\tat sun.reflect.GeneratedMethodAccessor136.invoke(Unknown Source)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat org.jboss.weld.annotated.runtime.InvokableAnnotatedMethod.invokeOnInstance(InvokableAnnotatedMethod.java:97)\r\n\tat org.jboss.weld.bean.proxy.DecoratorProxyMethodHandler.doInvoke(DecoratorProxyMethodHandler.java:80)\r\n\tat org.jboss.weld.bean.proxy.DecoratorProxyMethodHandler.doInvoke(DecoratorProxyMethodHandler.java:69)\r\n\tat org.jboss.weld.interceptor.util.proxy.TargetInstanceProxyMethodHandler.invoke(TargetInstanceProxyMethodHandler.java:33)\r\n\tat org.jboss.weld.bean.proxy.TargetBeanInstance.invoke(TargetBeanInstance.java:88)\r\n\tat org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)\r\n\tat org.commonjava.indy.flat.data.DataFileStoreDataManager$Proxy$_$$_Weld$Proxy$.getOrderedConcreteStoresInGroup(Unknown Source)\r\n\tat sun.reflect.GeneratedMethodAccessor135.invoke(Unknown Source)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:401)\r\n\tat org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:62)\r\n\tat org.commonjava.indy.flat.data.DataFileStoreDataManager$Proxy$_$$_WeldSubclass.getOrderedConcreteStoresInGroup(Unknown Source)\r\n\tat org.commonjava.indy.flat.data.DataFileStoreDataManager$Proxy$_$$_WeldClientProxy.getOrderedConcreteStoresInGroup(Unknown Source)\r\n\tat org.commonjava.indy.core.content.DefaultContentManager.getTransfer(DefaultContentManager.java:736)\r\n\tat org.commonjava.indy.core.content.DefaultContentManager.getTransfer(DefaultContentManager.java:712)\r\n\tat org.commonjava.indy.promote.validate.PromotionValidationTools.getTransfer(PromotionValidationTools.java:326)\r\n\tat org.commonjava.indy.promote.validate.PromotionValidationTools$getTransfer$1.call(Unknown Source)\r\n\tat org.commonjava.indy.promote.rules.ArtifactRefAvailability$_validate_closure1_closure2.doCall(script14537194642151706803938.groovy:44)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)\r\n\tat groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)\r\n\tat org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)\r\n\tat groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)\r\n\tat groovy.lang.Closure.call(Closure.java:423)\r\n\tat groovy.lang.Closure.call(Closure.java:439)\r\n\tat org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1324)\r\n\tat org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1296)\r\n\tat org.codehaus.groovy.runtime.dgm$147.invoke(Unknown Source)\r\n\tat org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)\r\n\tat org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)\r\n\tat org.commonjava.indy.promote.rules.ArtifactRefAvailability$_validate_closure1.doCall(script14537194642151706803938.groovy:41)\r\n\tat sun.reflect.GeneratedMethodAccessor167.invoke(Unknown Source)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)\r\n\tat groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)\r\n\tat org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)\r\n\tat groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)\r\n\tat groovy.lang.Closure.call(Closure.java:423)\r\n\tat groovy.lang.Closure.call(Closure.java:439)\r\n\tat org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1324)\r\n\tat org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1296)\r\n\tat org.codehaus.groovy.runtime.dgm$147.invoke(Unknown Source)\r\n\tat org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)\r\n\tat org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)\r\n\tat org.commonjava.indy.promote.rules.ArtifactRefAvailability.validate(script14537194642151706803938.groovy:37)\r\n\tat org.commonjava.indy.promote.validate.PromotionValidator.validate(PromotionValidator.java:78)\r\n\tat org.commonjava.indy.promote.data.PromotionManager.promoteToGroup(PromotionManager.java:123)\r\n\tat org.commonjava.indy.promote.data.PromotionManager$Proxy$_$$_WeldClientProxy.promoteToGroup(Unknown Source)\r\n\tat org.commonjava.indy.promote.bind.jaxrs.PromoteResource.promoteToGroup(PromoteResource.java:79)\r\n\tat org.commonjava.indy.promote.bind.jaxrs.PromoteResource$Proxy$_$$_WeldClientProxy.promoteToGroup(Unknown Source)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179)\r\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220)\r\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\r\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\r\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130)\r\n\tat org.commonjava.indy.bind.jaxrs.ResourceManagementFilter.doFilter(ResourceManagementFilter.java:60)\r\n\tat org.commonjava.indy.bind.jaxrs.ResourceManagementFilter$Proxy$_$$_WeldClientProxy.doFilter(Unknown Source)\r\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)\r\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)\r\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)\r\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\r\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\r\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)\r\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\r\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)\r\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63)\r\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)\r\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)\r\n\tat io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)\r\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\r\n\tat org.commonjava.indy.bind.jaxrs.HeaderDebugger.handleRequest(HeaderDebugger.java:93)\r\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166)\r\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)\r\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:764)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\r\n\tat java.lang.Thread.run(Thread.java:745)\r\n```"}}