You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by to...@apache.org on 2018/04/10 11:34:05 UTC

svn commit: r1828805 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

Author: tomekr
Date: Tue Apr 10 11:34:05 2018
New Revision: 1828805

URL: http://svn.apache.org/viewvc?rev=1828805&view=rev
Log:
OAK-7393: A single StatisticsProvider is shared between all SegmentNodeStoreFactory instances

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java?rev=1828805&r1=1828804&r2=1828805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java Tue Apr 10 11:34:05 2018
@@ -34,6 +34,8 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.ReferencePolicyOption;
+import org.apache.jackrabbit.api.stats.RepositoryStatistics;
+import org.apache.jackrabbit.api.stats.TimeSeries;
 import org.apache.jackrabbit.oak.commons.IOUtils;
 import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
 import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence;
@@ -41,7 +43,12 @@ import org.apache.jackrabbit.oak.spi.blo
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+import org.apache.jackrabbit.oak.stats.CounterStats;
+import org.apache.jackrabbit.oak.stats.HistogramStats;
+import org.apache.jackrabbit.oak.stats.MeterStats;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
+import org.apache.jackrabbit.oak.stats.TimerStats;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -132,7 +139,7 @@ public class SegmentNodeStoreFactory {
             registrations = Closer.create();
             OsgiWhiteboard whiteboard = new OsgiWhiteboard(context.getBundleContext());
             final SegmentNodeStore store = SegmentNodeStoreService.registerSegmentStore(context, blobStore, segmentStore,
-                    statisticsProvider, registrations, whiteboard, role, registerRepositoryDescriptors);
+                    getRoleStatisticsProvider(statisticsProvider, role), registrations, whiteboard, role, registerRepositoryDescriptors);
             if (store != null) {
                 Map<String, Object> props = new HashMap<String, Object>();
                 props.put(NodeStoreProvider.ROLE, role);
@@ -173,5 +180,50 @@ public class SegmentNodeStoreFactory {
         return lookupConfigurationThenFramework(context, name);
     }
 
+    private static StatisticsProvider getRoleStatisticsProvider(StatisticsProvider delegate, String role) {
+       RepositoryStatistics repositoryStatistics = new RepositoryStatistics() {
+                @Override
+                public TimeSeries getTimeSeries(Type type) {
+                    return getTimeSeries(type.name(), type.isResetValueEachSecond());
+                }
+
+                @Override
+                public TimeSeries getTimeSeries(String type, boolean resetValueEachSecond) {
+                    return delegate.getStats().getTimeSeries(addRoleToName(type, role), resetValueEachSecond);
+                }
+        };
+
+        return new StatisticsProvider() {
+            @Override
+            public RepositoryStatistics getStats() {
+                return repositoryStatistics;
+            }
+
+            @Override
+            public MeterStats getMeter(String name, StatsOptions options) {
+                return delegate.getMeter(addRoleToName(name, role), options);
+            }
+
+            @Override
+            public CounterStats getCounterStats(String name, StatsOptions options) {
+                return delegate.getCounterStats(addRoleToName(name, role), options);
+            }
+
+            @Override
+            public TimerStats getTimer(String name, StatsOptions options) {
+                return delegate.getTimer(addRoleToName(name, role), options);
+            }
+
+            @Override
+            public HistogramStats getHistogram(String name, StatsOptions options) {
+                return delegate.getHistogram(addRoleToName(name, role), options);
+            }
+        };
+    }
+
+    private static String addRoleToName(String name, String role) {
+        return new StringBuilder(role).append('.').append(name).toString();
+    }
+
 
 }