in mqtt-common/src/main/java/org/apache/rocketmq/mqtt/common/util/StatUtil.java [192:227]
public static void addInvoke(String key, int num, long rt, boolean success) {
if (invokeCache.size() > MAX_KEY_NUM || secondInvokeCache.size() > MAX_KEY_NUM) {
return;
}
Invoke invoke = getAndSetInvoke(key);
if (invoke == null) {
return;
}
invoke.totalPv.getAndAdd(num);
if (!success) {
invoke.failPv.getAndAdd(num);
}
long now = nowSecond();
AtomicLong oldSecond = invoke.second;
if (oldSecond.get() == now) {
invoke.secondPv.getAndAdd(num);
} else {
if (oldSecond.compareAndSet(oldSecond.get(), now)) {
if (invoke.secondPv.get() > invoke.topSecondPv.get()) {
invoke.topSecondPv.set(invoke.secondPv.get());
}
invoke.secondPv.set(num);
} else {
invoke.secondPv.getAndAdd(num);
}
}
invoke.sumRt.addAndGet(rt);
if (invoke.maxRt.get() < rt) {
invoke.maxRt.set(rt);
}
if (invoke.minRt.get() > rt) {
invoke.minRt.set(rt);
}
}