Github user anmolnar commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/307#discussion_r191204931
--- 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;
+ LOG.warn("Number of requests that exceeded {} ms
in past {} ms: {}",
+ requestWarnThresholdMs,
delayTimeForLoggingWarnThresholdMsg, count);
+ waitForLoggingWarnThresholdMsg.set(Boolean.FALSE);
+ }
+ }, delayTimeForLoggingWarnThresholdMsg);
+ }
+ }
+ }
+
+ public void setDelayTimeForLoggingWarnThresholdMsg(int delay) {
+ this.delayTimeForLoggingWarnThresholdMsg = delay;
--- End diff --
Please make this method `package-private`.
Also it would be great to have a javadoc comment that the method is for
testing purposes only.
---