From a17b0afbfcd84d5bb63d0f7aa2ea450aadcf4649 Mon Sep 17 00:00:00 2001
From: Joe Zou <yixian.zou@gmail.com>
Date: Tue, 22 Sep 2020 11:41:25 +0800
Subject: [PATCH] Merge pull request #739 from
 skyao/improve/map-access-concurreny

Imp: Improve map access concurrency
---
 protocol/rpc_status.go | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/protocol/rpc_status.go b/protocol/rpc_status.go
index 60becfb34..978534ea8 100644
--- a/protocol/rpc_status.go
+++ b/protocol/rpc_status.go
@@ -98,7 +98,10 @@ func (rpc *RPCStatus) GetSuccessiveRequestFailureCount() int32 {
 
 // GetURLStatus get URL RPC status.
 func GetURLStatus(url common.URL) *RPCStatus {
-	rpcStatus, _ := serviceStatistic.LoadOrStore(url.Key(), &RPCStatus{})
+	rpcStatus, found := serviceStatistic.Load(url.Key())
+	if !found {
+		rpcStatus, _ = serviceStatistic.LoadOrStore(url.Key(), &RPCStatus{})
+	}
 	return rpcStatus.(*RPCStatus)
 }
 
@@ -107,15 +110,13 @@ func GetMethodStatus(url common.URL, methodName string) *RPCStatus {
 	identifier := url.Key()
 	methodMap, found := methodStatistics.Load(identifier)
 	if !found {
-		methodMap = &sync.Map{}
-		methodStatistics.Store(identifier, methodMap)
+		methodMap, _ = methodStatistics.LoadOrStore(identifier, &sync.Map{})
 	}
 
 	methodActive := methodMap.(*sync.Map)
 	rpcStatus, found := methodActive.Load(methodName)
 	if !found {
-		rpcStatus = &RPCStatus{}
-		methodActive.Store(methodName, rpcStatus)
+		rpcStatus, _ = methodActive.LoadOrStore(methodName, &RPCStatus{})
 	}
 
 	status := rpcStatus.(*RPCStatus)
-- 
GitLab