You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/05/26 12:00:58 UTC
camel git commit: CAMEL-11341: Optimise
DefaultEndpointUtilizationStatistics to avoid synchronized block when
updating hit counter.
Repository: camel
Updated Branches:
refs/heads/master 1220328ab -> cbf469e2f
CAMEL-11341: Optimise DefaultEndpointUtilizationStatistics to avoid synchronized block when updating hit counter.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cbf469e2
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cbf469e2
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cbf469e2
Branch: refs/heads/master
Commit: cbf469e2f2037ac99b1037d729c701d60dd7a866
Parents: 1220328
Author: Claus Ibsen <da...@apache.org>
Authored: Fri May 26 13:42:43 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri May 26 13:51:36 2017 +0200
----------------------------------------------------------------------
.../DefaultEndpointUtilizationStatistics.java | 17 +++---
.../spi/EndpointUtilizationStatistics.java | 1 +
...anagedEndpointUtilizationStatisticsTest.java | 61 ++++++++++++++++++++
3 files changed, 70 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/cbf469e2/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpointUtilizationStatistics.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpointUtilizationStatistics.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpointUtilizationStatistics.java
index 9c8b1dc..14efe2b 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpointUtilizationStatistics.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpointUtilizationStatistics.java
@@ -41,15 +41,14 @@ public class DefaultEndpointUtilizationStatistics implements EndpointUtilization
}
@Override
- public synchronized void onHit(String uri) {
- Long counter = map.get(uri);
- if (counter == null) {
- counter = 1L;
- map.put(uri, counter);
- } else {
- counter++;
- map.put(uri, counter);
- }
+ public void onHit(String uri) {
+ map.compute(uri, (key, current) -> {
+ if (current == null) {
+ return 1L;
+ } else {
+ return ++current;
+ }
+ });
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/cbf469e2/camel-core/src/main/java/org/apache/camel/spi/EndpointUtilizationStatistics.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/EndpointUtilizationStatistics.java b/camel-core/src/main/java/org/apache/camel/spi/EndpointUtilizationStatistics.java
index dabcd06..ca6cfba 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/EndpointUtilizationStatistics.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/EndpointUtilizationStatistics.java
@@ -17,6 +17,7 @@
package org.apache.camel.spi;
import java.util.Map;
+import java.util.concurrent.atomic.LongAdder;
/**
* Various statistics about endpoint utilization, such as from EIP patterns that uses dynamic endpoints.
http://git-wip-us.apache.org/repos/asf/camel/blob/cbf469e2/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointUtilizationStatisticsTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointUtilizationStatisticsTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointUtilizationStatisticsTest.java
new file mode 100644
index 0000000..49188ee
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointUtilizationStatisticsTest.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import java.util.List;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spi.RuntimeEndpointRegistry;
+
+/**
+ * @version
+ */
+public class ManagedEndpointUtilizationStatisticsTest extends ManagementTestSupport {
+
+ public void testManageEndpointUtilizationStatistics() throws Exception {
+ // JMX tests dont work well on AIX CI servers (hangs them)
+ if (isPlatform("aix")) {
+ return;
+ }
+
+ getMockEndpoint("mock:result").expectedMessageCount(4);
+
+ template.sendBody("seda:start", "Hello World");
+ template.sendBody("seda:start", "Bye World");
+ template.sendBody("seda:start", "Hi World");
+ template.sendBody("seda:start", "Camel World");
+
+ assertMockEndpointsSatisfied();
+
+ List<RuntimeEndpointRegistry.Statistic> stats = context.getRuntimeEndpointRegistry().getEndpointStatistics();
+ assertNotNull(stats);
+ assertEquals(2, stats.size());
+ assertEquals(4, stats.get(0).getHits());
+ assertEquals(4, stats.get(1).getHits());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("seda:start").to("mock:result");
+ }
+ };
+ }
+
+}
\ No newline at end of file