[ 
https://issues.apache.org/jira/browse/KARAF-5854?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jean-Baptiste Onofré reassigned KARAF-5854:
-------------------------------------------

    Assignee: Jean-Baptiste Onofré

> KAR file installation is not atomic
> -----------------------------------
>
>                 Key: KARAF-5854
>                 URL: https://issues.apache.org/jira/browse/KARAF-5854
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf
>    Affects Versions: 4.1.4
>            Reporter: Lars Ollén
>            Assignee: Jean-Baptiste Onofré
>            Priority: Major
>             Fix For: 4.2.2, 4.1.7
>
>
> The KAR file installation process isn't atomic and handles exceptions poorly.
> If a shutdown signal is sent to Karaf while the KAR file is being installed 
> the KAR file can be unpacked to the data folder but the rest of the 
> installation steps will fail, leaving an uninstalled KAR file unpacked. That 
> will hinder the KAR file from being installed during the next startup of 
> Karaf (since Karaf checks only if the KAR file is unpacked and not if it was 
> installed).
> My initial though was that: 
> '_org.apache.karaf.kar.internal.KarServiceImpl#install(java.net.URI, 
> java.io.File, java.io.File, boolean)_' should rollback and delete the kar 
> folder in case the methods such as 
> 'org.apache.karaf.kar.internal.KarServiceImpl#addToFeaturesRepositories' gets 
> and exception, not sure how that would fit into the Karaf philosophy.
>  
> Below are the exceptions that we see (a bit redacted though):
> 2018-07-05T12:17:07.223+0200 | WARN | XXXXXX | 
> o.a.karaf.kar.internal.KarServiceImpl | 51 - org.apache.karaf.kar.core - 
> 4.1.4 | Unable to add repository 'mvn:XXXXXXXXXXXXXXXX/xml/features'
> java.lang.IllegalStateException: BundleContext is no longer valid
>  at 
> org.eclipse.osgi.internal.framework.BundleContextImpl.checkValid(BundleContextImpl.java:989)
>  at 
> org.eclipse.osgi.internal.framework.BundleContextImpl.getDataFile(BundleContextImpl.java:694)
>  at 
> org.apache.karaf.features.internal.osgi.Activator$1.getOutputStream(Activator.java:205)
>  at 
> org.apache.karaf.features.internal.service.StateStorage.save(StateStorage.java:56)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.saveState(FeaturesServiceImpl.java:360)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.addRepository(FeaturesServiceImpl.java:505)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.addToFeaturesRepositories(KarServiceImpl.java:266)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:111)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:95)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:87)
>  at 
> org.apache.karaf.deployer.kar.KarArtifactInstaller.install(KarArtifactInstaller.java:50)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:950)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:884)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:489)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
> 2018-07-05T12:17:07.226+0200 | WARN | XXXXXXX | 
> o.a.karaf.kar.internal.KarServiceImpl | 51 - org.apache.karaf.kar.core - 
> 4.1.4 | Unable to install Kar feature XXXXXXXXXXXXXXXXX
> java.util.concurrent.RejectedExecutionException: Task 
> java.util.concurrent.FutureTask@5222a1f2 rejected from 
> java.util.concurrent.ThreadPoolExecutor@36cfb96[Terminated, pool size = 0, 
> active threads = 0, queued tasks = 0, completed tasks = 1]
>  at 
> java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
>  at 
> java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
>  at 
> java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
>  at 
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
>  at 
> java.util.concurrent.Executors$DelegatedExecutorService.submit(Executors.java:681)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvisionInThread(FeaturesServiceImpl.java:1146)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:1022)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:915)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeature(FeaturesServiceImpl.java:900)
>  at 
> org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeature(FeaturesServiceImpl.java:910)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.installFeatures(KarServiceImpl.java:295)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:118)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:95)
>  at 
> org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:87)
>  at 
> org.apache.karaf.deployer.kar.KarArtifactInstaller.install(KarArtifactInstaller.java:50)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:950)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:884)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:489)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
>  at 
> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to