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 <[email protected]> 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;
