You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Raymond Augé (JIRA)" <ji...@apache.org> on 2018/10/10 17:14:00 UTC

[jira] [Commented] (FELIX-5959) Exception on changecount timer timeout

    [ https://issues.apache.org/jira/browse/FELIX-5959?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16645281#comment-16645281 ] 

Raymond Augé commented on FELIX-5959:
-------------------------------------

It can also fail by trying to schedule an update after the timer is already cancelled.

> Exception on changecount timer timeout
> --------------------------------------
>
>                 Key: FELIX-5959
>                 URL: https://issues.apache.org/jira/browse/FELIX-5959
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>            Reporter: Raymond Augé
>            Assignee: Raymond Augé
>            Priority: Major
>             Fix For: scr-2.1.12
>
>
> When running a large system with complex and deeply nested component graph, the changecount timer can time out resulting in exceptions like:
> {code}
>     [junit] java.lang.IllegalStateException: Timer already cancelled.
>     [junit] 	at java.util.Timer.sched(Timer.java:397)
>     [junit] 	at java.util.Timer.schedule(Timer.java:193)
>     [junit] 	at org.apache.felix.scr.impl.ComponentRegistry.updateChangeCount(ComponentRegistry.java:722)
>     [junit] 	at org.apache.felix.scr.impl.BundleComponentActivator.updateChangeCount(BundleComponentActivator.java:777)
>     [junit] 	at org.apache.felix.scr.impl.manager.AbstractComponentManager.setState(AbstractComponentManager.java:1420)
>     [junit] 	at org.apache.felix.scr.impl.manager.AbstractComponentManager.deactivateInternal(AbstractComponentManager.java:806)
>     [junit] 	at org.apache.felix.scr.impl.manager.DependencyManager.deactivateComponentManager(DependencyManager.java:2330)
>     [junit] 	at org.apache.felix.scr.impl.manager.DependencyManager.access$400(DependencyManager.java:56)
>     [junit] 	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.removedService(DependencyManager.java:1125)
>     [junit] 	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.removedService(DependencyManager.java:1007)
>     [junit] 	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1242)
>     [junit] 	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1137)
>     [junit] 	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.untrack(ServiceTracker.java:997)
>     [junit] 	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1176)
>     [junit] 	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:125)
>     [junit] 	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
>     [junit] 	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:891)
>     [junit] 	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:804)
>     [junit] 	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:222)
>     [junit] 	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.unregisterServices(ServiceRegistry.java:668)
>     [junit] 	at org.eclipse.osgi.internal.framework.BundleContextImpl.close(BundleContextImpl.java:96)
>     [junit] 	at org.eclipse.osgi.internal.framework.EquinoxBundle.stopWorker0(EquinoxBundle.java:1018)
>     [junit] 	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.stopWorker(EquinoxBundle.java:359)
>     [junit] 	at org.eclipse.osgi.container.Module.doStop(Module.java:636)
>     [junit] 	at org.eclipse.osgi.container.Module.stop(Module.java:498)
>     [junit] 	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.decStartLevel(ModuleContainer.java:1723)
>     [junit] 	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1642)
>     [junit] 	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1555)
>     [junit] 	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
>     [junit] 	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
>     [junit] 	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
> {code}
> There are two issues:
> - the timeout is not configurable (hard coded to {{5000L}})
> - the exception is not handled in a safe way (i.e. logged to an appropriate log which ends up in the system log)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)