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