This is an automated email from the ASF dual-hosted git repository.

yaohaishi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new e351e6d  [SCB-1475] ServiceCombServerStats.getFailedRate and 
getSuccessRate  may arise an  exception of java.lang.ArithmeticException: / by 
zero under concurrency scenarios
e351e6d is described below

commit e351e6df66d93aace7d8187963d533efe1590d2b
Author: Liu Huaizhou <liuhuaizhou...@163.com>
AuthorDate: Mon Sep 2 16:53:24 2019 +0800

    [SCB-1475] ServiceCombServerStats.getFailedRate and getSuccessRate  may 
arise an  exception of java.lang.ArithmeticException: / by zero under 
concurrency scenarios
---
 .../servicecomb/loadbalance/ServiceCombServerStats.java    | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
index b41e2da..5c50c74 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ServiceCombServerStats.java
@@ -147,17 +147,19 @@ public class ServiceCombServerStats {
   }
 
   public int getSuccessRate() {
-    if (totalRequests.get() == 0L) {
-      return 0;
-    }
-    return (int) (successRequests.get() * 100 / totalRequests.get());
+    return calcRequestRate(successRequests);
   }
 
   public int getFailedRate() {
-    if (totalRequests.get() == 0L) {
+    return calcRequestRate(failedRequests);
+  }
+
+  private int calcRequestRate(AtomicLong requestCnt) {
+    long totalReqs = totalRequests.get();
+    if (totalReqs == 0L) {
       return 0;
     }
-    return (int) (failedRequests.get() * 100 / totalRequests.get());
+    return (int) (requestCnt.get() * 100 / totalReqs);
   }
 
   public boolean isIsolated() {

Reply via email to