Thomas Vachuska

Cleaning-up shared executors use of metrics service.

Change-Id: I4293df87cd46e9f22cbdf03cfbced9a21ba85de7
...@@ -101,7 +101,7 @@ public class CoreManager implements CoreService { ...@@ -101,7 +101,7 @@ public class CoreManager implements CoreService {
101 101
102 102
103 @Activate 103 @Activate
104 - public void activate() { 104 + protected void activate() {
105 registerApplication(CORE_APP_NAME); 105 registerApplication(CORE_APP_NAME);
106 cfgService.registerProperties(getClass()); 106 cfgService.registerProperties(getClass());
107 try { 107 try {
...@@ -117,7 +117,7 @@ public class CoreManager implements CoreService { ...@@ -117,7 +117,7 @@ public class CoreManager implements CoreService {
117 } 117 }
118 118
119 @Deactivate 119 @Deactivate
120 - public void deactivate() { 120 + protected void deactivate() {
121 cfgService.unregisterProperties(getClass(), false); 121 cfgService.unregisterProperties(getClass(), false);
122 SharedExecutors.shutdown(); 122 SharedExecutors.shutdown();
123 } 123 }
...@@ -171,7 +171,7 @@ public class CoreManager implements CoreService { ...@@ -171,7 +171,7 @@ public class CoreManager implements CoreService {
171 171
172 172
173 @Modified 173 @Modified
174 - public void modified(ComponentContext context) { 174 + protected void modified(ComponentContext context) {
175 Dictionary<?, ?> properties = context.getProperties(); 175 Dictionary<?, ?> properties = context.getProperties();
176 Integer poolSize = Tools.getIntegerProperty(properties, "sharedThreadPoolSize"); 176 Integer poolSize = Tools.getIntegerProperty(properties, "sharedThreadPoolSize");
177 177
...@@ -193,7 +193,7 @@ public class CoreManager implements CoreService { ...@@ -193,7 +193,7 @@ public class CoreManager implements CoreService {
193 Boolean performanceCheck = Tools.isPropertyEnabled(properties, "sharedThreadPerformanceCheck"); 193 Boolean performanceCheck = Tools.isPropertyEnabled(properties, "sharedThreadPerformanceCheck");
194 if (performanceCheck != null) { 194 if (performanceCheck != null) {
195 calculatePoolPerformance = performanceCheck; 195 calculatePoolPerformance = performanceCheck;
196 - SharedExecutors.setCalculatePoolPerformance(calculatePoolPerformance, metricsService); 196 + SharedExecutors.setMetricsService(calculatePoolPerformance ? metricsService : null);
197 } 197 }
198 198
199 log.info("Settings: sharedThreadPoolSize={}, maxEventTimeLimit={}, calculatePoolPerformance={}", 199 log.info("Settings: sharedThreadPoolSize={}, maxEventTimeLimit={}, calculatePoolPerformance={}",
......
...@@ -112,30 +112,29 @@ class SharedExecutorService implements ExecutorService { ...@@ -112,30 +112,29 @@ class SharedExecutorService implements ExecutorService {
112 Counter taskCounter = new Counter(); 112 Counter taskCounter = new Counter();
113 taskCounter.reset(); 113 taskCounter.reset();
114 return executor.submit(() -> { 114 return executor.submit(() -> {
115 - T t = null; 115 + T t = null;
116 - long queueWaitTime = (long) taskCounter.duration(); 116 + long queueWaitTime = (long) taskCounter.duration();
117 - Class className; 117 + Class className;
118 - if (task instanceof CallableExtended) { 118 + if (task instanceof CallableExtended) {
119 - className = ((CallableExtended) task).getRunnable().getClass(); 119 + className = ((CallableExtended) task).getRunnable().getClass();
120 - } else { 120 + } else {
121 - className = task.getClass(); 121 + className = task.getClass();
122 - } 122 + }
123 - if (queueMetrics != null) { 123 + if (queueMetrics != null) {
124 - queueMetrics.update(queueWaitTime, TimeUnit.SECONDS); 124 + queueMetrics.update(queueWaitTime, TimeUnit.SECONDS);
125 - } 125 + }
126 - taskCounter.reset(); 126 + taskCounter.reset();
127 - try { 127 + try {
128 - t = task.call(); 128 + t = task.call();
129 - } catch (Exception e) { 129 + } catch (Exception e) {
130 - getLogger(className).error("Uncaught exception on " + className, e); 130 + getLogger(className).error("Uncaught exception on " + className, e);
131 - } 131 + }
132 - long taskwaittime = (long) taskCounter.duration(); 132 + long taskwaittime = (long) taskCounter.duration();
133 - if (delayMetrics != null) { 133 + if (delayMetrics != null) {
134 - delayMetrics.update(taskwaittime, TimeUnit.SECONDS); 134 + delayMetrics.update(taskwaittime, TimeUnit.SECONDS);
135 - } 135 + }
136 - return t; 136 + return t;
137 - } 137 + });
138 - );
139 } 138 }
140 139
141 @Override 140 @Override
...@@ -179,20 +178,26 @@ class SharedExecutorService implements ExecutorService { ...@@ -179,20 +178,26 @@ class SharedExecutorService implements ExecutorService {
179 executor.execute(command); 178 executor.execute(command);
180 } 179 }
181 180
182 - public void setCalculatePoolPerformance(boolean calculatePoolPerformance, MetricsService metricsSrv) { 181 + /**
183 - this.metricsService = metricsSrv; 182 + * Enables or disables calculation of the pool performance metrics. If
184 - if (calculatePoolPerformance) { 183 + * the metrics service is not null metric collection will be enabled;
185 - if (metricsService != null) { 184 + * otherwise it will be disabled.
186 - executorMetrics = metricsService.registerComponent("SharedExecutor"); 185 + *
187 - MetricsFeature mf = executorMetrics.registerFeature("*"); 186 + * @param metricsService optional metric service
188 - queueMetrics = metricsService.createTimer(executorMetrics, mf, "Queue"); 187 + */
189 - delayMetrics = metricsService.createTimer(executorMetrics, mf, "Delay"); 188 + public void setMetricsService(MetricsService metricsService) {
190 - } 189 + if (this.metricsService == null && metricsService != null) {
191 - } else { 190 + // If metrics service was newly introduced, initialize metrics.
192 - metricsService = null; 191 + executorMetrics = metricsService.registerComponent("SharedExecutor");
193 - queueMetrics = null; 192 + MetricsFeature mf = executorMetrics.registerFeature("*");
194 - delayMetrics = null; 193 + queueMetrics = metricsService.createTimer(executorMetrics, mf, "Queue");
195 - } 194 + delayMetrics = metricsService.createTimer(executorMetrics, mf, "Delay");
195 + } else if (this.metricsService != null && metricsService == null) {
196 + // If the metrics service was newly withdrawn, tear-down metrics.
197 + queueMetrics = null;
198 + delayMetrics = null;
199 + } // Otherwise just record the metrics service
200 + this.metricsService = metricsService;
196 } 201 }
197 202
198 private Runnable wrap(Runnable command) { 203 private Runnable wrap(Runnable command) {
...@@ -223,8 +228,8 @@ class SharedExecutorService implements ExecutorService { ...@@ -223,8 +228,8 @@ class SharedExecutorService implements ExecutorService {
223 } 228 }
224 229
225 /** 230 /**
226 - * CallableExtended class is used to get Runnable Object 231 + * CallableExtended class is used to get Runnable Object
227 - * from Callable Object. 232 + * from Callable Object.
228 */ 233 */
229 class CallableExtended implements Callable { 234 class CallableExtended implements Callable {
230 235
...@@ -232,11 +237,13 @@ class SharedExecutorService implements ExecutorService { ...@@ -232,11 +237,13 @@ class SharedExecutorService implements ExecutorService {
232 237
233 /** 238 /**
234 * Wrapper for Callable object . 239 * Wrapper for Callable object .
240 + *
235 * @param runnable Runnable object 241 * @param runnable Runnable object
236 */ 242 */
237 public CallableExtended(Runnable runnable) { 243 public CallableExtended(Runnable runnable) {
238 this.runnable = runnable; 244 this.runnable = runnable;
239 } 245 }
246 +
240 public Runnable getRunnable() { 247 public Runnable getRunnable() {
241 return runnable; 248 return runnable;
242 } 249 }
......
...@@ -95,9 +95,15 @@ public final class SharedExecutors { ...@@ -95,9 +95,15 @@ public final class SharedExecutors {
95 "onos-pool-executor-%d"))); 95 "onos-pool-executor-%d")));
96 } 96 }
97 97
98 - 98 + /**
99 - public static void setCalculatePoolPerformance(boolean calculatePoolPerformance, MetricsService metricsService) { 99 + * Enables or disables calculation of the pool performance metrics. If
100 - poolThreadExecutor.setCalculatePoolPerformance(calculatePoolPerformance, metricsService); 100 + * the metrics service is not null metric collection will be enabled;
101 + * otherwise it will be disabled.
102 + *
103 + * @param metricsService optional metric service
104 + */
105 + public static void setMetricsService(MetricsService metricsService) {
106 + poolThreadExecutor.setMetricsService(metricsService);
101 } 107 }
102 108
103 /** 109 /**
......