[
https://issues.apache.org/jira/browse/KARAF-6501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jean-Baptiste Onofré resolved KARAF-6501.
-----------------------------------------
Resolution: Fixed
> Restoring the wiring of fragment bundles with multiple hosts
> ------------------------------------------------------------
>
> Key: KARAF-6501
> URL: https://issues.apache.org/jira/browse/KARAF-6501
> Project: Karaf
> Issue Type: Bug
> Components: karaf
> Affects Versions: 4.3.0, 4.2.7
> Reporter: Nelson Antunes
> Assignee: Jean-Baptiste Onofré
> Priority: Major
> Fix For: 4.3.0, 4.2.8
>
> Attachments: example-1.0-SNAPSHOT.kar
>
>
> The {{StoredWiringResolver}}'s bundle wiring cache assumes each requirement
> is only wired to a single capability. This isn't true for
> {{osgi.wiring.host}} requirements as fragments can attach to multiple hosts.
> It is storing only the last wiring it comes across, resulting in the loss of
> the other wirings when booting with hot caches.
> Steps to reproduce:
> *1. Start a clean karaf*
> {noformat}
> $ bin/karaf
> __ __ ____
> / //_/____ __________ _/ __/
> / ,< / __ `/ ___/ __ `/ /_
> / /| |/ /_/ / / / /_/ / __/
> /_/ |_|\__,_/_/ \__,_/_/
> Apache Karaf (4.2.7)
> Hit '<tab>' for a list of available commands
> and '[cmd] --help' for help on a specific command.
> Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.
> karaf@root()> list
> START LEVEL 100 , List Threshold: 50
> ID │ State │ Lvl │ Version │ Name
> 22 │ Active │ 80 │ 4.2.7 │ Apache Karaf :: OSGi Services :: Event
> {noformat}
> *2. Install a fragment bundle and install and start two or more bundles that
> satisfies the fragment's Fragment-Host requirement*
> You can use the attached {{example-1.0-SNAPSHOT.kar}} file. Put it in the
> {{deploy}} folder and it will install a fragment bundle and three hosts:
> {noformat}
> Starting the host 2
> Starting the host 1
> Starting the host 3
> {noformat}
> *3. Check that the bundles are correctly installed and the fragment is
> attached to all three hosts*
> {noformat}
> karaf@root()> list
> START LEVEL 100 , List Threshold: 50
> ID │ State │ Lvl │ Version │ Name
> 22 │ Active │ 80 │ 4.2.7 │ Apache Karaf :: OSGi Services :: Event
> 44 │ Resolved │ 80 │ 1.0.0.SNAPSHOT │ fragment Bundle, Hosts: 47, 46, 45
> 45 │ Active │ 80 │ 1.0.0 │ host1 Bundle, Fragments: 44
> 46 │ Active │ 80 │ 1.5.0 │ host2 Bundle, Fragments: 44
> 47 │ Active │ 80 │ 2.0.0 │ host3 Bundle, Fragments: 44
> {noformat}
> *4. However, notice that the wiring cache of the fragment bundle (44) isn't
> right*
> {noformat}
> $ cat data/cache/bundle0/wiring/44
> osgi.ee; (&(osgi.ee=JavaSE)(version=1.8))
> 0; version=[1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0, 1.5.0, 1.6.0, 1.7.0, 1.8.0]
> osgi.wiring.host; (&(osgi.wiring.host=our-host)(bundle-version>=0.0.0))
> 45
> {noformat}
> *5. Stop karaf*
> {noformat}
> karaf@root()> ^D
> Stopping the host 3
> Stopping the host 2
> Stopping the host 1
> {noformat}
> *6. Start karaf with hot caches*
> {noformat}
> $ bin/karaf
> org.ops4j.pax.url.wrap [org.ops4j.pax.url.commons.handler.HandlerActivator]
> DEBUG : Handler for protocols [wrap] started
> __ __ ____
> / //_/____ __________ _/ __/
> / ,< / __ `/ ___/ __ `/ /_
> / /| |/ /_/ / / / /_/ / __/
> /_/ |_|\__,_/_/ \__,_/_/
> Apache Karaf (4.2.7)
> Hit '<tab>' for a list of available commands
> and '[cmd] --help' for help on a specific command.
> Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.
> Starting the host 1
> Starting the host 2
> Starting the host 3
> {noformat}
> *7. Check that the fragment is no longer correctly attached to all three
> hosts, but just to one*
> {noformat}
> karaf@root()> list
> START LEVEL 100 , List Threshold: 50
> ID │ State │ Lvl │ Version │ Name
> 22 │ Active │ 80 │ 4.2.7 │ Apache Karaf :: OSGi Services :: Event
> 44 │ Resolved │ 80 │ 1.0.0.SNAPSHOT │ fragment Bundle, Hosts: 45
> 45 │ Active │ 80 │ 1.0.0 │ host1 Bundle, Fragments: 44
> 46 │ Active │ 80 │ 1.5.0 │ host2 Bundle
> 47 │ Active │ 80 │ 2.0.0 │ host3 Bundle
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)