You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ui...@apache.org on 2013/09/12 17:25:56 UTC
svn commit: r1522614 - in
/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index:
BundleContextInterceptor.java ServiceRegistryCache.java
Author: uiterlix
Date: Thu Sep 12 15:25:56 2013
New Revision: 1522614
URL: http://svn.apache.org/r1522614
Log:
Improved the logging option allowing to log bad performing service lookups (filters possible eligible for indexing).
Modified:
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/BundleContextInterceptor.java
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/ServiceRegistryCache.java
Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/BundleContextInterceptor.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/BundleContextInterceptor.java?rev=1522614&r1=1522613&r2=1522614&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/BundleContextInterceptor.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/BundleContextInterceptor.java Thu Sep 12 15:25:56 2013
@@ -21,7 +21,6 @@ package org.apache.felix.dm.impl.index;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.felix.dm.FilterIndex;
import org.apache.felix.dm.impl.Logger;
@@ -36,16 +35,19 @@ import org.osgi.framework.ServiceReferen
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class BundleContextInterceptor extends BundleContextInterceptorBase {
- private static final String INDEX_LOG_BAD_PERFORMING_FILTERS = "org.apache.felix.dependencymanager.index.logbadperformingfilters";
- private static long maxLookupTime = 0L;
+ protected static final String INDEX_LOG_TRESHOLD = "org.apache.felix.dm.index.log.treshold";
private final ServiceRegistryCache m_cache;
- private final boolean perfmon = "true".equals(System.getProperty(INDEX_LOG_BAD_PERFORMING_FILTERS));
- private final Logger m_logger;
+ private final boolean m_perfmon = System.getProperty(INDEX_LOG_TRESHOLD) != null;
+ private Logger m_logger;
+ private long m_treshold;
- public BundleContextInterceptor(ServiceRegistryCache cache, BundleContext context, Logger logger) {
+ public BundleContextInterceptor(ServiceRegistryCache cache, BundleContext context) {
super(context);
m_cache = cache;
- m_logger = logger;
+ if (m_perfmon) {
+ m_treshold = Long.parseLong(System.getProperty(INDEX_LOG_TRESHOLD));
+ m_logger = new Logger(context);
+ }
}
public void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException {
@@ -82,7 +84,7 @@ public class BundleContextInterceptor ex
public ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
long start = 0L;
- if (perfmon) {
+ if (m_perfmon) {
start = System.currentTimeMillis();
}
// first we ask the cache if there is an index for our request (class and filter combination)
@@ -100,11 +102,10 @@ public class BundleContextInterceptor ex
}
}
}
- if (perfmon) {
+ if (m_perfmon) {
long duration = System.currentTimeMillis() - start;
- if (maxLookupTime < duration) {
- maxLookupTime = duration;
- m_logger.log(org.apache.felix.dm.impl.Logger.LOG_DEBUG, "new worst performing filter (" + duration + "ms.): " + clazz + " " + filter);
+ if (duration > m_treshold) {
+ m_logger.log(org.apache.felix.dm.impl.Logger.LOG_DEBUG, "Indexed filter exceeds lookup time treshold (" + duration + "ms.): " + clazz + " " + filter);
}
}
if (result == null || result.size() == 0) {
@@ -115,11 +116,10 @@ public class BundleContextInterceptor ex
else {
// if they don't know, we ask the real bundle context instead
ServiceReference[] serviceReferences = m_context.getServiceReferences(clazz, filter);
- if (perfmon) {
+ if (m_perfmon) {
long duration = System.currentTimeMillis() - start;
- if (maxLookupTime < duration) {
- maxLookupTime = duration;
- System.out.println("new worst performing filter (" + duration + "ms.): " + clazz + " " + filter);
+ if (duration > m_treshold) {
+ m_logger.log(org.apache.felix.dm.impl.Logger.LOG_DEBUG, "Unindexed filter exceeds lookup time treshold (" + duration + "ms.): " + clazz + " " + filter);
}
}
return serviceReferences;
Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/ServiceRegistryCache.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/ServiceRegistryCache.java?rev=1522614&r1=1522613&r2=1522614&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/ServiceRegistryCache.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/index/ServiceRegistryCache.java Thu Sep 12 15:25:56 2013
@@ -36,7 +36,6 @@ import org.osgi.framework.ServiceRegistr
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class ServiceRegistryCache implements ServiceListener/*, CommandProvider*/ {
- private static final String INDEX_PERFLOG = "org.apache.felix.dependencymanager.index.logmissingindices";
private final List /* <FilterIndex> */ m_filterIndexList = new CopyOnWriteArrayList();
private final BundleContext m_context;
private final FilterIndexBundleContext m_filterIndexBundleContext;
@@ -45,16 +44,9 @@ public class ServiceRegistryCache implem
private long m_arrayVersion = -1;
private BundleContextInterceptor[] m_interceptors = null;
private ServiceRegistration m_registration;
- private boolean m_dumpUnIndexedFilters = "true".equals(System.getProperty(INDEX_PERFLOG));
- private List m_unindexedFilters = new ArrayList();
- private Logger m_logger;
public ServiceRegistryCache(BundleContext context) {
m_context = context;
- // only obtain the logservice when we actually want to log something.
- if (System.getProperty(INDEX_PERFLOG) != null) {
- m_logger = new Logger(context);
- }
m_filterIndexBundleContext = new FilterIndexBundleContext(m_context);
}
@@ -98,7 +90,7 @@ public class ServiceRegistryCache implem
synchronized (m_bundleContextInterceptorMap) {
BundleContextInterceptor bundleContextInterceptor = (BundleContextInterceptor) m_bundleContextInterceptorMap.get(context);
if (bundleContextInterceptor == null) {
- bundleContextInterceptor = new BundleContextInterceptor(this, context, m_logger);
+ bundleContextInterceptor = new BundleContextInterceptor(this, context);
m_bundleContextInterceptorMap.put(context, bundleContextInterceptor);
m_currentVersion++;
// TODO figure out a good way to clean up bundle contexts that are no longer valid so they can be garbage collected
@@ -115,13 +107,6 @@ public class ServiceRegistryCache implem
return filterIndex;
}
}
- if (m_dumpUnIndexedFilters) {
- String filterStr = clazz + ":" + filter;
- if (!m_unindexedFilters.contains(filterStr)) {
- m_unindexedFilters.add(filterStr);
- m_logger.log(Logger.LOG_DEBUG, "No filter index for " + filterStr);
- }
- }
return null;
}