You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ro...@apache.org on 2018/10/10 18:44:20 UTC

svn commit: r1843483 - in /felix/trunk/scr/src: main/java/org/apache/felix/scr/impl/ main/java/org/apache/felix/scr/impl/config/ main/java/org/apache/felix/scr/impl/manager/ test/java/org/apache/felix/scr/impl/logger/

Author: rotty3000
Date: Wed Oct 10 18:44:20 2018
New Revision: 1843483

URL: http://svn.apache.org/viewvc?rev=1843483&view=rev
Log:
FELIX-5959 Exception on changecount timer timeout

Signed-off-by: Raymond Auge <ro...@apache.org>

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ScrConfiguration.java
    felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/logger/MockScrLogger.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java?rev=1843483&r1=1843482&r2=1843483&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java Wed Oct 10 18:44:20 2018
@@ -151,7 +151,7 @@ public class Activator extends AbstractE
 
         // prepare component registry
         m_componentBundles = new HashMap<>();
-        m_componentRegistry = new ComponentRegistry( this.logger );
+        m_componentRegistry = new ComponentRegistry( this.m_configuration, this.logger );
 
         final ServiceComponentRuntimeImpl runtime = new ServiceComponentRuntimeImpl( m_globalContext, m_componentRegistry );
         m_runtime_reg = m_context.registerService( ServiceComponentRuntime.class,

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java?rev=1843483&r1=1843482&r2=1843483&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java Wed Oct 10 18:44:20 2018
@@ -43,6 +43,7 @@ import org.apache.felix.scr.impl.manager
 import org.apache.felix.scr.impl.manager.ConfigurableComponentHolder;
 import org.apache.felix.scr.impl.manager.DependencyManager;
 import org.apache.felix.scr.impl.manager.RegionConfigurationSupport;
+import org.apache.felix.scr.impl.manager.ScrConfiguration;
 import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.apache.felix.scr.impl.metadata.TargetedPID;
 import org.osgi.framework.Bundle;
@@ -126,8 +127,11 @@ public class ComponentRegistry
 
     private final ScrLogger m_logger;
 
-    public ComponentRegistry( final ScrLogger logger )
+    private final ScrConfiguration m_configuration;
+
+    public ComponentRegistry( final ScrConfiguration scrConfiguration, final ScrLogger logger )
     {
+        m_configuration = scrConfiguration;
         m_logger = logger;
         m_componentHoldersByName = new HashMap<>();
         m_componentHoldersByPid = new HashMap<>();
@@ -719,29 +723,37 @@ public class ComponentRegistry
                 {
                     this.timer = new Timer();
                 }
-                timer.schedule(new TimerTask()
+                try
                 {
-
-                    @Override
-                    public void run() {
-                        synchronized ( changeCountLock )
+                    timer.schedule(new TimerTask()
                         {
-                            if ( changeCount == count )
-                            {
-                                try
-                                {
-                                    registration.setProperties(getServiceRegistrationProperties());
-                                }
-                                catch ( final IllegalStateException ise)
+
+                            @Override
+                            public void run() {
+                                synchronized ( changeCountLock )
                                 {
-                                    // we ignore this as this might happen on shutdown
+                                    if ( changeCount == count )
+                                    {
+                                        try
+                                        {
+                                            registration.setProperties(getServiceRegistrationProperties());
+                                        }
+                                        catch ( final IllegalStateException ise)
+                                        {
+                                            // we ignore this as this might happen on shutdown
+                                        }
+                                        timer.cancel();
+                                        timer = null;
+                                    }
                                 }
-                                timer.cancel();
-                                timer = null;
                             }
-                        }
-                    }
-                }, 5000L);
+                        }, m_configuration.serviceChangecountTimeout());
+                }
+                catch (Exception e) {
+                    m_logger.log(LogService.LOG_WARNING,
+                        "Service changecount Timer for {0} had a problem", e,
+                        registration.getReference());
+                }
             }
         }
     }

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java?rev=1843483&r1=1843482&r2=1843483&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfigurationImpl.java Wed Oct 10 18:44:20 2018
@@ -85,6 +85,8 @@ public class ScrConfigurationImpl implem
 
     private long stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
 
+    private long serviceChangecountTimeout = DEFAULT_SERVICE_CHANGECOUNT_TIMEOUT_MILLISECONDS;
+
     private Boolean globalExtender;
 
     private volatile BundleContext bundleContext;
@@ -171,6 +173,7 @@ public class ScrConfigurationImpl implem
                         infoAsService = false;
                         lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
                         stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
+                        serviceChangecountTimeout = DEFAULT_SERVICE_CHANGECOUNT_TIMEOUT_MILLISECONDS;
                         newGlobalExtender = false;
                     }
                     else
@@ -181,6 +184,7 @@ public class ScrConfigurationImpl implem
                         infoAsService = getDefaultInfoAsService();
                         lockTimeout = getDefaultLockTimeout();
                         stopTimeout = getDefaultStopTimeout();
+                        serviceChangecountTimeout = getServiceChangecountTimeout();
                         newGlobalExtender = getDefaultGlobalExtender();
                     }
                 }
@@ -263,6 +267,12 @@ public class ScrConfigurationImpl implem
         return globalExtender;
     }
 
+    @Override
+    public long serviceChangecountTimeout()
+    {
+        return serviceChangecountTimeout;
+    }
+
     private boolean getDefaultFactoryEnabled()
     {
         return VALUE_TRUE.equals( bundleContext.getProperty( PROP_FACTORY_ENABLED ) );
@@ -305,6 +315,15 @@ public class ScrConfigurationImpl implem
         return Long.parseLong( val );
     }
 
+    private long getServiceChangecountTimeout()
+    {
+        String val = bundleContext.getProperty( PROP_SERVICE_CHANGECOUNT_TIMEOUT );
+        if ( val == null)
+        {
+            return DEFAULT_SERVICE_CHANGECOUNT_TIMEOUT_MILLISECONDS;
+        }
+        return Long.parseLong( val );
+    }
 
     private boolean getDefaultGlobalExtender()
     {

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ScrConfiguration.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ScrConfiguration.java?rev=1843483&r1=1843482&r2=1843483&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ScrConfiguration.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ScrConfiguration.java Wed Oct 10 18:44:20 2018
@@ -58,12 +58,16 @@ public interface ScrConfiguration
 
     long DEFAULT_LOCK_TIMEOUT_MILLISECONDS = 5000;
 
+    long DEFAULT_SERVICE_CHANGECOUNT_TIMEOUT_MILLISECONDS = 5000;
+
     long DEFAULT_STOP_TIMEOUT_MILLISECONDS = 60000;
 
     String PROP_LOGLEVEL = "ds.loglevel";
 
     String PROP_GLOBAL_EXTENDER="ds.global.extender";
 
+    String PROP_SERVICE_CHANGECOUNT_TIMEOUT = "ds.service.changecount.timeout";
+
     /**
      * Returns the current log level.
      * @return
@@ -88,4 +92,9 @@ public interface ScrConfiguration
      */
     boolean globalExtender();
 
+    /**
+     * @since 2.2
+     */
+    long serviceChangecountTimeout();
+
 }

Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/logger/MockScrLogger.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/logger/MockScrLogger.java?rev=1843483&r1=1843482&r2=1843483&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/logger/MockScrLogger.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/logger/MockScrLogger.java Wed Oct 10 18:44:20 2018
@@ -63,6 +63,12 @@ public class MockScrLogger extends ScrLo
             }
 
             @Override
+            public long serviceChangecountTimeout()
+            {
+                return 0;
+            }
+
+            @Override
             public int getLogLevel()
             {
                 return LogService.LOG_ERROR;