Hi Pierre,

 I believe you that this code path doesn't work :-)

I think there should be a less invasive way to fix this.  By any chance can you 
get a debug-enabled log from when this problem occurs?  It would help confirm 
my suspicions of what might be missing.

FWIW I suspect SingleComponentManager.reconfigure is missing a check for 
m_factoryProperties here (line 561):

            // nothing to do if there is no configuration (see FELIX-714)
            if ( configuration == null && m_configurationProperties == null )
            {
                log( LogService.LOG_DEBUG, "No configuration provided (or 
deleted), nothing to do", null );
                return;
            }

Unless we can't figure anything out for sure I'd prefer to fix this before the 
release.

thanks
david jencks

On Oct 23, 2013, at 3:09 PM, Pierre De Rop <[email protected]> wrote:

> Hi David,
> 
> (sorry to do all this noise while you are releasing ...)
> 
> We are indeed using factory components; and today, I finally found and
> fixed a cycle, using the Apache Service Diagnostic tool; and I'm going
> further on but now I'm facing another problem which I did not have in the
> scr 1.6.2.
> 
> So, I would like to discuss about this new problem with you before you redo
> a release, in order to decide if this problem (if there is really one ?)
> shall be addressed now or after the upcoming release ?
> 
> So, in our application, we are extensively using factory components
> (@Component(factory=XXX")).
> When we instantiate a factory component (using
> ComponentFactory.newInstance()), We pass to the newInstance() method some
> additional component properties which may also contain some target filters.
> 
> This allows to dynamically configure the filter of some References declared
> in the factory component.
> in the scr 1.6.2, this mechanism was working fine. But using trunk, this
> does not work all the time. Some target filters seem to be correctly
> configured, and some others are not (I'm not sure, actually, it's late ...).
> 
> So, it looks like sometimes, some target filters are not updated before
> activating components ? or factory components ?
> 
> I'm not sure but this might be related to the old FELIX-3726.
> Now, interestingly, I did the following patch and my application is now
> working fine: In the  AbstractComponentManager class, I systematically
> update target filters, like this:
> 
> +++
> src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
>      (working copy)
> @@ -809,6 +809,7 @@
>         {
>             // Before creating the implementation object, we are going to
>             // test if all the mandatory dependencies are satisfied
> +            updateTargets(getProperties());
>             if ( !verifyDependencyManagers() )
>             {
>                 log( LogService.LOG_DEBUG, "Not all dependencies
> satisfied, cannot activate", null );
> 
> 
> 
> Is this patch correct ? or may be it shall be done somewhere else ?
> 
> (may be we can address this later, after the release; I let you decide).
> 
> best regards;
> /Pierre
> 
> 
> 
> 
> On Tue, Oct 22, 2013 at 7:27 PM, David Jencks <[email protected]>wrote:
> 
>> Hi Pierre,
>> 
>> Thanks for the additional checking.
>> 
>> There are some changes in circular dependency checking for immediate
>> components.  Each component marks threads that are trying to get the
>> service instance, and if the thread is already marked, this code is
>> executed (SimpleComponentManager line 779):
>> 
>>            log( LogService.LOG_ERROR,  "Circular reference detected,
>> getService returning null", null );
>>            dumpThreads();
>> 
>> So if this code is activated the result should be very obvious :-)
>> 
>> I don't think this code can be activated  by delayed or service factory
>> components, because the ServiceRegistry will already have blocked the 2nd
>> getService call on the same thread.  You should get a message from the
>> ServiceRegistry in this case.  I think this code can only be activated by
>> an immediate component where trying to fetch one of the reference services
>> causes a loop back to the service being constructed.
>> 
>> Is it possible that your circular dependencies involve factory components
>> or service factory components?
>> 
>> I think I'll start the release process and if you come up with anything
>> more concrete before the vote concludes I'd be happy to stop and try to fix
>> it.
>> 
>> many thanks!
>> david jencks
>> 
>> 
>> 
>> On Oct 22, 2013, at 9:58 AM, Pierre De Rop <[email protected]> wrote:
>> 
>>> Hi David,
>>> 
>>> it's OK from my side, your last commit has fixed the NPE.
>>> 
>>> thanks !  :-)
>>> 
>>> Now, today, I did some more tests and I found another problem.
>>> Unfortunately I did not have time to investigate. So perhaps we can go
>>> ahead with a release, and later, if I really find something then I will
>> get
>>> back to the forum ... it's probably some kind of circular dependencies we
>>> have in some of our product ... not sure for now.
>>> 
>>> So, I wonder if the new upcoming SCR release is making some more checking
>>> regarding cycle detection ? And does SCR log some warnings when it
>> detects
>>> some circular loops ?
>>> 
>>> thanks;
>>> 
>>> best regards;
>>> /Pierre
>>> 
>>> 
>>> 
>>> On Tue, Oct 22, 2013 at 12:11 AM, David Jencks <[email protected]
>>> wrote:
>>> 
>>>> Hi Pierre,
>>>> 
>>>> I opened https://issues.apache.org/jira/browse/FELIX-4287 and committed
>>>> what I think is a fix :-).  This prompted me to clean up the mess of
>>>> deactivate/dispose methods so that was a very good thing :-)
>>>> 
>>>> I got my maven configuration straightened out so I can deploy snapshots,
>>>> and that should be enough to deploy release candidates too.
>>>> 
>>>> Could you check out the fix?  I'll run some tests here too.
>>>> 
>>>> many thanks!
>>>> david jencks
>>>> 
>>>> 
>>>> On Oct 21, 2013, at 1:11 AM, Pierre De Rop <[email protected]>
>> wrote:
>>>> 
>>>>> Hi David,
>>>>> 
>>>>> I did some quick tests, and the trunk seems to work seamlessly in our
>> our
>>>>> DS based products.
>>>>> Also checked that all tests are passing ok in scr maven tests.
>>>>> 
>>>>> Just one thing that I noticed: In one of our products, I'm getting the
>>>>> following exception, when stopping the framework (Ctrl-C from gogo
>>>> shell):
>>>>> I did not have time to investigate it but I copy/past it here, so you
>> can
>>>>> check it:
>>>>> 
>>>>> 2013-10-21 09:39:49,862 [FelixStartLevel] ERROR
>>>>> com.alcatel_lucent.as.service.composite.impl.CompositeManager  - Error
>>>>> processing task
>>>>> java.lang.NullPointerException
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.BundleComponentActivator.unregisterComponentId(BundleComponentActivator.java:500)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.clear(AbstractComponentManager.java:1157)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.SingleComponentManager.clear(SingleComponentManager.java:109)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.disposeInternal(AbstractComponentManager.java:890)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.dispose(AbstractComponentManager.java:576)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.dispose(AbstractComponentManager.java:561)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.ComponentContextImpl$ComponentInstanceImpl.dispose(ComponentContextImpl.java:226)
>>>>>     at
>>>>> 
>>>> 
>> com.alcatel_lucent.as.service.composite.impl.CompositeFactoryImpl$CompositeInstanceImpl$1.run(CompositeFactoryImpl.java:86)
>>>>>     at
>>>>> 
>>>> 
>> com.alcatel_lucent.as.service.composite.impl.SerialExecutor.execute(SerialExecutor.java:36)
>>>>>     at
>>>>> 
>>>> 
>> com.alcatel_lucent.as.service.composite.impl.CompositeManager.stop(CompositeManager.java:105)
>>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>     at
>>>>> 
>>>> 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>>>     at
>>>>> 
>>>> 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>>     at java.lang.reflect.Method.invoke(Method.java:601)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:231)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:39)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:624)
>>>>>     at
>>>>> org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:508)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:149)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.SingleComponentManager.disposeImplementationObject(SingleComponentManager.java:338)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.SingleComponentManager.deleteComponent(SingleComponentManager.java:170)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.doDeactivate(AbstractComponentManager.java:907)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.deactivateInternal(AbstractComponentManager.java:855)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.removedService(DependencyManager.java:945)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.removedService(DependencyManager.java:871)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1503)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1398)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.untrack(ServiceTracker.java:1258)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1437)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
>>>>>     at
>>>> org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4401)
>>>>>     at org.apache.felix.framework.Felix.access$000(Felix.java:74)
>>>>>     at
>>>> org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:390)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.ServiceRegistry.unregisterService(ServiceRegistry.java:151)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:127)
>>>>>     at
>>>>> 
>>>> 
>> com.alcatel_lucent.as.service.composite.impl.CompositeAdminImpl$1.run(CompositeAdminImpl.java:75)
>>>>>     at
>>>>> 
>>>> 
>> com.alcatel_lucent.as.service.composite.impl.SerialExecutor.execute(SerialExecutor.java:36)
>>>>>     at
>>>>> 
>>>> 
>> com.alcatel_lucent.as.service.composite.impl.CompositeAdminImpl.stop(CompositeAdminImpl.java:66)
>>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>     at
>>>>> 
>>>> 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>>>     at
>>>>> 
>>>> 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>>     at java.lang.reflect.Method.invoke(Method.java:601)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:231)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:39)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:624)
>>>>>     at
>>>>> org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:508)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:149)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.SingleComponentManager.disposeImplementationObject(SingleComponentManager.java:338)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.SingleComponentManager.deleteComponent(SingleComponentManager.java:170)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.doDeactivate(AbstractComponentManager.java:907)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.disposeInternal(AbstractComponentManager.java:889)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.manager.AbstractComponentManager.dispose(AbstractComponentManager.java:576)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.config.ConfigurableComponentHolder.disposeComponents(ConfigurableComponentHolder.java:421)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.scr.impl.BundleComponentActivator.dispose(BundleComponentActivator.java:336)
>>>>>     at
>>>>> 
>> org.apache.felix.scr.impl.Activator.disposeComponents(Activator.java:290)
>>>>>     at
>>>> org.apache.felix.scr.impl.Activator.access$100(Activator.java:44)
>>>>>     at
>>>> org.apache.felix.scr.impl.Activator$1.destroy(Activator.java:174)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.utils.extender.AbstractExtender$2.run(AbstractExtender.java:285)
>>>>>     at
>>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>>>>>     at
>>>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>>>>>     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.utils.extender.AbstractExtender.destroyExtension(AbstractExtender.java:307)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.utils.extender.AbstractExtender.bundleChanged(AbstractExtender.java:181)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
>>>>>     at
>>>> org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4385)
>>>>>     at org.apache.felix.framework.Felix.stopBundle(Felix.java:2508)
>>>>>     at
>>>>> org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1297)
>>>>>     at
>>>>> 
>>>> 
>> org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
>>>>>     at java.lang.Thread.run(Thread.java:722)
>>>>> 
>>>>> 
>>>>> best regards;
>>>>> /Pierre
>>>>> 
>>>>> Le 20 oct. 2013 07:50, "David Jencks" <[email protected]> a
>> écrit :
>>>>>> 
>>>>>> I haven't found any new problems with DS recently and am running out
>> of
>>>>> refactoring and code cleanup ideas  so I think it might be time to work
>>>> on
>>>>> releasing DS 1.8.  If anyone wants to do any last minute testing or
>> code
>>>>> reviews that would be great.  If nothing comes up I expect to suggest
>>>>> starting the release process early next week.
>>>>>> 
>>>>>> I'm not sure what the felix community usually does about release
>>>>> managers.  I'd be equally happy being the release manager or leaving it
>>>> to
>>>>> someone who has done it before.  I think I don't currently have the
>>>>> necessary nexus permissions to release, but this should be easy to fix.
>>>>>> 
>>>>>> many thanks
>>>>>> david jencks
>>>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to