Skip to content

Commit 6e34ac4

Browse files
binbin0325yesAnd92
authored andcommitted
fix cacheData race (nacos-group#642)
1 parent 6646edf commit 6e34ac4

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

clients/config_client/config_client.go

+5-7
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,20 @@ import (
2424
"sync"
2525
"time"
2626

27-
"github.com/pkg/errors"
28-
29-
"github.com/nacos-group/nacos-sdk-go/v2/common/monitor"
30-
3127
"github.com/aliyun/alibaba-cloud-sdk-go/services/kms"
3228
"github.com/nacos-group/nacos-sdk-go/v2/clients/cache"
3329
"github.com/nacos-group/nacos-sdk-go/v2/clients/nacos_client"
3430
"github.com/nacos-group/nacos-sdk-go/v2/common/constant"
3531
"github.com/nacos-group/nacos-sdk-go/v2/common/logger"
32+
"github.com/nacos-group/nacos-sdk-go/v2/common/monitor"
3633
"github.com/nacos-group/nacos-sdk-go/v2/common/nacos_error"
3734
"github.com/nacos-group/nacos-sdk-go/v2/common/remote/rpc/rpc_request"
3835
"github.com/nacos-group/nacos-sdk-go/v2/common/remote/rpc/rpc_response"
3936
"github.com/nacos-group/nacos-sdk-go/v2/inner/uuid"
4037
"github.com/nacos-group/nacos-sdk-go/v2/model"
4138
"github.com/nacos-group/nacos-sdk-go/v2/util"
4239
"github.com/nacos-group/nacos-sdk-go/v2/vo"
40+
"github.com/pkg/errors"
4341
)
4442

4543
const (
@@ -84,6 +82,7 @@ type cacheDataListener struct {
8482

8583
func (cacheData *cacheData) executeListener() {
8684
cacheData.cacheDataListener.lastMd5 = cacheData.md5
85+
cacheData.configClient.cacheMap.Set(util.GetConfigCacheKey(cacheData.dataId, cacheData.group, cacheData.tenant), *cacheData)
8786

8887
decryptedContent, err := cacheData.configClient.decrypt(cacheData.dataId, cacheData.content)
8988
if err != nil {
@@ -505,9 +504,8 @@ func (client *ConfigClient) refreshContentAndCheck(cacheData cacheData, notify b
505504
}
506505
cacheData.md5 = util.Md5(cacheData.content)
507506
if cacheData.md5 != cacheData.cacheDataListener.lastMd5 {
508-
client.cacheMap.Set(util.GetConfigCacheKey(cacheData.dataId, cacheData.group, cacheData.tenant), cacheData)
509-
510-
cacheData.executeListener()
507+
cacheDataPtr := &cacheData
508+
cacheDataPtr.executeListener()
511509
}
512510
}
513511

example/config/main.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,18 @@ func main() {
111111

112112
time.Sleep(2 * time.Second)
113113

114-
//cancel config change
115-
err = client.CancelListenConfig(vo.ConfigParam{
114+
time.Sleep(1 * time.Second)
115+
_, err = client.DeleteConfig(vo.ConfigParam{
116116
DataId: "test-data",
117117
Group: "test-group",
118118
})
119-
120119
time.Sleep(1 * time.Second)
121-
_, err = client.DeleteConfig(vo.ConfigParam{
120+
121+
//cancel config change
122+
err = client.CancelListenConfig(vo.ConfigParam{
122123
DataId: "test-data",
123124
Group: "test-group",
124125
})
125-
time.Sleep(1 * time.Second)
126126

127127
searchPage, _ := client.SearchConfig(vo.SearchConfigParam{
128128
Search: "blur",

0 commit comments

Comments
 (0)