Today I faced this issue while deploying Composum Nodes to AEMaaCS Publish (https://github.com/ist-dresden/composum-nodes/issues/237 <https://github.com/ist-dresden/composum-nodes/issues/237>):
19.03.2021 02:56:13.558 [cm-p29008-e106842-aem-publish-748769766d-rs4bh] *ERROR* [Apache Sling Repository Startup Thread #1] org.apache.sling.jcr.contentloader.internal.ContentLoaderService Problem loading initial content of bundle com.composum.core.usermgnt (573) java.lang.UnsupportedOperationException: This builder is read-only. at org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder.unsupported(ReadOnlyBuilder.java:44) [org.apache.jackrabbit.oak-store-spi:1.39.0.R1886624] at org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder.remove(ReadOnlyBuilder.java:110) [org.apache.jackrabbit.oak-store-spi:1.39.0.R1886624] at org.apache.jackrabbit.oak.core.SecureNodeBuilder.remove(SecureNodeBuilder.java:166) [org.apache.jackrabbit.oak-core:1.39.0.R1886624] at org.apache.jackrabbit.oak.plugins.tree.impl.AbstractMutableTree.remove(AbstractMutableTree.java:51) [org.apache.jackrabbit.oak-core:1.39.0.R1886624] at org.apache.jackrabbit.oak.core.MutableTree.remove(MutableTree.java:184) [org.apache.jackrabbit.oak-core:1.39.0.R1886624] at org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.remove(NodeDelegate.java:701) [org.apache.jackrabbit.oak-jcr:1.39.0.R1886624] at org.apache.jackrabbit.oak.jcr.session.NodeImpl$4.performVoid(NodeImpl.java:242) [org.apache.jackrabbit.oak-jcr:1.39.0.R1886624] at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performVoid(SessionDelegate.java:275) [org.apache.jackrabbit.oak-jcr:1.39.0.R1886624] at org.apache.jackrabbit.oak.jcr.session.NodeImpl.remove(NodeImpl.java:235) [org.apache.jackrabbit.oak-jcr:1.39.0.R1886624] at org.apache.sling.jcr.contentloader.internal.BundleContentLoader.createFolder(BundleContentLoader.java:509) [org.apache.sling.jcr.contentloader:2.3.0] at org.apache.sling.jcr.contentloader.internal.BundleContentLoader.installFromPath(BundleContentLoader.java:364) [org.apache.sling.jcr.contentloader:2.3.0] at org.apache.sling.jcr.contentloader.internal.BundleContentLoader.installContent(BundleContentLoader.java:238) [org.apache.sling.jcr.contentloader:2.3.0] at org.apache.sling.jcr.contentloader.internal.BundleContentLoader.registerBundleInternal(BundleContentLoader.java:148) [org.apache.sling.jcr.contentloader:2.3.0] at org.apache.sling.jcr.contentloader.internal.BundleContentLoader.registerBundle(BundleContentLoader.java:95) [org.apache.sling.jcr.contentloader:2.3.0] at org.apache.sling.jcr.contentloader.internal.ContentLoaderService.activate(ContentLoaderService.java:244) [org.apache.sling.jcr.contentloader:2.3.0] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:244) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:685) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:529) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.inject.methods.ActivateMethod.invoke(ActivateMethod.java:318) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.inject.methods.ActivateMethod.invoke(ActivateMethod.java:308) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:354) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1000) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:973) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:785) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1271) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1222) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1200) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1121) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:928) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:864) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1152) [org.apache.felix.scr:2.1.26] at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:114) [org.apache.felix.scr:2.1.26] at org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990) at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838) at org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545) at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4833) at org.apache.felix.framework.Felix.registerService(Felix.java:3804) at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:328) at org.apache.sling.jcr.base.AbstractSlingRepositoryManager.registerService(AbstractSlingRepositoryManager.java:222) [org.apache.sling.jcr.base:3.1.6] at org.apache.sling.jcr.base.AbstractSlingRepositoryManager.initializeAndRegisterRepositoryService(AbstractSlingRepositoryManager.java:566) [org.apache.sling.jcr.base:3.1.6] at org.apache.sling.jcr.base.AbstractSlingRepositoryManager.access$300(AbstractSlingRepositoryManager.java:92) [org.apache.sling.jcr.base:3.1.6] at org.apache.sling.jcr.base.AbstractSlingRepositoryManager$4.run(AbstractSlingRepositoryManager.java:527) [org.apache.sling.jcr.base:3.1.6] What about extending the Content Loader so that it only overwrites in case the nodes do actually differ? @Stefan: Have you created any JIRAs about your proposed options? Konrad > On 5. Feb 2021, at 08:59, Stefan Seifert <stefan.seif...@diva-e.com.INVALID> > wrote: > > discussing the options with carsten off-list a bit there are multiple ideas > how bundles with Sling-Initial-Content could be processed: > > a) the way I described initially, extending the feature-cpconverter and > sling-feature-analyzer to support those bundles and extract the contained > Sling-Initial-Content to a content package to be deployed to the immutable > part of the repo. probably activated as option in both tools. > > b) the same can be done earlier in the build process: when building the > individual maven module of a bundle with Sling-Initial-Content a Maven plugin > could take this content and create an attached content package artifact (with > a classifier) in parallel to the bundle artifact, and remove the > Sling-Initial-Content in the same step. in the further deployment steps those > two artifacts are treated separately as bundle and content package. > > variant b) is probably a bit more easier to achieve or more transparent > what's happening. but it does not work for bundles you have no control over > that already contain Sling-Initial-Content. in the long-term it might make > sense to support both, sharing the same code base for extracting the > Sling-Initial-Content to a separate content package. > > stefan > > >> -----Original Message----- >> From: Carsten Ziegeler <cziege...@apache.org> >> Sent: Wednesday, February 3, 2021 3:27 PM >> To: dev@sling.apache.org >> Subject: Re: [RT] Make bundles with Sling-Initial-Content first-class >> citizens in feature model tooling >> >> Hi Stefan, >> >> I think we have more than two worlds - it's a multi-verse >> >> For example, for our projects we don't want to have initial content at >> all - thats why we need to have an analyser checking for this. >> >> If I think about other projects I can envision that some are fine with >> initial content for an immutable repository - but not for a mutable >> repository. >> >> And others might be fine with whatever they get. >> >> I think thats a choice every project should be able to make - it's like >> some projects like to code OSGi services with Declarative Services, some >> want to do via framework api, others want to use CDI etc. There is no >> right or wrong here. >> >> So for the analyser we need to have this configurable. We can discuss >> what we think is the best default for Sling based projects of course. >> >> For the cpconverter, I think it depends on where or who is using this. >> So you might want to enable converting initial content to a content >> package or you might be fine with ignoring it or you use the "normal" >> way of the contentloader bundle at runtime. It's again the users choice. >> >> Regards >> Carsten >> >> Am 03.02.2021 um 15:12 schrieb Stefan Seifert: >>> hello carsten. >>> >>> can you give some more details about the "setups and requirements" that >> differ? >>> >>> i fear if we introduce a switch to distinguish on those things we create >> different "worlds" of scenarios which all have to be maintained and tested >> separately in the already quite complex toolchain around feature models. >>> >>> and why is it exactly the Sling-Initial-Content support which will be the >> pivot that separates one world from the other? >>> >>> stefan >>> >>>> -----Original Message----- >>>> From: Carsten Ziegeler <cziege...@apache.org> >>>> Sent: Wednesday, February 3, 2021 6:51 AM >>>> To: dev@sling.apache.org >>>> Subject: Re: [RT] Make bundles with Sling-Initial-Content first-class >>>> citizens in feature model tooling >>>> >>>> Hi, >>>> >>>> in general, I think those changes make sense. However, project setups >>>> and requirements differ - so I think it makes sense to have an analyser >>>> that forbids initial content in bundles. So we either make the existing >>>> analyser configurable or have two analysers. >>>> >>>> I think the same applies to the cpconverter: having a switch which >>>> either allows initial content and creates the content packages as you >>>> suggest or fails. >>>> >>>> Regards >>>> Carsten >>>> >>>> Am 02.02.2021 um 23:38 schrieb Stefan Seifert: >>>>> currently, bundles with Sling-Initial-Content have not special support >> in >>>> the feature model tooling and when used with composite nodestore. >> however, >>>> they work just fine e.g. in AEMaaCS because during the image build phase >>>> the contained content gets extracted and baked into the docker image. at >>>> runtime, the Sling JCR content loader produces a warning about the >> locked >>>> down /apps folder which can be ignored, because the content is already >>>> there and does not need to be extracted again. however, it's probably >>>> currently working only due to "lucky circumstances" in the current >> process >>>> of cloud build pipeline. >>>>> >>>>> the sling-feature-analyzer [1] is currently looking out for bundles >> with >>>> Sling-Initial-Content and produce a warning if it founds any. >>>>> >>>>> Sling-Initial-Content is around for years and i would like to make >>>> bundles with it "first-class citizens" in the world of feature models >> and >>>> composite node stores. Without having looked into details of the current >>>> feature model toolchain a "full support" might look like this: >>>>> >>>>> 1. the sling-feature-analyzer should be changed to accept bundles with >>>> Sling-Initial-Content in general, but check the configured path to make >>>> sure they point only to immutable areas in the repository. >>>>> >>>>> 2. in the feature-cpconverter [2] could be extended to detect bundles >>>> with Sling-Initial-Content and probably convert the contained content to >> a >>>> content package and include it in the feature model for further >> processing. >>>>> >>>>> WDYT? >>>>> >>>>> stefan >>>>> >>>>> [1] https://github.com/apache/sling-org-apache-sling-feature-analyser/ >>>>> [2] https://github.com/apache/sling-org-apache-sling-feature- >> cpconverter >>>>> >>>> >>>> -- >>>> -- >>>> Carsten Ziegeler >>>> Adobe Research Switzerland >>>> cziege...@apache.org >> >> -- >> -- >> Carsten Ziegeler >> Adobe Research Switzerland >> cziege...@apache.org