[
https://issues.apache.org/jira/browse/JCRVLT-525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Konrad Windszus closed JCRVLT-525.
----------------------------------
> FSPackageRegistry: XML registry files can become corrupt
> --------------------------------------------------------
>
> Key: JCRVLT-525
> URL: https://issues.apache.org/jira/browse/JCRVLT-525
> Project: Jackrabbit FileVault
> Issue Type: Bug
> Affects Versions: 3.5.0
> Environment: Sling-Starter 12-SNAPSHOT with JDK 11 on MacOS
> Reporter: Hans-Peter Stoerr
> Assignee: Konrad Windszus
> Priority: Major
> Fix For: 3.5.4
>
>
> When the FSPackageRegistry is updated, it can happen that the XML files
> become corrupt when they are updated. They are not truncated when they are
> rewritten, and if they become shorter, there are remnants of the old XML
> after the end of the newly written XML, so that there is a SAXParseException
> when they are read again (e.g. after restarting the server, see stacktrace
> below).
> The problem is pretty simple: in
> org.apache.jackrabbit.vault.packaging.registry.impl.FSInstallState#save(java.nio.file.Path)
> the file is opened with StandardOpenOption.CREATE, but it needs
> StandardOpenOption.TRUNCATE_EXISTING, like this:
> {code:java}
> try (OutputStream out = Files.newOutputStream(file,
> StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
> {code}
> I'm worried a little that the best way to deal with those files would be to
> write the content to a temporary file, and replace the old one with the newly
> written one after that's been saved completely to disk. Otherwise they can
> become corrupted for other reasons, too, e.g. if the writing fails before
> it's completed.
> I stumbled over this when I'm using the Sling Feature Launcher and apply to
> [org.apache.sling.jcr.packageinit|https://github.com/apache/sling-org-apache-sling-jcr-packageinit]
> triggered by
> [org.apache.sling.extension.content|https://github.com/apache/sling-org-apache-sling-feature-extension-content]
> to deploy content packages from the feature launcher.
> By the way: the files become shorter that they originally contain a
> workspaceFilter section when they are initially written by
> org.apache.sling.jcr.packageinit , and that section disappears when the
> packages are updated when they are installed. That smells like a problem, but
> I'm not sure about that. I'll append a stacktrace of the point when they are
> written, too.
> Log messages during restart with the stacktrace where the reading fails:
> {code:java}
> [INFO][INFO] Apache Sling Application Launcher[INFO]
> ---------------------------------[INFO] Initializing...[INFO] Artifact
> Repositories:
> [jar:file:/Users/hps/dev/composum/composum-launch/feature/composumstarter/target/composum-launcher-feature-composumstarter-1.2.1-SNAPSHOT-oak_tar-launcher.jar!/lib][INFO]
> Assembling final feature model...[INFO][INFO] Assembling launcher...[Fatal
> Error] composum-platform-models-package-1.3.1-SNAPSHOT.xml:5:2: Content is
> not allowed in trailing section.[ERROR] Error while assembling launcher:
> Configuration file syntax error. java.io.IOException: Configuration file
> syntax error.
> at
> shaded.org.apache.jackrabbit.vault.packaging.registry.impl.FSInstallState.fromStream(FSInstallState.java:245)
> at
> shaded.org.apache.jackrabbit.vault.packaging.registry.impl.FSInstallState.fromFile(FSInstallState.java:173)
> at
> shaded.org.apache.jackrabbit.vault.packaging.registry.impl.FSPackageRegistry.loadPackageCache(FSPackageRegistry.java:604)
> at
> shaded.org.apache.jackrabbit.vault.packaging.registry.impl.FSPackageRegistry.<init>(FSPackageRegistry.java:127)
> at
> org.apache.sling.feature.extension.content.ContentHandler.buildExecutionPlan(ContentHandler.java:72)
> at
> org.apache.sling.feature.extension.content.ContentHandler.handle(ContentHandler.java:127)
> at
> org.apache.sling.feature.launcher.impl.FeatureProcessor.prepareLauncher(FeatureProcessor.java:212)
> at
> org.apache.sling.feature.launcher.impl.Bootstrap.run(Bootstrap.java:160)
> at org.apache.sling.feature.launcher.impl.Main.main(Main.java:200)
> at
> com.composum.platform.feature.nodesstarter.LaunchFromEmbeddedFAR.run(LaunchFromEmbeddedFAR.java:65)
> at
> com.composum.platform.feature.nodesstarter.LaunchFromEmbeddedFAR.main(LaunchFromEmbeddedFAR.java:55)
> Caused by: org.xml.sax.SAXParseException; systemId:
> file:///Users/hps/dev/composum/composum-launch/feature/composumstarter/target/launcher/repository/packageregistry/com/composum/platform/composum-platform-models-package-1.3.1-SNAPSHOT.xml;
> lineNumber: 5; columnNumber: 2; Content is not allowed in trailing section.
> at
> java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:261)
> at
> java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
> at
> java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:151)
> at
> shaded.org.apache.jackrabbit.vault.packaging.registry.impl.FSInstallState.fromStream(FSInstallState.java:193)
> ... 10 more
> {code}
> Stacktrace where the files are written (and corrupted):
> {code:java}
> put:198, FSInstallStateCache
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> updatePackageStatus:166, FSInstallStateCache
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> installPackage:627, FSPackageRegistry
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> doInstall:193, PackageTaskImpl
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> execute:118, PackageTaskImpl
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> execute:129, ExecutionPlanImpl
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> execute:344, ExecutionPlanBuilderImpl
> (org.apache.jackrabbit.vault.packaging.registry.impl)
> processRepository:165, ExecutionPlanRepoInitializer
> (org.apache.sling.jcr.packageinit.impl)
> addingService:473, AbstractSlingRepositoryManager$2
> (org.apache.sling.jcr.base)
> addingService:462, AbstractSlingRepositoryManager$2
> (org.apache.sling.jcr.base)
> customizerAdding:943, ServiceTracker$Tracked (org.osgi.util.tracker)
> customizerAdding:871, ServiceTracker$Tracked (org.osgi.util.tracker)
> trackAdding:256, AbstractTracked (org.osgi.util.tracker)
> track:229, AbstractTracked (org.osgi.util.tracker)
> serviceChanged:903, ServiceTracker$Tracked (org.osgi.util.tracker)
> invokeServiceListenerCallback:990, EventDispatcher
> (org.apache.felix.framework)
> fireEventImmediately:838, EventDispatcher (org.apache.felix.framework)
> fireServiceEvent:545, EventDispatcher (org.apache.felix.framework)
> fireServiceEvent:4833, Felix (org.apache.felix.framework)
> registerService:3804, Felix (org.apache.felix.framework)
> registerService:328, BundleContextImpl (org.apache.felix.framework)
> register:929, AbstractComponentManager$3 (org.apache.felix.scr.impl.manager)
> register:915, AbstractComponentManager$3 (org.apache.felix.scr.impl.manager)
> changeRegistration:133, RegistrationManager
> (org.apache.felix.scr.impl.manager)
> registerService:984, AbstractComponentManager
> (org.apache.felix.scr.impl.manager)
> activateInternal:752, AbstractComponentManager
> (org.apache.felix.scr.impl.manager)
> enableInternal:674, AbstractComponentManager
> (org.apache.felix.scr.impl.manager)
> enable:437, AbstractComponentManager (org.apache.felix.scr.impl.manager)
> enableComponents:667, ConfigurableComponentHolder
> (org.apache.felix.scr.impl.manager)
> initialEnable:305, BundleComponentActivator (org.apache.felix.scr.impl)
> loadComponents:554, Activator (org.apache.felix.scr.impl)
> access$200:70, Activator (org.apache.felix.scr.impl)
> start:421, Activator$ScrExtension (org.apache.felix.scr.impl)
> createExtension:196, AbstractExtender (org.apache.felix.scr.impl)
> modifiedBundle:169, AbstractExtender (org.apache.felix.scr.impl)
> modifiedBundle:49, AbstractExtender (org.apache.felix.scr.impl)
> customizerModified:488, BundleTracker$Tracked (org.osgi.util.tracker)
> customizerModified:420, BundleTracker$Tracked (org.osgi.util.tracker)
> track:232, AbstractTracked (org.osgi.util.tracker)
> bundleChanged:450, BundleTracker$Tracked (org.osgi.util.tracker)
> invokeBundleListenerCallback:915, EventDispatcher (org.apache.felix.framework)
> fireEventImmediately:834, EventDispatcher (org.apache.felix.framework)
> fireBundleEvent:516, EventDispatcher (org.apache.felix.framework)
> fireBundleEvent:4817, Felix (org.apache.felix.framework)
> startBundle:2336, Felix (org.apache.felix.framework)
> setActiveStartLevel:1539, Felix (org.apache.felix.framework)
> run:308, FrameworkStartLevelImpl (org.apache.felix.framework)
> run:834, Thread (java.lang)
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)