[ https://issues.apache.org/jira/browse/SLING-2114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Carsten Ziegeler closed SLING-2114. ----------------------------------- > Content Loader is not thread safe > --------------------------------- > > Key: SLING-2114 > URL: https://issues.apache.org/jira/browse/SLING-2114 > Project: Sling > Issue Type: Bug > Components: JCR > Affects Versions: JCR ContentLoader 2.1.2 > Reporter: Ray Davis > Assignee: Carsten Ziegeler > Priority: Critical > Fix For: JCR ContentLoader 2.1.4 > > Attachments: java.patch > > > After deploying to a new quad-core system, we encountered a node loaded by > one bundle which contained file contents from a different bundle and > different path. After re-deployment, several bundles' content were missing > altogether. The log contained messages like: > 27.06.2011 13:10:18.387 *ERROR* [FelixStartLevel] > org.apache.sling.jcr.contentloader.internal.ContentLoaderService > bundleChanged: Problem loading initial content of bundle > org.sakaiproject.nakamura.org.sakaiproject.nakamura.uxloader-myberkeley (8) > java.util.EmptyStackException > at java.util.Stack.peek(Stack.java:102) > at java.util.Stack.pop(Stack.java:84) > at > org.apache.sling.jcr.contentloader.internal.DefaultContentCreator.finishNode(DefaultContentCreator.java:470) > at > org.apache.sling.jcr.contentloader.internal.Loader.createFile(Loader.java:603) > at > org.apache.sling.jcr.contentloader.internal.Loader.handleFile(Loader.java:483) > at > org.apache.sling.jcr.contentloader.internal.Loader.installFromPath(Loader.java:425) > at > org.apache.sling.jcr.contentloader.internal.Loader.installFromPath(Loader.java:420) > at > org.apache.sling.jcr.contentloader.internal.Loader.installContent(Loader.java:279) > at > org.apache.sling.jcr.contentloader.internal.Loader.registerBundleInternal(Loader.java:172) > at > org.apache.sling.jcr.contentloader.internal.Loader.registerBundle(Loader.java:103) > at > org.apache.sling.jcr.contentloader.internal.ContentLoaderService.bundleChanged(ContentLoaderService.java:148) > and > 27.06.2011 10:42:22.986 *ERROR* [FelixDispatchQueue] > org.apache.sling.jcr.contentloader.internal.Loader Cannot load initial > content for bundle org.sakaiproject.nakamura.user : Single-valued property > can not be set to an array of values:property > /var/notifications/search/sakai:propertyprovider > javax.jcr.ValueFormatException: Single-valued property can not be set to an > array of values:property /var/notifications/search/sakai:propertyprovider > at > org.apache.jackrabbit.core.PropertyImpl.checkSetValue(PropertyImpl.java:230) > at > org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImpl.java:690) > at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:2413) > at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:1555) > at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:2134) > at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:2156) > at > org.apache.sling.jcr.contentloader.internal.DefaultContentCreator.createProperty(DefaultContentCreator.java:416) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.createProperty(JsonReader.java:218) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.createNode(JsonReader.java:199) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.parse(JsonReader.java:159) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.parse(JsonReader.java:140) > at > org.apache.sling.jcr.contentloader.internal.Loader.createNode(Loader.java:543) > at > org.apache.sling.jcr.contentloader.internal.Loader.handleFile(Loader.java:470) > at > org.apache.sling.jcr.contentloader.internal.Loader.installFromPath(Loader.java:425) > at > org.apache.sling.jcr.contentloader.internal.Loader.installFromPath(Loader.java:420) > at > org.apache.sling.jcr.contentloader.internal.Loader.installFromPath(Loader.java:420) > at > org.apache.sling.jcr.contentloader.internal.Loader.installContent(Loader.java:279) > at > org.apache.sling.jcr.contentloader.internal.Loader.registerBundleInternal(Loader.java:172) > at > org.apache.sling.jcr.contentloader.internal.Loader.registerBundle(Loader.java:103) > at > org.apache.sling.jcr.contentloader.internal.ContentLoaderService.activate(ContentLoaderService.java:268) > The DefaultContentCreator object is written to be used by a single thread. > However, the Loader class stores it as an instance variable, and in turn the > ContentLoaderService stores the Loader as an instance variable. Apparently > the coder assumed that a SynchronousBundleListener is effectively > single-threaded. That assumption is wrong: > 'Synchronous listeners get called "synchronously" on the same thread which > caused the event to occur. If two threads are performing actions which cause > bundle events to occur then synchronous listeners will be called (potentially > at the same "time") from the different threads which are causing the events > to occur. Bottom line, synchronous bundle listeners must be thread safe.' > - http://www.eclipse.org/forums/index.php?&t=msg&th=39802 -- 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