Nelson Antunes created KARAF-6501:
-------------------------------------

             Summary: 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.2.7, 4.3.0
            Reporter: Nelson Antunes
         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)

Reply via email to