shishkovilja commented on code in PR #13661:
URL: https://github.com/apache/ignite/pull/13661#discussion_r4357226795


##########
modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java:
##########
@@ -853,4 +910,36 @@ public class ClientProcessorMXBeanImpl implements 
ClientProcessorMXBean {
             }
         }
     }
+
+    /** Maximum value over the time interval, but not less than the current 
value. */
+    private static class PeakWithCurrentMetric extends MaxValueMetric {
+        /** Upper limit of the value. */
+        private final long limit;
+
+        /** Current value supplier. */
+        private final LongSupplier cur;
+
+        /**
+         * @param name Name.
+         * @param desc Description.
+         * @param timeInterval Time interval in milliseconds.
+         * @param size Number of buckets.
+         * @param limit Upper limit of the value.
+         * @param cur Current value supplier.
+         */
+        PeakWithCurrentMetric(String name, String desc, long timeInterval, int 
size, long limit, LongSupplier cur) {
+            super(name, desc, timeInterval, size);
+
+            this.limit = limit;
+            this.cur = cur;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long value() {
+            long peak = super.value();
+
+            // The current value can not exceed the limit, so there is no need 
to calculate it.
+            return peak >= limit ? peak : Math.max(peak, cur.getAsLong());

Review Comment:
   ### Limit
   Limit is required currently because we should not re-calculate metric from 
sessions values:
   1. Limit <=0 - in this case compute taks are disabled for thin client. In 
fact,  `0` is the current value.
   2. Value >= limit - in this case no new tasks will be executed. In fact, 
`value` == `limit`.
   
   ### Current and zero
   > cur can be more than max only when metric is not updated more than time 
interval
   
   No, it can be such situation:
   1) Session 1 starts `Task1`, `Task2`
   2) Interval was exceeded
   3) `Task1`, `Task2` are still running, but metric is zero.
   4) Session 2 starts `Task3`
   5) Metric value will be updated to `1`, not `0`, so `value()` will not be 
re-calculated and we get incorrect value - `1` insead of `3`.
   ---
   However, I'll try to reduce re-calculations.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to