Lars Ollén created KARAF-5854:
---------------------------------

             Summary: 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-kar
    Affects Versions: 4.1.4
            Reporter: Lars Ollén


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