You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall (Commented) (JIRA)" <ji...@apache.org> on 2011/12/04 05:30:40 UTC

[jira] [Commented] (FELIX-3242) Concurrent modification problem in StatefulResolver$ResolverStateImpl.getCandidates

    [ https://issues.apache.org/jira/browse/FELIX-3242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13162274#comment-13162274 ] 

Richard S. Hall commented on FELIX-3242:
----------------------------------------

I see what is going on here, but I'm not sure the best way to resolve it yet.

Basically, the current approach for implementing the R4.3 resolver hooks caches them at the beginning of a resolve operation and assumes that they are only accessed while holding the global lock, but this isn't true. They are also accessed in getCandidates() when trying to determine if a bundle should attempt a dynamic import, which purposely doesn't acquire the global lock to avoid lock contention for dynamic imports.

I'll need to think about this some more.
                
> Concurrent modification problem in StatefulResolver$ResolverStateImpl.getCandidates
> -----------------------------------------------------------------------------------
>
>                 Key: FELIX-3242
>                 URL: https://issues.apache.org/jira/browse/FELIX-3242
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.0.1
>            Reporter: David Jencks
>             Fix For: framework-4.2.0
>
>
> I occasionally see this stack trace (2 examples) starting stuff in karaf running on felix 4.0.1  Unfortunately it happens rarely and with no pattern I can discern.
> [Blueprint Extender: 3] ERROR org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$Listener - Error calling listener method public synchronized void org.apache.karaf.shell.console.jline.ConsoleFactory.registerCommandProcessor(org.apache.felix.service.command.CommandProcessor) throws java.lang.Exception
> java.lang.reflect.InvocationTargetException
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$Listener.invokeMethods(AbstractServiceReferenceRecipe.java:460)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$Listener.bind(AbstractServiceReferenceRecipe.java:442)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.bind(AbstractServiceReferenceRecipe.java:339)
>        at org.apache.aries.blueprint.container.ReferenceRecipe.bind(ReferenceRecipe.java:149)
>        at org.apache.aries.blueprint.container.ReferenceRecipe.retrack(ReferenceRecipe.java:114)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.updateListeners(AbstractServiceReferenceRecipe.java:331)
>        at org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:93)
>        at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
>        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>        at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
>        at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
>        at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
>        at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
>        at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
>        at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
>        at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
>        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
>        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>        at java.lang.Thread.run(Thread.java:680)
> Caused by: java.util.ConcurrentModificationException
>        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
>        at java.util.AbstractList$Itr.next(AbstractList.java:343)
>        at org.apache.felix.framework.StatefulResolver$ResolverStateImpl.getCandidates(StatefulResolver.java:1333)
>        at org.apache.felix.framework.StatefulResolver.isAllowedDynamicImport(StatefulResolver.java:521)
>        at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:216)
>        at org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1539)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1439)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at java.lang.ClassLoader.defineClass1(Native Method)
>        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2128)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1432)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1317)
>        at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1481)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1427)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at org.apache.karaf.shell.console.jline.ConsoleFactory.start(ConsoleFactory.java:71)
>        at org.apache.karaf.shell.console.jline.ConsoleFactory.registerCommandProcessor(ConsoleFactory.java:51)
>        ... 30 more
> ----------------------------------------------------
> [Thread-8] ERROR org.apache.karaf.features.internal.FeaturesServiceImpl - Error installing boot feature management
> java.io.IOException: javax.xml.bind.JAXBException: Unable to create context
> - with linked exception:
> [java.lang.reflect.InvocationTargetException] : mvn:org.apache.karaf.features/enterprise/3.0.0-SNAPSHOT/xml/features
>        at org.apache.karaf.features.internal.RepositoryImpl.load(RepositoryImpl.java:96)
>        at org.apache.karaf.features.internal.RepositoryImpl.getRepositories(RepositoryImpl.java:69)
>        at org.apache.karaf.features.internal.FeaturesServiceImpl.getFeatures(FeaturesServiceImpl.java:910)
>        at org.apache.karaf.features.internal.FeaturesServiceImpl.getFeature(FeaturesServiceImpl.java:870)
>        at org.apache.karaf.features.internal.FeaturesServiceImpl$1.run(FeaturesServiceImpl.java:994)
> Caused by: java.lang.RuntimeException: javax.xml.bind.JAXBException: Unable to create context
> - with linked exception:
> [java.lang.reflect.InvocationTargetException]
>        at org.apache.karaf.features.internal.model.JaxbUtil.unmarshal(JaxbUtil.java:126)
>        at org.apache.karaf.features.internal.RepositoryImpl.load(RepositoryImpl.java:88)
>        ... 4 more
> Caused by: javax.xml.bind.JAXBException: Unable to create context
> - with linked exception:
> [java.lang.reflect.InvocationTargetException]
>        at javax.xml.bind.ContextFinder.find(ContextFinder.java:116)
>        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:65)
>        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:56)
>        at org.apache.karaf.features.internal.model.JaxbUtil.unmarshal(JaxbUtil.java:107)
>        ... 5 more
> Caused by: java.lang.reflect.InvocationTargetException
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at javax.xml.bind.ContextFinder.find(ContextFinder.java:114)
>        ... 8 more
> Caused by: java.util.ConcurrentModificationException
>        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
>        at java.util.AbstractList$Itr.next(AbstractList.java:343)
>        at org.apache.felix.framework.StatefulResolver$ResolverStateImpl.getCandidates(StatefulResolver.java:1333)
>        at org.apache.felix.framework.StatefulResolver.isAllowedDynamicImport(StatefulResolver.java:521)
>        at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:216)
>        at org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1539)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1439)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at java.lang.Class.forName0(Native Method)
>        at java.lang.Class.forName(Class.java:247)
>        at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)
>        at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
>        at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
>        at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370)
>        at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:181)
>        at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
>        at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
>        at java.lang.reflect.Method.declaredAnnotations(Method.java:693)
>        at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:686)
>        at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:175)
>        at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllMethodAnnotations(RuntimeInlineAnnotationReader.java:89)
>        at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllMethodAnnotations(RuntimeInlineAnnotationReader.java:57)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.ensureNoAnnotation(ClassInfoImpl.java:1130)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.collectGetterSetters(ClassInfoImpl.java:1069)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.findGetterSetterProperties(ClassInfoImpl.java:943)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:314)
>        at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:186)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:247)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:104)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:85)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:213)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:99)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:85)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:319)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:334)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:483)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:319)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1170)
>        at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145)
>        ... 13 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira