emitskevich-blp commented on code in PR #15889:
URL: https://github.com/apache/kafka/pull/15889#discussion_r1610393654
##########
clients/src/main/java/org/apache/kafka/common/metrics/stats/Rate.java:
##########
@@ -72,29 +67,12 @@ public long windowSize(MetricConfig config, long now) {
stat.purgeObsoleteSamples(config, now);
/*
- * Here we check the total amount of time elapsed since the oldest
non-obsolete window.
- * This give the total windowSize of the batch which is the time used
for Rate computation.
- * However, there is an issue if we do not have sufficient data for
e.g. if only 1 second has elapsed in a 30 second
- * window, the measured rate will be very high.
- * Hence we assume that the elapsed time is always N-1 complete
windows plus whatever fraction of the final window is complete.
- *
- * Note that we could simply count the amount of time elapsed in the
current window and add n-1 windows to get the total time,
- * but this approach does not account for sleeps. SampledStat only
creates samples whenever record is called,
- * if no record is called for a period of time that time is not
accounted for in windowSize and produces incorrect results.
+ * Purging process above guarantees to keep all events starting from
+ * earliest(monitoredWindow start, oldestSample start). Use the
largest as windowSize.
*/
- long totalElapsedTimeMs = now - stat.oldest(now).lastWindowMs;
- // Check how many full windows of data we have currently retained
- int numFullWindows = (int) (totalElapsedTimeMs /
config.timeWindowMs());
- int minFullWindows = config.samples() - 1;
-
- // If the available windows are less than the minimum required, add
the difference to the totalElapsedTime
- if (numFullWindows < minFullWindows)
- totalElapsedTimeMs += (minFullWindows - numFullWindows) *
config.timeWindowMs();
-
- // If window size is being calculated at the exact beginning of the
window with no prior samples, the window size
- // will result in a value of 0. Calculation of rate over a window is
size 0 is undefined, hence, we assume the
- // minimum window size to be at least 1ms.
- return Math.max(totalElapsedTimeMs, 1);
+ long monitoredWindow = config.timeWindowMs() * config.samples();
Review Comment:
@junrao looks like it is outdated state... I made several commits today and
this line is no more in HEAD. Is there any chance you commented on intermediate
state? Sorry for a little mess around commits here.
--
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]