You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Ray Davis (JIRA)" <ji...@apache.org> on 2011/07/01 17:15:28 UTC

[jira] [Commented] (SLING-2114) Content Loader is not thread safe

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

Ray Davis commented on SLING-2114:
----------------------------------

No errors reported on this end, Carsten. Thank you again for the fix.

> 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.4
>            Reporter: Ray Davis
>            Assignee: Carsten Ziegeler
>            Priority: Critical
>         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.
For more information on JIRA, see: http://www.atlassian.com/software/jira