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/28 19:54:10 UTC

[1/8] camel git commit: CAMEL-11353: Optimise - JMX Statistic split into specialized classes

Repository: camel
Updated Branches:
  refs/heads/master e4ba8a7bd -> 7558e631e


CAMEL-11353: Optimise - JMX Statistic split into specialized classes


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3081eda5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3081eda5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3081eda5

Branch: refs/heads/master
Commit: 3081eda56bf9cdbda3c0641a38b264c80abc6257
Parents: e4ba8a7
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 18:27:21 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 18:27:21 2017 +0200

----------------------------------------------------------------------
 .../management/DefaultManagementStrategy.java   |   6 -
 .../camel/management/mbean/ManagedCounter.java  |   6 +-
 .../mbean/ManagedPerformanceCounter.java        |  42 +++---
 .../camel/management/mbean/Statistic.java       | 127 ++++---------------
 .../management/mbean/StatisticCounter.java      |  46 +++++++
 .../camel/management/mbean/StatisticDelta.java  |  45 +++++++
 .../management/mbean/StatisticMaximum.java      |  49 +++++++
 .../management/mbean/StatisticMinimum.java      |  49 +++++++
 .../camel/management/mbean/StatisticValue.java  |  47 +++++++
 9 files changed, 282 insertions(+), 135 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index 6a46c61..c41b5d4 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -24,7 +24,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.management.event.DefaultEventFactory;
-import org.apache.camel.management.mbean.Statistic;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.EventFactory;
 import org.apache.camel.spi.EventNotifier;
@@ -190,11 +189,6 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem
         }
     }
 
-    public Statistic createStatistic(String name, Object owner, Statistic.UpdateMode updateMode) {
-        // noop
-        return null;
-    }
-
     @Deprecated
     public void setStatisticsLevel(ManagementStatisticsLevel level) {
         LOG.warn("Using @deprecated option statisticsLevel on ManagementStrategy. Configure this on ManagementAgent instead.");

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
index f8fdc86..5605ae2 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
@@ -29,9 +29,9 @@ public abstract class ManagedCounter implements ManagedCounterMBean {
     protected Statistic resetTimestamp;
 
     public void init(ManagementStrategy strategy) {
-        this.exchangesTotal = new Statistic("org.apache.camel.exchangesTotal", this, Statistic.UpdateMode.COUNTER);
-        this.startTimestamp = new Statistic("org.apache.camel.startTimestamp", this, Statistic.UpdateMode.VALUE);
-        this.resetTimestamp = new Statistic("org.apache.camel.resetTimestamp", this, Statistic.UpdateMode.VALUE);
+        this.exchangesTotal = new StatisticCounter();
+        this.startTimestamp = new StatisticValue();
+        this.resetTimestamp = new StatisticValue();
         long now = new Date().getTime();
         startTimestamp.updateValue(now);
         resetTimestamp.updateValue(now);

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index 6e020c1..2ac6214 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -55,25 +55,25 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
 
     public void init(ManagementStrategy strategy) {
         super.init(strategy);
-        this.exchangesCompleted = new Statistic("org.apache.camel.exchangesCompleted", this, Statistic.UpdateMode.COUNTER);
-        this.exchangesFailed = new Statistic("org.apache.camel.exchangesFailed", this, Statistic.UpdateMode.COUNTER);
-        this.exchangesInflight = new Statistic("org.apache.camel.exchangesInflight", this, Statistic.UpdateMode.COUNTER);
-
-        this.failuresHandled = new Statistic("org.apache.camel.failuresHandled", this, Statistic.UpdateMode.COUNTER);
-        this.redeliveries = new Statistic("org.apache.camel.redeliveries", this, Statistic.UpdateMode.COUNTER);
-        this.externalRedeliveries = new Statistic("org.apache.camel.externalRedeliveries", this, Statistic.UpdateMode.COUNTER);
-
-        this.minProcessingTime = new Statistic("org.apache.camel.minimumProcessingTime", this, Statistic.UpdateMode.MINIMUM);
-        this.maxProcessingTime = new Statistic("org.apache.camel.maximumProcessingTime", this, Statistic.UpdateMode.MAXIMUM);
-        this.totalProcessingTime = new Statistic("org.apache.camel.totalProcessingTime", this, Statistic.UpdateMode.COUNTER);
-        this.lastProcessingTime = new Statistic("org.apache.camel.lastProcessingTime", this, Statistic.UpdateMode.VALUE);
-        this.deltaProcessingTime = new Statistic("org.apache.camel.deltaProcessingTime", this, Statistic.UpdateMode.DELTA);
-        this.meanProcessingTime = new Statistic("org.apache.camel.meanProcessingTime", this, Statistic.UpdateMode.VALUE);
-
-        this.firstExchangeCompletedTimestamp = new Statistic("org.apache.camel.firstExchangeCompletedTimestamp", this, Statistic.UpdateMode.VALUE);
-        this.firstExchangeFailureTimestamp = new Statistic("org.apache.camel.firstExchangeFailureTimestamp", this, Statistic.UpdateMode.VALUE);
-        this.lastExchangeCompletedTimestamp = new Statistic("org.apache.camel.lastExchangeCompletedTimestamp", this, Statistic.UpdateMode.VALUE);
-        this.lastExchangeFailureTimestamp = new Statistic("org.apache.camel.lastExchangeFailureTimestamp", this, Statistic.UpdateMode.VALUE);
+        this.exchangesCompleted = new StatisticCounter();
+        this.exchangesFailed = new StatisticCounter();
+        this.exchangesInflight = new StatisticCounter();
+
+        this.failuresHandled = new StatisticCounter();
+        this.redeliveries = new StatisticCounter();
+        this.externalRedeliveries = new StatisticCounter();
+
+        this.minProcessingTime = new StatisticMinimum();
+        this.maxProcessingTime = new StatisticMaximum();
+        this.totalProcessingTime = new StatisticCounter();
+        this.lastProcessingTime = new StatisticValue();
+        this.deltaProcessingTime = new StatisticDelta();
+        this.meanProcessingTime = new StatisticValue();
+
+        this.firstExchangeCompletedTimestamp = new StatisticValue();
+        this.firstExchangeFailureTimestamp = new StatisticValue();
+        this.lastExchangeCompletedTimestamp = new StatisticValue();
+        this.lastExchangeFailureTimestamp = new StatisticValue();
     }
 
     @Override
@@ -228,8 +228,8 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
         lastExchangeCompletedExchangeId = exchange.getExchangeId();
 
         // update mean
-        long count = exchangesCompleted.getValue();
-        long mean = count > 0 ? totalProcessingTime.getValue() / count : 0;
+        long count = exchangesCompleted.getUpdateCount();
+        long mean = count > 0 ? totalProcessingTime.getValue() / exchangesCompleted.getValue() : 0;
         meanProcessingTime.updateValue(mean);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
index aa866e0..63dc8a5 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
@@ -16,92 +16,27 @@
  */
 package org.apache.camel.management.mbean;
 
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.LongAdder;
-
 /**
- * Default implementation of {@link Statistic}
+ * Base implementation of {@link Statistic}
+ * <p/>
+ * The following modes is available:
+ * <ul>
+ * <li>VALUE - A statistic with this update mode is a simple value that is a straight forward
+ * representation of the updated value.</li>
+ * <li>DELTA - A statistic with this update mode is a value that represents the delta
+ * between the last two recorded values (or the initial value if two updates have
+ * not been recorded). This value can be negative if the delta goes up or down.</li>
+ * <li>COUNTER - A statistic with this update mode interprets updates as increments (positive values)
+ * or decrements (negative values) to the current value.</li>
+ * <li>MAXIMUM - A statistic with this update mode is a value that represents the maximum value
+ * amongst the update values applied to this statistic.</li>
+ * <li>MINIMUM - A statistic with this update mode is a value that represents the minimum value
+ * amongst the update values applied to this statistic.</li>
+ * <ul>
  */
-public class Statistic {
-
-    /**
-     * Statistics mode
-     * <ul>
-     * <li>VALUE - A statistic with this update mode is a simple value that is a straight forward
-     * representation of the updated value.</li>
-     * <li>DELTA - A statistic with this update mode is a value that represents the delta
-     * between the last two recorded values (or the initial value if two updates have
-     * not been recorded). This value can be negative if the delta goes up or down.</li>
-     * <li>COUNTER - A statistic with this update mode interprets updates as increments (positive values)
-     * or decrements (negative values) to the current value.</li>
-     * <li>MAXIMUM - A statistic with this update mode is a value that represents the maximum value
-     * amongst the update values applied to this statistic.</li>
-     * <li>MINIMUM - A statistic with this update mode is a value that represents the minimum value
-     * amongst the update values applied to this statistic.</li>
-     * <ul>
-     */
-    public enum UpdateMode {
-        VALUE, DELTA, COUNTER, MAXIMUM, MINIMUM
-    }
+public abstract class Statistic {
 
-    private final UpdateMode updateMode;
-    private final AtomicLong value = new AtomicLong();
-    private final AtomicLong lastValue;
-    private final LongAdder updateCount = new LongAdder();
-
-    /**
-     * Instantiates a new statistic.
-     *
-     * @param name  name of statistic
-     * @param owner owner
-     * @param updateMode The statistic update mode.
-     */
-    public Statistic(String name, Object owner, UpdateMode updateMode) {
-        this.updateMode = updateMode;
-        if (UpdateMode.DELTA == updateMode) {
-            this.lastValue = new AtomicLong();
-        } else {
-            this.lastValue = null;
-        }
-    }
-
-    public void updateValue(long newValue) {
-        switch (updateMode) {
-        case COUNTER:
-            value.addAndGet(newValue);
-            break;
-        case VALUE:
-            value.set(newValue);
-            break;
-        case DELTA:
-            if (updateCount.longValue() > 0) {
-                // remember previous value before updating it
-                lastValue.set(value.longValue());
-            }
-            value.set(newValue);
-            break;
-        case MAXIMUM:
-            value.updateAndGet(value -> {
-                if (updateCount.longValue() == 0 || value < newValue) {
-                    return newValue;
-                } else {
-                    return value;
-                }
-            });
-            break;
-        case MINIMUM:
-            value.updateAndGet(value -> {
-                if (updateCount.longValue() == 0 || value > newValue) {
-                    return newValue;
-                } else {
-                    return value;
-                }
-            });
-            break;
-        default:
-        }
-        updateCount.add(1);
-    }
+    public abstract void updateValue(long newValue);
 
     public void increment() {
         updateValue(1);
@@ -111,31 +46,13 @@ public class Statistic {
         updateValue(-1);
     }
 
-    public long getValue() {
-        if (updateMode == UpdateMode.DELTA) {
-            if (updateCount.longValue() == 0) {
-                return value.get();
-            } else {
-                return value.get() - lastValue.get();
-            }
-        }
-        return value.get();
-    }
+    public abstract long getValue();
 
+    @Deprecated
     public long getUpdateCount() {
-        return updateCount.longValue();
+        return 0;
     }
 
-    public void reset() {
-        value.set(0);
-        if (lastValue != null) {
-            lastValue.set(0);
-        }
-        updateCount.reset();
-    }
-
-    public String toString() {
-        return "" + value.get();
-    }
+    public abstract void reset();
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
new file mode 100644
index 0000000..d947e6b
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
@@ -0,0 +1,46 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.mbean;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticCounter extends Statistic {
+
+    private final AtomicLong value = new AtomicLong(0);
+
+    public void updateValue(long newValue) {
+        value.addAndGet(newValue);
+    }
+
+    public long getValue() {
+        return value.get();
+    }
+
+    @Override
+    public String toString() {
+        return "" + value.get();
+    }
+
+    public void reset() {
+        value.set(0);
+    }
+
+    @Override
+    public long getUpdateCount() {
+        return value.get();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
new file mode 100644
index 0000000..b288972
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
@@ -0,0 +1,45 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.mbean;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticDelta extends Statistic {
+
+    private final AtomicLong value = new AtomicLong();
+    private final AtomicLong lastValue = new AtomicLong();
+
+    public void updateValue(long newValue) {
+        lastValue.set(value.longValue());
+        value.set(newValue);
+    }
+
+    public long getValue() {
+        return value.get() - lastValue.get();
+    }
+
+    @Override
+    public String toString() {
+        return "" + value.get();
+    }
+
+    public void reset() {
+        value.set(0);
+        lastValue.set(0);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
new file mode 100644
index 0000000..d403370
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
@@ -0,0 +1,49 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.mbean;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticMaximum extends Statistic {
+
+    private final AtomicLong value = new AtomicLong(-1);
+
+    public void updateValue(long newValue) {
+        value.updateAndGet(value -> {
+            if (value == -1 || value < newValue) {
+                return newValue;
+            } else {
+                return value;
+            }
+        });
+    }
+
+    public long getValue() {
+        long num = value.get();
+        return num == -1 ? 0 : num;
+    }
+
+    @Override
+    public String toString() {
+        return "" + value.get();
+    }
+
+    public void reset() {
+        value.set(-1);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
new file mode 100644
index 0000000..55b5a54
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
@@ -0,0 +1,49 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.mbean;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticMinimum extends Statistic {
+
+    private final AtomicLong value = new AtomicLong(-1);
+
+    public void updateValue(long newValue) {
+        value.updateAndGet(value -> {
+            if (value == -1 || value > newValue) {
+                return newValue;
+            } else {
+                return value;
+            }
+        });
+    }
+
+    public long getValue() {
+        long num = value.get();
+        return num == -1 ? 0 : num;
+    }
+
+    @Override
+    public String toString() {
+        return "" + value.get();
+    }
+
+    public void reset() {
+        value.set(-1);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
new file mode 100644
index 0000000..6391799
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
@@ -0,0 +1,47 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.mbean;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticValue extends Statistic {
+
+    private final AtomicLong value = new AtomicLong(-1);
+
+    public void updateValue(long newValue) {
+        value.set(newValue);
+    }
+
+    public long getValue() {
+        return value.get();
+    }
+
+    @Override
+    public String toString() {
+        return "" + value.get();
+    }
+
+    @Override
+    public long getUpdateCount() {
+        return value.get() == -1 ? 0 : 1;
+    }
+
+    public void reset() {
+        value.set(-1);
+    }
+
+}


[6/8] camel git commit: CAMEL-11354: Optimize oldest exchange inflight per route

Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e6bc3975
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e6bc3975
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e6bc3975

Branch: refs/heads/master
Commit: e6bc3975fd31e83a01c3ad94200586f5173e6b9e
Parents: ffd97f6
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 20:43:13 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 20:43:13 2017 +0200

----------------------------------------------------------------------
 .../camel/impl/DefaultInflightRepository.java   | 30 ++++++++++++++++++++
 .../camel/management/mbean/ManagedRoute.java    | 19 ++-----------
 .../apache/camel/spi/InflightRepository.java    |  8 ++++++
 3 files changed, 41 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e6bc3975/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
index f176861..cae7ecb 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
@@ -26,6 +26,8 @@ import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
@@ -152,6 +154,34 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
     }
 
     @Override
+    public InflightExchange oldest(String fromRouteId) {
+        Stream<Exchange> values;
+
+        if (fromRouteId == null) {
+            // all values
+            values = inflight.values().stream();
+        } else {
+            // only if route match
+            values = inflight.values().stream()
+                .filter(e -> fromRouteId.equals(e.getFromRouteId()));
+        }
+
+        // sort by duration and grab the first
+        Exchange first = values.sorted((e1, e2) -> {
+            long d1 = getExchangeDuration(e1);
+            long d2 = getExchangeDuration(e2);
+            // need the biggest number first
+            return -1 * Long.compare(d1, d2);
+        }).findFirst().orElse(null);
+
+        if (first != null) {
+            return new InflightExchangeEntry(first);
+        } else {
+            return null;
+        }
+    }
+
+    @Override
     protected void doStart() throws Exception {
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/e6bc3975/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 81f4794..93248b5 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -19,15 +19,12 @@ package org.apache.camel.management.mbean;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import javax.management.AttributeValueExp;
@@ -37,11 +34,7 @@ import javax.management.Query;
 import javax.management.QueryExp;
 import javax.management.StringValueExp;
 
-import org.apache.camel.spi.InflightRepository;
-import org.w3c.dom.Document;
-
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
@@ -52,12 +45,14 @@ import org.apache.camel.api.management.mbean.ManagedRouteMBean;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.spi.InflightRepository;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.XmlLineNumberParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
 
 @ManagedResource(description = "Managed Route")
 public class ManagedRoute extends ManagedPerformanceCounter implements TimerListener, ManagedRouteMBean {
@@ -70,7 +65,6 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
     protected final String description;
     protected final ModelCamelContext context;
     private final LoadTriplet load = new LoadTriplet();
-    private final ConcurrentHashMap<String, Exchange> exchangesInFlight = new ConcurrentHashMap<String, Exchange>();
     private final String jmxDomain;
 
     public ManagedRoute(ModelCamelContext context, Route route) {
@@ -85,8 +79,6 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         super.init(strategy);
         boolean enabled = context.getManagementStrategy().getManagementAgent().getStatisticsLevel() != ManagementStatisticsLevel.Off;
         setStatisticsEnabled(enabled);
-
-        exchangesInFlight.clear();
     }
 
     public Route getRoute() {
@@ -467,12 +459,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
     }
 
     private InflightRepository.InflightExchange getOldestInflightEntry() {
-        Collection<InflightRepository.InflightExchange> list = getContext().getInflightRepository().browse(getRouteId(), 1, true);
-        if (list.size() == 1) {
-            return list.iterator().next();
-        } else {
-            return null;
-        }
+        return getContext().getInflightRepository().oldest(getRouteId());
     }
 
     public Long getOldestInflightDuration() {

http://git-wip-us.apache.org/repos/asf/camel/blob/e6bc3975/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java b/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
index 3fbd710..53c02e2 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
@@ -175,4 +175,12 @@ public interface InflightRepository extends StaticService {
      */
     Collection<InflightExchange> browse(String fromRouteId, int limit, boolean sortByLongestDuration);
 
+    /**
+     * Gets the oldest {@link InflightExchange} that are currently inflight that started from the given route.
+     *
+     * @param fromRouteId  the route id, or <tt>null</tt> for all routes.
+     * @return the oldest, or <tt>null</tt> if none inflight
+     */
+    InflightExchange oldest(String fromRouteId);
+
 }


[8/8] camel git commit: CAMEL-11354: Optimize oldest exchange inflight per route

Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7558e631
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7558e631
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7558e631

Branch: refs/heads/master
Commit: 7558e631e04d4a2c24ea6c762012cdff60463396
Parents: cff0fc0
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 21:53:30 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 21:53:30 2017 +0200

----------------------------------------------------------------------
 .../src/main/scala/org/apache/camel/scala/RichExchange.scala       | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7558e631/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
----------------------------------------------------------------------
diff --git a/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala b/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
index 0a280b0..c63373e 100644
--- a/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
+++ b/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
@@ -134,4 +134,6 @@ class RichExchange(val exchange : Exchange) extends Exchange {
   def handoverCompletions(exchange : Exchange) { exchange.handoverCompletions(exchange) }
 
   def handoverCompletions = exchange.handoverCompletions
+
+  def getCreated = exchange.getCreated
 }


[4/8] camel git commit: CAMEL-11354: Optimize oldest exchange inflight per route

Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ce4e8f7d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ce4e8f7d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ce4e8f7d

Branch: refs/heads/master
Commit: ce4e8f7df2dbc2b8cf9b0a55c8bba01010ad3e86
Parents: 4a3debe
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 20:03:59 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 20:03:59 2017 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/camel/Exchange.java    |   6 +
 .../org/apache/camel/impl/DefaultExchange.java  |  10 ++
 .../camel/impl/DefaultInflightRepository.java   |   2 +-
 .../camel/management/mbean/ManagedRoute.java    | 111 ++++---------------
 .../org/apache/camel/util/MessageHelper.java    |   2 +-
 .../EventNotifierExchangeCompletedTest.java     |   2 +-
 6 files changed, 43 insertions(+), 90 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/Exchange.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/Exchange.java b/camel-core/src/main/java/org/apache/camel/Exchange.java
index eecc7e0..87fcf13 100644
--- a/camel-core/src/main/java/org/apache/camel/Exchange.java
+++ b/camel-core/src/main/java/org/apache/camel/Exchange.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -584,4 +585,9 @@ public interface Exchange {
      */
     List<Synchronization> handoverCompletions();
 
+    /**
+     * Gets the timestamp when this exchange was created.
+     */
+    Date getCreated();
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
index c1a5c39..6b7a686 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -86,6 +87,15 @@ public final class DefaultExchange implements Exchange {
         return String.format("Exchange[%s]", exchangeId == null ? "" : exchangeId);
     }
 
+    @Override
+    public Date getCreated() {
+        if (hasProperties()) {
+            return getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+        } else {
+            return null;
+        }
+    }
+
     public Exchange copy() {
         // to be backwards compatible as today
         return copy(false);

http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
index 01a2826..2c6c78b 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
@@ -167,7 +167,7 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
 
     private static long getExchangeDuration(Exchange exchange) {
         long duration = 0;
-        Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+        Date created = exchange.getCreated();
         if (created != null) {
             duration = System.currentTimeMillis() - created.getTime();
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 166f3a2..1b031b1 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -21,12 +21,12 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentSkipListMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import javax.management.AttributeValueExp;
@@ -68,8 +68,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
     protected final String description;
     protected final ModelCamelContext context;
     private final LoadTriplet load = new LoadTriplet();
-    private final ConcurrentSkipListMap<InFlightKey, Long> exchangesInFlightStartTimestamps = new ConcurrentSkipListMap<InFlightKey, Long>();
-    private final ConcurrentHashMap<String, InFlightKey> exchangesInFlightKeys = new ConcurrentHashMap<String, InFlightKey>();
+    private final ConcurrentHashMap<String, Exchange> exchangesInFlight = new ConcurrentHashMap<String, Exchange>();
     private final String jmxDomain;
 
     public ManagedRoute(ModelCamelContext context, Route route) {
@@ -85,8 +84,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         boolean enabled = context.getManagementStrategy().getManagementAgent().getStatisticsLevel() != ManagementStatisticsLevel.Off;
         setStatisticsEnabled(enabled);
 
-        exchangesInFlightKeys.clear();
-        exchangesInFlightStartTimestamps.clear();
+        exchangesInFlight.clear();
     }
 
     public Route getRoute() {
@@ -410,13 +408,14 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         String stat = dumpStatsAsXml(fullStats);
         answer.append(" exchangesInflight=\"").append(getInflightExchanges()).append("\"");
         answer.append(" selfProcessingTime=\"").append(routeSelfTime).append("\"");
-        InFlightKey oldestInflightEntry = getOldestInflightEntry();
-        if (oldestInflightEntry == null) {
+        Exchange oldest = getOldestInflightEntry();
+        if (oldest == null) {
             answer.append(" oldestInflightExchangeId=\"\"");
             answer.append(" oldestInflightDuration=\"\"");
         } else {
-            answer.append(" oldestInflightExchangeId=\"").append(oldestInflightEntry.exchangeId).append("\"");
-            answer.append(" oldestInflightDuration=\"").append(System.currentTimeMillis() - oldestInflightEntry.timeStamp).append("\"");
+            long duration = System.currentTimeMillis() - oldest.getCreated().getTime();
+            answer.append(" oldestInflightExchangeId=\"").append(oldest.getExchangeId()).append("\"");
+            answer.append(" oldestInflightDuration=\"").append(duration).append("\"");
         }
         answer.append(" ").append(stat.substring(7, stat.length() - 2)).append(">\n");
 
@@ -466,111 +465,49 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         return route.hashCode();
     }
 
-    private InFlightKey getOldestInflightEntry() {
-        Map.Entry<InFlightKey, Long> entry = exchangesInFlightStartTimestamps.firstEntry();
-        if (entry != null) {
-            return entry.getKey();
-        }
-        return null;
+    private Exchange getOldestInflightEntry() {
+        return exchangesInFlight.values().stream().max(Comparator.comparing(Exchange::getCreated)).orElse(null);
     }
 
     public Long getOldestInflightDuration() {
-        InFlightKey oldest = getOldestInflightEntry();
-        if (oldest == null) {
+        Exchange exchange = getOldestInflightEntry();
+        if (exchange == null) {
+            return null;
+        }
+        Date created = exchange.getCreated();
+        if (created != null) {
+            return System.currentTimeMillis() - created.getTime();
+        } else {
             return null;
         }
-        return System.currentTimeMillis() - oldest.timeStamp;
     }
 
     public String getOldestInflightExchangeId() {
-        InFlightKey oldest = getOldestInflightEntry();
-        if (oldest == null) {
+        Exchange exchange = getOldestInflightEntry();
+        if (exchange == null) {
             return null;
         }
-        return oldest.exchangeId;
+        return exchange.getExchangeId();
     }
 
     @Override
     public void processExchange(Exchange exchange) {
-        exchangesInFlightKeys.computeIfAbsent(exchange.getExchangeId(), id -> {
-            InFlightKey key = new InFlightKey(System.currentTimeMillis(), exchange.getExchangeId());
-            exchangesInFlightStartTimestamps.put(key, key.timeStamp);
-            return key;
-        });
+        exchangesInFlight.put(exchange.getExchangeId(), exchange);
         super.processExchange(exchange);
     }
 
     @Override
     public void completedExchange(Exchange exchange, long time) {
-        exchangesInFlightKeys.computeIfPresent(exchange.getExchangeId(), (id, key) -> {
-            exchangesInFlightStartTimestamps.remove(key);
-            return null;
-        });
+        exchangesInFlight.remove(exchange.getExchangeId());
         super.completedExchange(exchange, time);
     }
 
     @Override
     public void failedExchange(Exchange exchange) {
-        exchangesInFlightKeys.computeIfPresent(exchange.getExchangeId(), (id, key) -> {
-            exchangesInFlightStartTimestamps.remove(key);
-            return null;
-        });
+        exchangesInFlight.remove(exchange.getExchangeId());
         super.failedExchange(exchange);
     }
 
-    private static class InFlightKey implements Comparable<InFlightKey> {
-
-        private final Long timeStamp;
-        private final String exchangeId;
-
-        InFlightKey(Long timeStamp, String exchangeId) {
-            this.timeStamp = timeStamp;
-            this.exchangeId = exchangeId;
-        }
-
-        @Override
-        public int compareTo(InFlightKey o) {
-            int compare = Long.compare(timeStamp, o.timeStamp);
-            if (compare == 0) {
-                return exchangeId.compareTo(o.exchangeId);
-            }
-            return compare;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-
-            InFlightKey that = (InFlightKey) o;
-
-            if (!exchangeId.equals(that.exchangeId)) {
-                return false;
-            }
-            if (!timeStamp.equals(that.timeStamp)) {
-                return false;
-            }
-
-            return true;
-        }
-
-        @Override
-        public int hashCode() {
-            int result = timeStamp.hashCode();
-            result = 31 * result + exchangeId.hashCode();
-            return result;
-        }
-
-        @Override
-        public String toString() {
-            return exchangeId;
-        }
-    }
-
     /**
      * Used for sorting the processor mbeans accordingly to their index.
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
index 311e987..050fecc 100644
--- a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
@@ -560,7 +560,7 @@ public final class MessageHelper {
             label = URISupport.sanitizeUri(exchange.getFromEndpoint().getEndpointUri());
         }
         long elapsed = 0;
-        Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+        Date created = exchange.getCreated();
         if (created != null) {
             elapsed = new StopWatch(created).taken();
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
index 45e10a0..f37e7e0 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
@@ -85,7 +85,7 @@ public class EventNotifierExchangeCompletedTest extends ContextTestSupport {
         assertEquals("direct://start", event.getExchange().getFromEndpoint().getEndpointUri());
 
         // grab the created timestamp
-        Date created = event.getExchange().getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+        Date created = event.getExchange().getCreated();
         assertNotNull(created);
 
         // calculate elapsed time


[5/8] camel git commit: CAMEL-11354: Optimize oldest exchange inflight per route

Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ffd97f65
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ffd97f65
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ffd97f65

Branch: refs/heads/master
Commit: ffd97f652c00e2e83bb64fa8aaccd62b2f412a5f
Parents: ce4e8f7
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 20:24:19 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 20:24:19 2017 +0200

----------------------------------------------------------------------
 .../camel/impl/DefaultInflightRepository.java   |  3 +-
 .../camel/management/mbean/ManagedRoute.java    | 53 +++++-------
 .../ManagedInflightStatisticsTest.java          | 88 +++++---------------
 3 files changed, 43 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ffd97f65/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
index 2c6c78b..f176861 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
@@ -128,7 +128,8 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
                 public int compare(Exchange e1, Exchange e2) {
                     long d1 = getExchangeDuration(e1);
                     long d2 = getExchangeDuration(e2);
-                    return Long.compare(d1, d2);
+                    // need the biggest number first
+                    return -1 * Long.compare(d1, d2);
                 }
             });
         } else {

http://git-wip-us.apache.org/repos/asf/camel/blob/ffd97f65/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 1b031b1..81f4794 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -19,6 +19,7 @@ package org.apache.camel.management.mbean;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
@@ -36,6 +37,7 @@ import javax.management.Query;
 import javax.management.QueryExp;
 import javax.management.StringValueExp;
 
+import org.apache.camel.spi.InflightRepository;
 import org.w3c.dom.Document;
 
 import org.apache.camel.CamelContext;
@@ -408,14 +410,13 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         String stat = dumpStatsAsXml(fullStats);
         answer.append(" exchangesInflight=\"").append(getInflightExchanges()).append("\"");
         answer.append(" selfProcessingTime=\"").append(routeSelfTime).append("\"");
-        Exchange oldest = getOldestInflightEntry();
+        InflightRepository.InflightExchange oldest = getOldestInflightEntry();
         if (oldest == null) {
             answer.append(" oldestInflightExchangeId=\"\"");
             answer.append(" oldestInflightDuration=\"\"");
         } else {
-            long duration = System.currentTimeMillis() - oldest.getCreated().getTime();
-            answer.append(" oldestInflightExchangeId=\"").append(oldest.getExchangeId()).append("\"");
-            answer.append(" oldestInflightDuration=\"").append(duration).append("\"");
+            answer.append(" oldestInflightExchangeId=\"").append(oldest.getExchange().getExchangeId()).append("\"");
+            answer.append(" oldestInflightDuration=\"").append(oldest.getDuration()).append("\"");
         }
         answer.append(" ").append(stat.substring(7, stat.length() - 2)).append(">\n");
 
@@ -465,47 +466,31 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         return route.hashCode();
     }
 
-    private Exchange getOldestInflightEntry() {
-        return exchangesInFlight.values().stream().max(Comparator.comparing(Exchange::getCreated)).orElse(null);
+    private InflightRepository.InflightExchange getOldestInflightEntry() {
+        Collection<InflightRepository.InflightExchange> list = getContext().getInflightRepository().browse(getRouteId(), 1, true);
+        if (list.size() == 1) {
+            return list.iterator().next();
+        } else {
+            return null;
+        }
     }
 
     public Long getOldestInflightDuration() {
-        Exchange exchange = getOldestInflightEntry();
-        if (exchange == null) {
+        InflightRepository.InflightExchange oldest = getOldestInflightEntry();
+        if (oldest == null) {
             return null;
-        }
-        Date created = exchange.getCreated();
-        if (created != null) {
-            return System.currentTimeMillis() - created.getTime();
         } else {
-            return null;
+            return oldest.getDuration();
         }
     }
 
     public String getOldestInflightExchangeId() {
-        Exchange exchange = getOldestInflightEntry();
-        if (exchange == null) {
+        InflightRepository.InflightExchange oldest = getOldestInflightEntry();
+        if (oldest == null) {
             return null;
+        } else {
+            return oldest.getExchange().getExchangeId();
         }
-        return exchange.getExchangeId();
-    }
-
-    @Override
-    public void processExchange(Exchange exchange) {
-        exchangesInFlight.put(exchange.getExchangeId(), exchange);
-        super.processExchange(exchange);
-    }
-
-    @Override
-    public void completedExchange(Exchange exchange, long time) {
-        exchangesInFlight.remove(exchange.getExchangeId());
-        super.completedExchange(exchange, time);
-    }
-
-    @Override
-    public void failedExchange(Exchange exchange) {
-        exchangesInFlight.remove(exchange.getExchangeId());
-        super.failedExchange(exchange);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/ffd97f65/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
index aa6fbe7..c8fd5ca 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
@@ -16,7 +16,10 @@
  */
 package org.apache.camel.management;
 
+import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -30,7 +33,7 @@ import org.apache.camel.component.mock.MockEndpoint;
  */
 public class ManagedInflightStatisticsTest extends ManagementTestSupport {
 
-    public void testManageStatistics() throws Exception {
+    public void testOldestInflight() throws Exception {
         // JMX tests dont work well on AIX CI servers (hangs them)
         if (isPlatform("aix")) {
             return;
@@ -53,10 +56,13 @@ public class ManagedInflightStatisticsTest extends ManagementTestSupport {
         MockEndpoint result = getMockEndpoint("mock:result");
         result.expectedMessageCount(2);
 
+        CountDownLatch latch1 = new CountDownLatch(1);
+        CountDownLatch latch2 = new CountDownLatch(1);
+
         // start some exchanges.
-        template.asyncSendBody("direct:start", 1000L);
+        template.asyncSendBody("direct:start", latch1);
         Thread.sleep(500);
-        template.asyncSendBody("direct:start", 1000L);
+        template.asyncSendBody("direct:start", latch2);
         Thread.sleep(100);
 
         inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
@@ -67,77 +73,32 @@ public class ManagedInflightStatisticsTest extends ManagementTestSupport {
         id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
         assertNotNull(id);
 
+        log.info("Oldest Exchange id: {}, duration: {}", id, ts);
+
+        // complete first exchange
+        latch1.countDown();
+
         // Lets wait for the first exchange to complete.
-        Thread.sleep(500);
+        Thread.sleep(200);
         Long ts2 = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
         assertNotNull(ts2);
         String id2 = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
         assertNotNull(id2);
 
+        log.info("Oldest Exchange id: {}, duration: {}", id2, ts2);
+
         // Lets verify the oldest changed.
         assertTrue(!id2.equals(id));
         // The duration values could be different
-        //assertTrue(ts2 > ts);
-
-        // Lets wait for all the exchanges to complete.
-        Thread.sleep(500);
-
-        assertMockEndpointsSatisfied();
-
-        inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
-        assertEquals(0, inflight.longValue());
-        ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
-        assertNull(ts);
-        id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
-        assertNull(id);
-    }
-
-    public void testManageStatisticsFailed() throws Exception {
-        // JMX tests dont work well on AIX CI servers (hangs them)
-        if (isPlatform("aix")) {
-            return;
-        }
-
-        // get the stats for the route
-        MBeanServer mbeanServer = getMBeanServer();
+        assertTrue(!Objects.equals(ts2, ts));
 
-        Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
-        assertEquals(1, set.size());
-        ObjectName on = set.iterator().next();
+        latch2.countDown();
 
-        Long inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
-        assertEquals(0, inflight.longValue());
-        Long ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
-        assertNull(ts);
-        String id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
-        assertNull(id);
-
-        MockEndpoint result = getMockEndpoint("mock:result");
-        result.expectedMessageCount(1);
-
-        // start some exchanges.
-        template.asyncSendBody("direct:start", 1000L);
+        // Lets wait for all the exchanges to complete.
         Thread.sleep(500);
-        try {
-            template.sendBody("direct:start", "Kaboom");
-            fail("Should have thrown exception");
-        } catch (Exception e) {
-            // expected
-        }
-
-        inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
-        assertEquals(1, inflight.longValue());
-
-        ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
-        assertNotNull(ts);
-        id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
-        assertNotNull(id);
 
         assertMockEndpointsSatisfied();
 
-        // Lets wait for all the exchanges to complete.
-        Thread.sleep(500);
-
         inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
         assertEquals(0, inflight.longValue());
         ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
@@ -155,13 +116,8 @@ public class ManagedInflightStatisticsTest extends ManagementTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
-                                String body = exchange.getIn().getBody(String.class);
-                                if ("Kaboom".equals(body)) {
-                                    throw new IllegalArgumentException("Forced");
-                                }
-
-                                Long delay = (Long) exchange.getIn().getBody();
-                                Thread.sleep(delay.longValue());
+                                CountDownLatch latch = (CountDownLatch) exchange.getIn().getBody();
+                                latch.await(10, TimeUnit.SECONDS);
                             }
                         })
                         .to("mock:result").id("mock");


[2/8] camel git commit: CAMEL-11353: Optimise - JMX Statistic split into specialized classes

Posted by da...@apache.org.
CAMEL-11353: Optimise - JMX Statistic split into specialized classes


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8bf8cd1c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8bf8cd1c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8bf8cd1c

Branch: refs/heads/master
Commit: 8bf8cd1c4b059b63101616adee2fbc2407181e57
Parents: 3081eda
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 18:37:51 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 19:01:18 2017 +0200

----------------------------------------------------------------------
 .../mbean/ManagedPerformanceCounter.java         | 11 +++++++----
 .../apache/camel/management/mbean/Statistic.java | 12 ++++++++----
 .../camel/management/mbean/StatisticCounter.java |  5 +++--
 .../camel/management/mbean/StatisticDelta.java   |  6 ++++++
 .../camel/management/mbean/StatisticMaximum.java | 19 ++++++++++++-------
 .../camel/management/mbean/StatisticMinimum.java | 19 ++++++++++++-------
 .../camel/management/mbean/StatisticValue.java   |  4 ++--
 7 files changed, 50 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index 2ac6214..d12e6eb 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -217,7 +217,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
         deltaProcessingTime.updateValue(time);
 
         long now = new Date().getTime();
-        if (firstExchangeCompletedTimestamp.getUpdateCount() == 0) {
+        if (!firstExchangeCompletedTimestamp.isUpdated()) {
             firstExchangeCompletedTimestamp.updateValue(now);
         }
 
@@ -228,8 +228,11 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
         lastExchangeCompletedExchangeId = exchange.getExchangeId();
 
         // update mean
-        long count = exchangesCompleted.getUpdateCount();
-        long mean = count > 0 ? totalProcessingTime.getValue() / exchangesCompleted.getValue() : 0;
+        long mean = 0;
+        long completed = exchangesCompleted.getValue();
+        if (completed > 0) {
+            mean = totalProcessingTime.getValue() / completed;
+        }
         meanProcessingTime.updateValue(mean);
     }
 
@@ -247,7 +250,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
         }
 
         long now = new Date().getTime();
-        if (firstExchangeFailureTimestamp.getUpdateCount() == 0) {
+        if (!firstExchangeFailureTimestamp.isUpdated()) {
             firstExchangeFailureTimestamp.updateValue(now);
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
index 63dc8a5..ba91312 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
@@ -33,6 +33,9 @@ package org.apache.camel.management.mbean;
  * <li>MINIMUM - A statistic with this update mode is a value that represents the minimum value
  * amongst the update values applied to this statistic.</li>
  * <ul>
+ * The MAXIMUM and MINIMUM modes are not 100% thread-safe as there can be a lost-update problem.
+ * This is on purpose because the performance overhead to ensure atomic updates costs to much
+ * on CPU and memory footprint. The other modes are thread-safe.
  */
 public abstract class Statistic {
 
@@ -48,10 +51,11 @@ public abstract class Statistic {
 
     public abstract long getValue();
 
-    @Deprecated
-    public long getUpdateCount() {
-        return 0;
-    }
+    /**
+     * Whether the statistic has been updated one or more times.
+     * Notice this is only working for value, maximum and minimum modes.
+     */
+    public abstract boolean isUpdated();
 
     public abstract void reset();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
index d947e6b..814aa51 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
@@ -40,7 +40,8 @@ public class StatisticCounter extends Statistic {
     }
 
     @Override
-    public long getUpdateCount() {
-        return value.get();
+    public boolean isUpdated() {
+        // this is okay
+        return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
index b288972..6038106 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
@@ -37,6 +37,12 @@ public class StatisticDelta extends Statistic {
         return "" + value.get();
     }
 
+    @Override
+    public boolean isUpdated() {
+        // this is okay
+        return true;
+    }
+
     public void reset() {
         value.set(0);
         lastValue.set(0);

http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
index d403370..6649b9a 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
@@ -23,13 +23,13 @@ public class StatisticMaximum extends Statistic {
     private final AtomicLong value = new AtomicLong(-1);
 
     public void updateValue(long newValue) {
-        value.updateAndGet(value -> {
-            if (value == -1 || value < newValue) {
-                return newValue;
-            } else {
-                return value;
-            }
-        });
+        // its okay its not 100% thread safe (these jmx counters are not guaranteed to be accurate for min/max values)
+        // if we use the atomic operation updateAndGet then the JVM creates a new lambda per call which creates a new object
+        // in the JVM and causes higher memory footprint
+        long current = value.get();
+        if (current == -1 || current < newValue) {
+            value.set(newValue);
+        }
     }
 
     public long getValue() {
@@ -38,6 +38,11 @@ public class StatisticMaximum extends Statistic {
     }
 
     @Override
+    public boolean isUpdated() {
+        return value.get() != -1;
+    }
+
+    @Override
     public String toString() {
         return "" + value.get();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
index 55b5a54..0beccbc 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
@@ -23,13 +23,13 @@ public class StatisticMinimum extends Statistic {
     private final AtomicLong value = new AtomicLong(-1);
 
     public void updateValue(long newValue) {
-        value.updateAndGet(value -> {
-            if (value == -1 || value > newValue) {
-                return newValue;
-            } else {
-                return value;
-            }
-        });
+        // its okay its not 100% thread safe (these jmx counters are not guaranteed to be accurate for min/max values)
+        // if we use the atomic operation updateAndGet then the JVM creates a new lambda per call which creates a new object
+        // in the JVM and causes higher memory footprint
+        long current = value.get();
+        if (current == -1 || current > newValue) {
+            value.set(newValue);
+        }
     }
 
     public long getValue() {
@@ -38,6 +38,11 @@ public class StatisticMinimum extends Statistic {
     }
 
     @Override
+    public boolean isUpdated() {
+        return value.get() != -1;
+    }
+
+    @Override
     public String toString() {
         return "" + value.get();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
index 6391799..9cb7b48 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
@@ -36,8 +36,8 @@ public class StatisticValue extends Statistic {
     }
 
     @Override
-    public long getUpdateCount() {
-        return value.get() == -1 ? 0 : 1;
+    public boolean isUpdated() {
+        return value.get() != -1;
     }
 
     public void reset() {


[7/8] camel git commit: Typo

Posted by da...@apache.org.
Typo


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cff0fc0f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cff0fc0f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cff0fc0f

Branch: refs/heads/master
Commit: cff0fc0f049b1a572dd2c4bdc4a280390b45e8ed
Parents: e6bc397
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 21:00:05 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 21:00:05 2017 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/camel/processor/DeadLetterChannel.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/cff0fc0f/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java b/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
index a49bb1d..a7e5722 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
@@ -73,7 +73,7 @@ public class DeadLetterChannel extends RedeliveryErrorHandler {
 
     @Override
     protected boolean isRunAllowedOnPreparingShutdown() {
-        // allow tu run as we want to move the message eto DLC, instead of rejecting the message
+        // allow to run as we want to move the message eto DLC, instead of rejecting the message
         return true;
     }
 


[3/8] camel git commit: CAMEL-11353: Optimise - small

Posted by da...@apache.org.
CAMEL-11353: Optimise - small


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4a3debee
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4a3debee
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4a3debee

Branch: refs/heads/master
Commit: 4a3debee1d8944cf8ad693cafb7e7137593bcc88
Parents: 8bf8cd1
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 19:20:08 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 19:20:08 2017 +0200

----------------------------------------------------------------------
 .../camel/management/mbean/ManagedCounter.java  | 20 ++++++++------------
 .../mbean/ManagedPerformanceCounter.java        |  8 ++++----
 2 files changed, 12 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4a3debee/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
index 5605ae2..562c951 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
@@ -25,31 +25,27 @@ import org.apache.camel.spi.ManagementStrategy;
 @ManagedResource(description = "Managed Counter")
 public abstract class ManagedCounter implements ManagedCounterMBean {
     protected Statistic exchangesTotal;
-    protected Statistic startTimestamp;
-    protected Statistic resetTimestamp;
+    protected Date startTimestamp;
+    protected Date resetTimestamp;
 
     public void init(ManagementStrategy strategy) {
         this.exchangesTotal = new StatisticCounter();
-        this.startTimestamp = new StatisticValue();
-        this.resetTimestamp = new StatisticValue();
-        long now = new Date().getTime();
-        startTimestamp.updateValue(now);
-        resetTimestamp.updateValue(now);
+        Date now = new Date();
+        startTimestamp = now;
+        resetTimestamp = now;
     }
 
     public void reset() {
         exchangesTotal.reset();
-        resetTimestamp.updateValue(new Date().getTime());
+        resetTimestamp = new Date();
     }
 
     public Date getStartTimestamp() {
-        long value = startTimestamp.getValue();
-        return value > 0 ? new Date(value) : null;
+        return startTimestamp;
     }
 
     public Date getResetTimestamp() {
-        long value = resetTimestamp.getValue();
-        return value > 0 ? new Date(value) : null;
+        return resetTimestamp;
     }
 
     public long getExchangesTotal() throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/4a3debee/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index d12e6eb..b234a64 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -216,7 +216,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
         lastProcessingTime.updateValue(time);
         deltaProcessingTime.updateValue(time);
 
-        long now = new Date().getTime();
+        long now = System.currentTimeMillis();
         if (!firstExchangeCompletedTimestamp.isUpdated()) {
             firstExchangeCompletedTimestamp.updateValue(now);
         }
@@ -249,7 +249,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
             externalRedeliveries.increment();
         }
 
-        long now = new Date().getTime();
+        long now = System.currentTimeMillis();
         if (!firstExchangeFailureTimestamp.isUpdated()) {
             firstExchangeFailureTimestamp.updateValue(now);
         }
@@ -277,8 +277,8 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
         sb.append(String.format(" meanProcessingTime=\"%s\"", meanProcessingTime.getValue()));
 
         if (fullStats) {
-            sb.append(String.format(" startTimestamp=\"%s\"", dateAsString(startTimestamp.getValue())));
-            sb.append(String.format(" resetTimestamp=\"%s\"", dateAsString(resetTimestamp.getValue())));
+            sb.append(String.format(" startTimestamp=\"%s\"", dateAsString(startTimestamp.getTime())));
+            sb.append(String.format(" resetTimestamp=\"%s\"", dateAsString(resetTimestamp.getTime())));
             sb.append(String.format(" firstExchangeCompletedTimestamp=\"%s\"", dateAsString(firstExchangeCompletedTimestamp.getValue())));
             sb.append(String.format(" firstExchangeCompletedExchangeId=\"%s\"", nullSafe(firstExchangeCompletedExchangeId)));
             sb.append(String.format(" firstExchangeFailureTimestamp=\"%s\"", dateAsString(firstExchangeFailureTimestamp.getValue())));