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;
     }
 


Reply via email to