I created https://issues.apache.org/jira/browse/FELIX-3712.

I hope it is expressive and brief enough to describe the problem.

Thanks a bunch for the help Derek!

Regards,
Per-Erik Svensson

On Tue, Oct 16, 2012 at 12:48 PM, Derek Baum <[email protected]> wrote:

> It looks like this is a bug in fileinstall introduced by FELIX-3414.
>
> The refresh() method in DirectoryWatcher was changed from calling
> packageAdmin.refreshPackages() directly to using the FileInstall.refresh()
> helper method.
>
> The difference is that packageAdmin.refreshPackages can
> throw InterruptedException (which the loop in DirectoryWatcher catches),
> but FileInstall.refresh() wraps the InterruptedException in a
> RuntimeException, so it is not caught in the main loop.
>
> Please will you raise a JIRA for this?
>
> --
> Derek
>
>
> On 15 October 2012 18:17, Per-Erik Svensson <[email protected]
> >wrote:
>
> > This seems somehow connected to bug 3021 (
> > https://issues.apache.org/jira/browse/FELIX-3021).
> >
> > This is why I think so:
> >
> > Fileinstall has the following in its manifest's
> > Import-Package:
> > org.osgi.service.log;resolution:=optional;version="[1.3,2)".
> > When starting gogo command after fileinstall, fileinstall will be
> restarded
> > (I think) because gogo command exports:
> >
> > org.osgi.service.log;uses:="org.osgi.framework";version="1.3".
> >
> > If I'm understanding this correctly, this is not *really *a bug in gogo
> > command (although "solving" 3021 would resolve this issue as well), but
> > rather it is fileinstall that is not properly set up for being stopped
> > while installing a bundle? In short, fileinstall is trying to install a
> > bundle (gogo command) and as a consequence is stopped because it is being
> > rewired to the log package. When stopped at this point, it bails out with
> > an error and when started again, it has "lost all memory of trying to
> > install and start a bundle" - for obvious reasons.
> >
> > So, I think this ultimately might be a bug in fileinstall. It needs to be
> > able to somehow handle being shutdown as a result of installing a bundle.
> > Or maybe this isn't possible?
> >
> > Running felix in debug log mode gives the following (verbose, so sorry
> for
> > the wall of text) result:
> >
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> > (osgi.wiring.package=javax.xml.stream) -> [0]
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.url)(version>=1.0.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.packageadmin)(version>=1.2.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.startlevel)(version>=1.1.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.url)(version>=1.0.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.util.tracker)(version>=1.4.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [3.0] osgi.wiring.package;
> > (osgi.wiring.package=org.osgi.framework) -> [0]
> > DEBUG: WIRE: [3.0] osgi.wiring.package;
> > (osgi.wiring.package=org.osgi.util.tracker) -> [0]
> > DEBUG: WIRE: [4.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.apache.felix.service.command)(status=provisional)(version>=0.10.0))
> > -> [3.0]
> > DEBUG: WIRE: [4.0] osgi.wiring.package;
> > (osgi.wiring.package=org.osgi.framework) -> [0]
> > DEBUG: WIRE: [4.0] osgi.wiring.package;
> > (osgi.wiring.package=org.osgi.service.startlevel) -> [0]
> > DEBUG: WIRE: [4.0] osgi.wiring.package;
> > (osgi.wiring.package=org.osgi.util.tracker) -> [0]
> > ____________________________
> > Welcome to Apache Felix Gogo
> >
> > g! In main loop, we have serious trouble: java.lang.RuntimeException:
> > java.lang.InterruptedException
> > java.lang.RuntimeException: java.lang.InterruptedException
> >         at
> >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:332)
> >         at
> >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.refresh(DirectoryWatcher.java:677)
> >         at
> >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:494)
> >         at
> >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)
> > Caused by: java.lang.InterruptedException
> >         at java.lang.Object.wait(Native Method)
> >         at
> >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:330)
> >         ... 3 more
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> > (osgi.wiring.package=javax.xml.stream) -> [0]
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.log)(version>=1.3.0)(!(version>=2.0.0)))
> > -> [5.0]
> > DEBUG: WIRE: [1.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.url)(version>=1.0.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [5.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.apache.felix.service.command)(status=provisional)(version>=0.10.0)(!(version>=1.0.0)))
> > -> [3.0]
> > DEBUG: WIRE: [5.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.framework)(version>=1.5.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [5.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.framework.wiring)(version>=1.0.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [5.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.packageadmin)(version>=1.2.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [5.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.startlevel)(version>=1.1.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [5.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.util.tracker)(version>=1.3.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0)(!(version>=2.0.0)))
> > -> [0]
> >
> > *DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.log)(version>=1.3.0)(!(version>=2.0.0)))
> > -> [5.0]*
> > *
> > *
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.packageadmin)(version>=1.2.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.startlevel)(version>=1.1.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.service.url)(version>=1.0.0)(!(version>=2.0.0)))
> > -> [0]
> > DEBUG: WIRE: [2.0] osgi.wiring.package;
> >
> >
> (&(osgi.wiring.package=org.osgi.util.tracker)(version>=1.4.0)(!(version>=2.0.0)))
> > -> [0]
> > bundles
> >     0|Active     |    0|org.apache.felix.framework (4.0.3)
> >     1|Active     |    1|org.apache.felix.bundlerepository (1.6.6)
> >     2|Active     |    1|org.apache.felix.fileinstall (3.2.4)
> >     3|Active     |    1|org.apache.felix.gogo.runtime (0.10.0)
> >     4|Active     |    1|org.apache.felix.gogo.shell (0.10.0)
> >     5|Resolved   |    1|org.apache.felix.gogo.command (0.12.0)
> >
> > If someone is trying to reproduce this, just know that it might take
> awhile
> > before the second batch of debug messages is printed. Be patient! :)
> > Anyway, this clearly states that felix is wiring up bundle 2
> (fileinstall)
> > with bundle 5 (gogo command) and the package in this case is highlighted
> > above (org.osgi.service.log).
> >
> > Can I do something about this? Filing a JIRA?
> >
> > Also, thanks Derek! Both for confirming that this was not only happing on
> > my end and for great hints about messing about with bundles even when
> gogo
> > command is not installed! :)
> >
> > Regards,
> > Per-Erik Svensson
> >
> >
> > On Mon, Oct 15, 2012 at 3:42 PM, Derek Baum <[email protected]> wrote:
> >
> > > Hmm... just tested this with fileinstall-3.1.4 (the version I already
> had
> > > around) and it works fine.
> > >
> > > However, with fileinstall-3.2.4, I get the problem you describe:
> > >
> > > Welcome to Apache Felix Gogo
> > >
> > > g! lb
> > > gogo: CommandNotFoundException: Command not found: lb    <--- expected,
> > as
> > > we haven't installed gogo.command
> > >
> > > # invoke BundleContext.getBundles() directly - gogo converters
> > pretty-print
> > > the result :-)
> > >
> > > g! bundles
> > >     0|Active     |    0|org.apache.felix.framework (4.0.3)
> > >     1|Active     |    1|org.apache.felix.bundlerepository (1.6.6)
> > >     2|Active     |    1|org.apache.felix.fileinstall (3.2.4)
> > >     3|Active     |    1|org.apache.felix.gogo.runtime (0.10.0)
> > >     4|Active     |    1|org.apache.felix.gogo.shell (0.10.0)
> > >
> > >
> > > # copy gogo.command to fileinstall load directory
> > >
> > > g! In main loop, we have serious trouble: java.lang.RuntimeException:
> > > java.lang.InterruptedException
> > > java.lang.RuntimeException: java.lang.InterruptedException
> > > at
> > >
> > >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:332)
> > > at
> > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.refresh(DirectoryWatcher.java:677)
> > > at
> > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:494)
> > > at
> > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)
> > > Caused by: java.lang.InterruptedException
> > > at java.lang.Object.wait(Native Method)
> > > at
> > >
> > >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:330)
> > > ... 3 more
> > >
> > > g! lb
> > > gogo: CommandNotFoundException: Command not found: lb
> > >
> > > g! bundles
> > >     0|Active     |    0|org.apache.felix.framework (4.0.3)
> > >     1|Active     |    1|org.apache.felix.bundlerepository (1.6.6)
> > >     2|Active     |    1|org.apache.felix.fileinstall (3.2.4)
> > >     3|Active     |    1|org.apache.felix.gogo.runtime (0.10.0)
> > >     4|Active     |    1|org.apache.felix.gogo.shell (0.10.0)
> > >     5|Resolved   |    1|org.apache.felix.gogo.command (0.12.0)
> > >
> > >
> > > # so gogo.command failed to activate
> > > # let's try starting it directly:
> > >
> > > g! (bundle 5) start
> > > g! lb
> > > START LEVEL 1
> > >    ID|State      |Level|Name
> > >     0|Active     |    0|System Bundle (4.0.3)
> > >     1|Active     |    1|Apache Felix Bundle Repository (1.6.6)
> > >     2|Active     |    1|Apache Felix File Install (3.2.4)
> > >     3|Active     |    1|Apache Felix Gogo Runtime (0.10.0)
> > >     4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
> > >     5|Active     |    1|Apache Felix Gogo Command (0.12.0)
> > > g! gosh: stopping framework
> > >
> > > --
> > > Derek
> > >
> > > On 15 October 2012 14:03, Per-Erik Svensson <
> [email protected]
> > > >wrote:
> > >
> > > > Hi,
> > > >
> > > > I get the following exception when trying to start gogo-command
> > > > automatically through fileinstall:
> > > >
> > > > In main loop, we have serious trouble: java.lang.RuntimeException:
> > > > java.lang.InterruptedException
> > > > java.lang.RuntimeException: java.lang.InterruptedException
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:332)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.refresh(DirectoryWatcher.java:677)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:494)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)
> > > > Caused by: java.lang.InterruptedException
> > > >         at java.lang.Object.wait(Native Method)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:330)
> > > >         ... 3 more
> > > > In main loop, we have serious trouble: java.lang.RuntimeException:
> > > > java.lang.InterruptedException
> > > > java.lang.RuntimeException: java.lang.InterruptedException
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:332)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.refresh(DirectoryWatcher.java:677)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:494)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)
> > > > Caused by: java.lang.InterruptedException
> > > >         at java.lang.Object.wait(Native Method)
> > > >         at
> > > >
> > > >
> > >
> >
> org.apache.felix.fileinstall.internal.FileInstall.refresh(FileInstall.java:330)
> > > >         ... 3 more
> > > >
> > > > "What did you do to make this happen?"
> > > >
> > > > Originally through an embedded version of felix 4.0.2. To make sure
> > that
> > > it
> > > > was not my code, through dist of felix 4.0.3.
> > > >
> > > > All I have done is to unpack the Felix Framework Distribution,
> removed
> > > gogo
> > > > commands from the bundle directory (to make it not auto-install/start
> > > from
> > > > felix itself) and added gogo commands to a fileinstall-controlled
> > > > directory. Of course, I put fileinstall in the bundle directory of
> > felix
> > > > (to make it auto-install).
> > > >
> > > > Note that this only happens when gogo command is installed from
> > > > fileinstall. If felix installs and starts it from the bundle dir, it
> > > works
> > > > like a charm. It also only happens with gogo command, other bundles
> can
> > > be
> > > > installed properly through fileinstall. I'm thus not sure if this is
> a
> > > bug
> > > > in fileinstall, gogo command or simply an error 40 issue (the guy
> > sitting
> > > > 40 cm from the screen).
> > > >
> > > > All versions used are the ones currently available from the felix
> > > download
> > > > site.
> > > >
> > > > Felix Framework Distribution 4.0.3
> > > > Fileinstall 3.2.4
> > > > Gogo Command 0.12.0
> > > >
> > > > Other bundles installed (coming from distribution)
> > > > Bundle Repository 1.6.6
> > > > Gogo Runtime 0.10.0
> > > > Gogo Shell 0.10.0
> > > >
> > > > Is this maybe some weird dependency thing making the framework try to
> > > > refresh itself? If so, is it possible to resolve in any way?
> > > >
> > > > Best regards,
> > > > Per-Erik Svensson
> > > >
> > >
> >
>

Reply via email to