felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rajini Sivaram" <rajinisiva...@googlemail.com>
Subject Re: Intermittent exception during Felix shutdown
Date Thu, 23 Aug 2007 13:41:15 GMT
Felix,

I added a loglistener, and set ds.showtrace=true. With that, the trace after
the test completed (the shutdown) is given below. The deactivated messages
are from the deactivate method in the component, and there are two versions
of each component.

=============================================================

Test complete
Deactivated OSGiShipperComponentImpl bundle
Deactivated OSGiShipperComponentImpl bundle
Deactivated OSGiRetailerComponentImpl bundle
Deactivated OSGiRetailerComponentImpl bundle
Deactivated OSGiCustomerComponentImpl bundle
--- [CustomerComponent2] Dependency Manager: RECREATING
--- [CustomerComponent2] Dependency Manager: RECREATING
--- [CustomerComponent1] State transition : Active -> Deactivating
--- [CustomerComponent1] Deactivating component
--- [CustomerComponent1] Dependency Manager: RECREATING
--- Exception with component : Unexpected problem executing task ---
java.lang.IllegalStateException: Service already unregistered.
        at org.apache.felix.framework.ServiceRegistrationImpl.unregister(
ServiceRegistrationImpl.java:105)
        at
org.apache.felix.scr.AbstractComponentManager.unregisterComponentService(
AbstractComponentManager.java:528)
        at org.apache.felix.scr.AbstractComponentManager.deactivateInternal(
AbstractComponentManager.java:382)
        at org.apache.felix.scr.AbstractComponentManager.access$200(
AbstractComponentManager.java:41)
        at org.apache.felix.scr.AbstractComponentManager$3.run(
AbstractComponentManager.java:170)
        at org.apache.felix.scr.ComponentActorThread.run(
ComponentActorThread.java:81)

=============================================================

Thank you...

Regards,

Rajini

On 8/23/07, Rajini Sivaram <rajinisivaram@googlemail.com> wrote:
>
> Felix,
>
> I have tried the new SCR.jar, and that also results in the same exception.
> How do I get the log/trace from SCR?
>
> Thank you...
>
> Regards,
>
> Rajini
>
>
> On 8/23/07, Felix Meschberger <fmeschbe@gmail.com> wrote:
> >
> > Hi Rajini,
> >
> > One more thing: Having logging output from the SCR (going through the
> > LogService) would also be helpful.
> >
> > Regards
> > Felix
> >
> > Am Donnerstag, den 23.08.2007, 10:35 +0100 schrieb Rajini Sivaram:
> > > Felix,
> > >
> > > Would it be possible for you to send me a jar file containing the fix?
> > I
> > > dont have a source build at the moment, so it will be easier for me if
> > you
> > > could send me the jar.
> > >
> > >
> > > My understanding (I may be totally wrong) was that that during Felix
> > > shutdown, all the bundles were being stopped causing all the services
> > from
> > > the bundles to be unregistered. When one of the services got
> > unregistered, a
> > > component (ComponentA) which had a reference to this service is
> > reactivated
> > > (Stack trace 1). This causes the ComponentActorThread to call
> > > deactivateInternal for ComponentA (Stack trace 2) resulting in its
> > services
> > > being unregistered. Meanwhile the thread doing the shutdown continues
> > to
> > > stop all bundles including the bundle which contains ComponentA,
> > > unregistering services from ComponentA in a different thread (Stack
> > trace
> > > 3).
> > >
> > > Stack trace 1 and 3 are from the same thread and 1 preceeds 3. Stack
> > trace 2
> > > and 3 are on different threads and can occur simultaneously causing an
> > > exception.
> > >
> > >
> > > *Stack trace 1:*
> > >   Thread [FelixStartLevel] (Suspended (breakpoint at line 711 in
> > > DependencyManager))
> > >         DependencyManager.removedService(ServiceReference) line: 711
> > >         DependencyManager.serviceChanged (ServiceEvent) line: 109
> > >         EventDispatcher.invokeServiceListenerCallback(Bundle,
> > EventListener,
> > > Filter, Object, EventObject) line: 735
> > >         EventDispatcher.fireEventImmediately(Logger, int, Object[],
> > > EventObject) line: 593
> > >         EventDispatcher.fireServiceEvent(ServiceEvent) line: 525
> > >         Felix.fireServiceEvent(ServiceEvent) line: 3510
> > >         Felix.access$000(Felix, ServiceEvent) line: 36
> > >         Felix$1.serviceChanged(ServiceEvent) line: 576
> > >         ServiceRegistry.fireServiceChanged(ServiceEvent) line: 435
> > >         ServiceRegistry.unregisterService(Bundle, ServiceRegistration)
> > line:
> > > 86
> > >         ServiceRegistrationImpl.unregister() line: 99
> > >
> > >
> > ImmediateComponentManager(AbstractComponentManager).unregisterComponentService()
> > > line: 503
> > >
> > >
> > ImmediateComponentManager(AbstractComponentManager).deactivateInternal()
> > > line: 369
> > >
> > > ImmediateComponentManager(AbstractComponentManager).disableInternal()
> > line:
> > > 390
> > >
> > > ImmediateComponentManager(AbstractComponentManager).disposeInternal()
> > line:
> > > 419
> > >         ImmediateComponentManager(AbstractComponentManager).dispose()
> > line:
> > > 224
> > >         BundleComponentActivator.dispose() line: 229
> > >         Activator.disposeComponents(Bundle) line: 230
> > >         Activator.bundleChanged(BundleEvent) line: 161
> > >         EventDispatcher.invokeBundleListenerCallback(Bundle,
> > EventListener,
> > > EventObject) line: 660
> > >         EventDispatcher.fireEventImmediately (Logger, int, Object[],
> > > EventObject) line: 589
> > >         EventDispatcher.fireBundleEvent(BundleEvent) line: 503
> > >         Felix.fireBundleEvent(int, Bundle) line: 3499
> > >         Felix._stopBundle(FelixBundle, boolean) line: 1901
> > >         Felix.stopBundle(FelixBundle, boolean) line: 1866
> > >         Felix.setFrameworkStartLevel(int) line: 1080
> > >         StartLevelImpl.run() line: 258
> > >         Thread.run() line: 803
> > >
> > > *Stack trace 2:*
> > >   Thread [SCR Component Actor] (Suspended (breakpoint at line 99 in
> > > ServiceRegistrationImpl))
> > >         ServiceRegistrationImpl.unregister() line: 99
> > >
> > >
> > ImmediateComponentManager(AbstractComponentManager).unregisterComponentService()
> >
> > > line: 503
> > >
> > >
> > ImmediateComponentManager(AbstractComponentManager).deactivateInternal()
> > > line: 369
> > >         AbstractComponentManager.access$200(AbstractComponentManager)
> > line:
> > > 55
> > >         AbstractComponentManager$3.run() line: 176
> > >         ComponentActorThread.run() line: 81
> > >
> > > *Stack trace 3:*
> > >   Thread [FelixStartLevel] (Suspended (breakpoint at line 99 in
> > > ServiceRegistrationImpl))
> > >         ServiceRegistrationImpl.unregister() line: 99
> > >         ServiceRegistry.unregisterServices(Bundle) line: 119
> > >         Felix._stopBundle(FelixBundle, boolean) line: 1946
> > >         Felix.stopBundle (FelixBundle, boolean) line: 1866
> > >         Felix.setFrameworkStartLevel(int) line: 1080
> > >         StartLevelImpl.run() line: 258
> > >         Thread.run() line: 803
> > >
> > >
> > >
> > > Thank you...
> > >
> > > Regards,
> > >
> > > Rajini
> > >
> > >
> > > On 8/22/07, Felix Meschberger <fmeschbe@gmail.com> wrote:
> > > >
> > > > Hi Rajini,
> > > >
> > > > I have to admit, that I am not 100% sure, what is going on. But this
> > is
> > > > what I suppose:
> > > >
> > > > Some component has to be activated resulting thus (probably) calling
> > the
> > > > ImmediateComponentManager.createObjectInstance method (most probably
> > > > asynchronously). Most probably this fails and results in the
> > > > AbstractComponentManager.deactivate() method being called. This
> > method
> > > > (asynchronously again, but actually queued, so definitively later)
> > tries
> > > > to unregister a service which may or may not be registered...
> > > >
> > > > At the "same time" (whatever that means :-) ) the Bundle containing
> > the
> > > > component is being stopped (probably due to framework shutdown,
> > doesn't
> > > > matter, actually)  and the framework has already unregistered the
> > > > service.
> > > >
> > > > The problem here is, that the createObjectInstance method should not
> >
> > > > call the deactivate method for asynchronous deactivation. In fact,
> > no
> > > > real deactivation is needed anyway, so I rewrote that part of the
> > > > implementation.
> > > >
> > > > I will test this code with my tests further. Could you also test
> > your
> > > > testcase again ? Thanks. I did not deploy a new snapshot yet, so you
> > > > will have to build it yourself. If this is not possible for you,
> > please
> > > > let me know.
> > > >
> > > > Regards
> > > > Felix
> > > >
> > > > Am Montag, den 20.08.2007, 15:18 +0100 schrieb Rajini Sivaram:
> > > > > Hello,
> > > > >
> > > > > One of my testcases intermittently throws an exception during
> > shutdown.
> > > > I
> > > > > have managed to recreate the exception under a debugger, and it
> > shows
> > > > two
> > > > > threads trying to unregister the same service. The test fails only
> > when
> > > > > declarative services are used. I am using Felix 1.0.0. The test
> > uses
> > > > > multiple versions of a bundle, but I am not sure if that has
> > anything to
> > > > do
> > > > > with the exception.
> > > > >
> > > > > The exception thrown is:
> > > > >
> > > > >     --- Exception with component : Unexpected problem executing
> > task ---
> > > > >     java.lang.IllegalStateException: Service already unregistered.
> > > > >         at
> > org.apache.felix.framework.ServiceRegistrationImpl.unregister
> > > > (
> > > > > ServiceRegistrationImpl.java:105)
> > > > >         at
> > > > >
> > org.apache.felix.scr.AbstractComponentManager.unregisterComponentService
> > > > (
> > > > > AbstractComponentManager.java:503)
> > > > >         at
> > > > org.apache.felix.scr.AbstractComponentManager.deactivateInternal(
> > > > > AbstractComponentManager.java :369)
> > > > >         at
> > org.apache.felix.scr.AbstractComponentManager.access$200(
> > > > > AbstractComponentManager.java:55)
> > > > >         at org.apache.felix.scr.AbstractComponentManager$3.run (
> > > > > AbstractComponentManager.java:176)
> > > > >         at org.apache.felix.scr.ComponentActorThread.run(
> > > > > ComponentActorThread.java:81)
> > > > >
> > > > > Here is the stack trace of the two threads under the debugger
> > (both are
> > > > > using the same object):
> > > > >
> > > > >                 Thread [FelixStartLevel] (Suspended (breakpoint at
> > line
> > > > 97
> > > > > in ServiceRegistrationImpl))
> > > > >                         ServiceRegistrationImpl.unregister() line:
> > 97
> > > > >                         ServiceRegistry.unregisterServices(Bundle)
> > line:
> > > > 119
> > > > >                         Felix._stopBundle(FelixBundle, boolean)
> > line:
> > > > 1946
> > > > >                         Felix.stopBundle(FelixBundle, boolean)
> > line:
> > > > 1866
> > > > >                         Felix.setFrameworkStartLevel(int) line:
> > 1080
> > > > >                         StartLevelImpl.run() line: 258
> > > > >                         Thread.run() line: 803
> > > > >                 Thread [SCR Component Actor] (Suspended
> > (breakpoint at
> > > > line
> > > > > 97 in ServiceRegistrationImpl))
> > > > >                         ServiceRegistrationImpl.unregister() line:
> > 97
> > > > >
> > > > >
> > > >
> > ImmediateComponentManager(AbstractComponentManager).unregisterComponentService()
> > > > > line: 503
> > > > >
> > > > >
> > ImmediateComponentManager(AbstractComponentManager).deactivateInternal()
> > > > > line: 369
> > > > >
> > > > > AbstractComponentManager.access$200 (AbstractComponentManager)
> > > > > line: 55
> > > > >                         AbstractComponentManager$3.run() line: 176
> > > > >                         ComponentActorThread.run() line: 81
> > > > >
> > > > >
> > > > > The exception thrown is the IllegalStateException from
> > > > >     public void unregister()
> > > > >     {
> > > > >         if (m_svcObj != null)
> > > > >         {
> > > > >             m_registry.unregisterService(m_bundle, this);
> > > > >             m_svcObj = null;
> > > > >             m_factory = null;
> > > > >         }
> > > > >         else
> > > > >         {
> > > > >            * throw new IllegalStateException("Service already
> > > > > unregistered.");
> > > > > *        }
> > > > >     }
> > > > >
> > > > >
> > > > >
> > > > > Thank you...
> > > > >
> > > > > Regards,
> > > > >
> > > > > Rajini
> > > >
> > > >
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message