Github user karanmehta93 commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/307#discussion_r192604269 --- Diff: src/java/main/org/apache/zookeeper/server/ServerStats.java --- @@ -148,9 +174,46 @@ synchronized public void resetRequestCounters(){ packetsReceived = 0; packetsSent = 0; } + synchronized public void resetNumRequestsAboveThresholdTime() { + numRequestsAboveThresholdTime = 0; + } synchronized public void reset() { resetLatency(); resetRequestCounters(); + resetNumRequestsAboveThresholdTime(); + } + + public void checkLatency(final ZooKeeperServer zks, Request request) { + long requestLatency = Time.currentElapsedTime() - request.createTime; + boolean enabledAndAboveThreshold = (requestWarnThresholdMs == 0) || + (requestWarnThresholdMs > -1 && requestLatency > requestWarnThresholdMs); + if (enabledAndAboveThreshold) { + zks.serverStats().incNumRequestsAboveThresholdTime(); + + // Try acquiring lock only if not waiting + boolean success = waitForLoggingWarnThresholdMsg.compareAndSet(Boolean.FALSE, Boolean.TRUE); + if (success) { + LOG.warn("Request {} exceeded threshold. Took {} ms", request, requestLatency); + startCount = zks.serverStats().getNumRequestsAboveThresholdTime(); + timer.schedule(new TimerTask() { + @Override + public void run() { + long count = zks.serverStats().getNumRequestsAboveThresholdTime() - startCount; --- End diff -- Okay. I got it now. Will update it to not log anything. The whole idea behind `ScheduledExecutorService` is that you can regularly output such metrics to any relevant reader.
---