Evgeniy Kirichenko created KARAF-4893:
-----------------------------------------

             Summary: Installing features from kar on windows fails
                 Key: KARAF-4893
                 URL: https://issues.apache.org/jira/browse/KARAF-4893
             Project: Karaf
          Issue Type: Bug
          Components: karaf-feature, karaf-kar
    Affects Versions: 4.0.7, 4.0.6, 4.0.5
         Environment: Windows 10 x64
            Reporter: Evgeniy Kirichenko


We have quite a big project with custom karaf disctribution. Recently we have 
begun the migration from 3.x to 4.x karaf.
Our core feature is placed into <installedFeatures> section.
Additional features are placed into deploy folder with maven-dependency-plugin 
(copy-to-deploy) as KAR files.
There are 3 karaf archives in the deploy folder after our assembly is done.

After startup the karaf (with karaf.bat file), 1 kar is usually being deployed 
well, 2 rest fails.

In karaf.log we can see following exceptions:

2016-12-15 14:36:55,759 | INFO  | \assembly/deploy | FeaturesServiceImpl        
      | 8 - org.apache.karaf.features.core - 4.0.7 | Adding features: 
snamp-http-acceptor/[2.0.0,2.0.0]
2016-12-15 14:36:55,759 | WARN  | \assembly/deploy | KarServiceImpl             
      | 36 - org.apache.karaf.kar.core - 4.0.7 | Unable to install Kar feature 
snamp-http-acceptor/2.0.0
java.util.concurrent.RejectedExecutionException: Task 
java.util.concurrent.FutureTask@5fd6d173 rejected from 
java.util.concurrent.ThreadPoolExecutor@37659c9[Terminated, pool size = 0, 
active threads = 0, queued tasks = 0, completed tasks = 5]
        at 
java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)[:1.8.0_111]
        at 
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)[:1.8.0_111]
        at 
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)[:1.8.0_111]
        at 
java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)[:1.8.0_111]
        at 
java.util.concurrent.Executors$DelegatedExecutorService.submit(Executors.java:681)[:1.8.0_111]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvisionInThread(FeaturesServiceImpl.java:1071)[8:org.apache.karaf.features.core:4.0.7]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:954)[8:org.apache.karaf.features.core:4.0.7]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:847)[8:org.apache.karaf.features.core:4.0.7]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeature(FeaturesServiceImpl.java:832)[8:org.apache.karaf.features.core:4.0.7]
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.installFeature(FeaturesServiceImpl.java:842)[8:org.apache.karaf.features.core:4.0.7]
        at 
org.apache.karaf.kar.internal.KarServiceImpl.installFeatures(KarServiceImpl.java:283)[36:org.apache.karaf.kar.core:4.0.7]
        at 
org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:112)[36:org.apache.karaf.kar.core:4.0.7]
        at 
org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:94)[36:org.apache.karaf.kar.core:4.0.7]
        at 
org.apache.karaf.deployer.kar.KarArtifactInstaller.install(KarArtifactInstaller.java:50)[27:org.apache.karaf.deployer.kar:4.0.7]
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:937)[4:org.apache.felix.fileinstall:3.5.4]
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:871)[4:org.apache.felix.fileinstall:3.5.4]
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:485)[4:org.apache.felix.fileinstall:3.5.4]
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:361)[4:org.apache.felix.fileinstall:3.5.4]
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:312)[4:org.apache.felix.fileinstall:3.5.4]

After that we are able to install our features with console commands 
(feature:install) - it never causes such exceptions. 

Please note, that this defect can be reproduced not always, but almost always.

Our proposition - something goes wrong in class FeaturesServiceImpl 
(https://github.com/apache/karaf/blob/karaf-4.0.7/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java)
  - executor is closed for some reasons at the moment when next feature is 
being deployed. The main reason is permanent refreshing of bundle 
org.apache.karaf.features.core during installation of our features. But out 
features have no explicit dependency on this bundle. Method 
FeaturesServiceImpl.doProvisionInThread relies on private field 'executor'. The 
executor can be terminated using method FeaturesServiceImpl.stop(). 
Theoretically, refreshing of bundle org.apache.karaf.features.core causes 
concurrency when service is stopping and new provisioning task arriving at the 
same time. 

We also have set noAutoRefreshBundles=true in org.apache.karaf.kar.cfg, but 
without success.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to