Skip to content

Commit d0c40e0

Browse files
glmappercaojie09
authored andcommitted
Fix concurrency issue.
1 parent 71e66dd commit d0c40e0

File tree

13 files changed

+315
-235
lines changed

13 files changed

+315
-235
lines changed

sofa-dashboard-backend/sofa-dashboard-core/src/main/java/com/alipay/sofa/dashboard/constants/SofaDashboardConstants.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,15 @@ public class SofaDashboardConstants {
5757
public static final String Q_MARK = "?";
5858
public static final String SEMICOLON = ";";
5959
public static final String HORIZONTAL = "-";
60-
61-
public static final String DATA_ID_SEPARATOR = "#@#";
6260
public static final String REGISTRY_DATA_ID_KEY = "dataId";
6361
public static final String REGISTRY_IP_KEY = "ipAddress";
6462
public static final String PORT = "port";
6563
public static final String REGISTRY_SOURCE_ADDRESS_KEY = "sourceAddress";
6664
public static final String REGISTRY_PROCESS_ID_KEY = "processId";
6765
public static final String REGISTRY_ATTRIBUTES = "attributes";
6866
public static final String REGISTRY_TYPE = "registry.type";
69-
public static final String EMPTY = "";
67+
public static final String KEY = "com.alipay.sofa.dashboard.registry";
68+
public static final String ZOOKEEPER_PREFIX = "zookeeper://";
69+
public static final String SOFA_PREFIX = "sofa://";
70+
7071
}

sofa-dashboard-backend/sofa-dashboard-governance/src/main/java/com/alipay/sofa/dashboard/cache/RegistryDataCache.java

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
import com.alipay.sofa.dashboard.domain.RpcConsumer;
2020
import com.alipay.sofa.dashboard.domain.RpcProvider;
2121
import com.alipay.sofa.dashboard.domain.RpcService;
22-
22+
import java.util.ArrayList;
23+
import java.util.HashMap;
2324
import java.util.List;
2425
import java.util.Map;
2526

@@ -35,90 +36,104 @@ public interface RegistryDataCache {
3536
* @param serviceName 服务名
3637
* @param providerList provider 列表
3738
*/
38-
void addProviders(String serviceName, List<RpcProvider> providerList);
39+
default void addProviders(String serviceName, List<RpcProvider> providerList) {
40+
}
3941

4042
/**
4143
* 添加 consumers
4244
*
4345
* @param serviceName 服务名
4446
* @param consumerList consumer 列表
4547
*/
46-
void addConsumers(String serviceName, List<RpcConsumer> consumerList);
48+
default void addConsumers(String serviceName, List<RpcConsumer> consumerList) {
49+
}
4750

4851
/**
4952
* 移除 providers
5053
*
5154
* @param serviceName 服务名
5255
* @param providerList provider 列表
5356
*/
54-
void removeProviders(String serviceName, List<RpcProvider> providerList);
57+
default void removeProviders(String serviceName, List<RpcProvider> providerList) {
58+
}
5559

5660
/**
5761
* 移除 consumers
5862
*
5963
* @param serviceName 服务名
6064
* @param consumerList consumer 列表
6165
*/
62-
void removeConsumers(String serviceName, List<RpcConsumer> consumerList);
66+
default void removeConsumers(String serviceName, List<RpcConsumer> consumerList) {
67+
}
6368

6469
/**
6570
* 更新 providers
6671
*
6772
* @param serviceName 服务名
6873
* @param providerList provider 列表
6974
*/
70-
void updateProviders(String serviceName, List<RpcProvider> providerList);
75+
default void updateProviders(String serviceName, List<RpcProvider> providerList) {
76+
}
7177

7278
/**
7379
* 更新 consumers
7480
*
7581
* @param serviceName 服务名
7682
* @param consumerList consumer 列表
7783
*/
78-
void updateConsumers(String serviceName, List<RpcConsumer> consumerList);
84+
default void updateConsumers(String serviceName, List<RpcConsumer> consumerList) {
85+
}
7986

8087
/**
8188
* 添加 RpcService
8289
*
8390
* @param providerList provider 列表
8491
*/
85-
void addService(List<RpcService> providerList);
92+
default void addService(List<RpcService> providerList) {
93+
}
8694

8795
/**
8896
* 移除 RpcService
8997
*
9098
* @param rpcServices services 列表
9199
*/
92-
void removeService(List<RpcService> rpcServices);
100+
default void removeService(List<RpcService> rpcServices) {
101+
}
93102

94103
/**
95104
* 更新 RpcService
96105
*
97106
* @param rpcService
98107
*/
99-
void updateService(RpcService rpcService);
108+
default void updateService(RpcService rpcService) {
109+
}
100110

101111
/**
102112
* 获取 RpcService
103113
*
104114
* @return
105115
*/
106-
Map<String, RpcService> fetchService();
116+
default Map<String, RpcService> fetchService() {
117+
return new HashMap<>();
118+
}
107119

108120
/**
109121
* 获取 Providers
110122
*
111123
* @param serviceName 服务名
112124
* @return
113125
*/
114-
List<RpcProvider> fetchProvidersByService(String serviceName);
126+
default List<RpcProvider> fetchProvidersByService(String serviceName) {
127+
return new ArrayList<>();
128+
}
115129

116130
/**
117131
* 获取 Consumers
118132
*
119133
* @param serviceName 服务名
120134
* @return
121135
*/
122-
List<RpcConsumer> fetchConsumersByService(String serviceName);
123-
136+
default List<RpcConsumer> fetchConsumersByService(String serviceName) {
137+
return new ArrayList<>();
138+
}
124139
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.alipay.sofa.dashboard.cache;
18+
19+
import com.alipay.sofa.dashboard.domain.RpcConsumer;
20+
import com.alipay.sofa.dashboard.domain.RpcProvider;
21+
import com.alipay.sofa.dashboard.domain.RpcService;
22+
import com.alipay.sofa.rpc.common.utils.StringUtils;
23+
import java.util.ArrayList;
24+
import java.util.List;
25+
import java.util.Map;
26+
import java.util.concurrent.ConcurrentHashMap;
27+
28+
/**
29+
* @author: guolei.sgl (guolei.sgl@antfin.com) 2019/5/23 10:52 AM
30+
* @since:
31+
**/
32+
public class SofaRegistryDataCacheImpl implements RegistryDataCache {
33+
34+
private Map<String, RpcService> serviceMap = new ConcurrentHashMap<>();
35+
private Map<String, List<RpcConsumer>> consumerMap = new ConcurrentHashMap<>();
36+
private Map<String, List<RpcProvider>> providerMap = new ConcurrentHashMap<>();
37+
38+
@Override
39+
public Map<String, RpcService> fetchService() {
40+
return serviceMap;
41+
}
42+
43+
@Override
44+
public List<RpcProvider> fetchProvidersByService(String serviceName) {
45+
List<RpcProvider> result = null;
46+
if (StringUtils.isNotBlank(serviceName)) {
47+
result = providerMap.get(serviceName);
48+
}
49+
if (result == null) {
50+
result = new ArrayList<>();
51+
}
52+
return result;
53+
}
54+
55+
@Override
56+
public List<RpcConsumer> fetchConsumersByService(String serviceName) {
57+
List<RpcConsumer> result = null;
58+
if (StringUtils.isNotBlank(serviceName)) {
59+
result = consumerMap.get(serviceName);
60+
}
61+
if (result == null) {
62+
result = new ArrayList<>();
63+
}
64+
return result;
65+
}
66+
67+
@Override
68+
public void addProviders(String serviceName, List<RpcProvider> providerList) {
69+
if (StringUtils.isNotBlank(serviceName) && providerList != null) {
70+
providerMap.put(serviceName, providerList);
71+
}
72+
}
73+
74+
@Override
75+
public void addConsumers(String serviceName, List<RpcConsumer> consumerList) {
76+
if (StringUtils.isNotBlank(serviceName) && consumerList != null) {
77+
consumerMap.put(serviceName, consumerList);
78+
}
79+
}
80+
81+
@Override
82+
public void addService(List<RpcService> rpcServices) {
83+
for (RpcService rpcService : rpcServices) {
84+
serviceMap.put(rpcService.getServiceName(), rpcService);
85+
}
86+
}
87+
}
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import com.alipay.sofa.rpc.common.utils.StringUtils;
2424
import org.slf4j.Logger;
2525
import org.slf4j.LoggerFactory;
26-
import org.springframework.stereotype.Service;
27-
import javax.annotation.concurrent.NotThreadSafe;
2826
import java.util.ArrayList;
2927
import java.util.List;
3028
import java.util.Map;
@@ -34,12 +32,10 @@
3432
* @author bystander
3533
* @version $Id: RegistryDataCache.java, v 0.1 2018年12月10日 23:57 bystander Exp $
3634
*/
37-
@Service
38-
@NotThreadSafe
39-
public class RegistryDataCacheImpl implements RegistryDataCache {
35+
public class ZookeeperRegistryDataCacheImpl implements RegistryDataCache {
4036

4137
private static final Logger LOGGER = LoggerFactory
42-
.getLogger(RegistryDataCacheImpl.class);
38+
.getLogger(ZookeeperRegistryDataCacheImpl.class);
4339

4440
private Map<String, RpcService> services = new ConcurrentHashMap<>();
4541

sofa-dashboard-backend/sofa-dashboard-governance/src/main/java/com/alipay/sofa/dashboard/configuration/GovernanceConfiguration.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,23 @@
1616
*/
1717
package com.alipay.sofa.dashboard.configuration;
1818

19+
import com.alipay.sofa.dashboard.cache.RegistryDataCache;
20+
import com.alipay.sofa.dashboard.cache.SofaRegistryDataCacheImpl;
21+
import com.alipay.sofa.dashboard.cache.ZookeeperRegistryDataCacheImpl;
22+
import com.alipay.sofa.dashboard.constants.SofaDashboardConstants;
1923
import com.alipay.sofa.dashboard.listener.ApplicationStartedListener;
2024
import com.alipay.sofa.dashboard.registry.SofaAdminRegistry;
2125
import com.alipay.sofa.dashboard.registry.ZookeeperAdminRegistry;
2226
import com.alipay.sofa.dashboard.sync.RegistryDataSync;
2327
import com.alipay.sofa.dashboard.sync.SofaRegistryDataSync;
2428
import com.alipay.sofa.dashboard.sync.ZookeeperRegistryDataSync;
2529
import com.alipay.sofa.rpc.boot.config.SofaBootRpcConfigConstants;
30+
import org.springframework.beans.factory.annotation.Autowired;
2631
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2732
import org.springframework.context.annotation.Bean;
2833
import org.springframework.context.annotation.Configuration;
34+
import org.springframework.core.env.Environment;
2935
import org.springframework.web.client.RestTemplate;
30-
3136
import java.util.HashMap;
3237
import java.util.Map;
3338

@@ -38,6 +43,9 @@
3843
@Configuration
3944
public class GovernanceConfiguration {
4045

46+
@Autowired
47+
private Environment environment;
48+
4149
@Bean(name = "registrySyncMap")
4250
public Map<String, RegistryDataSync> configureRegistrySyncMap() {
4351
Map<String, RegistryDataSync> map = new HashMap<>();
@@ -76,4 +84,14 @@ public SofaRegistryDataSync sofaRegistryDataSync() {
7684
public RestTemplate restTemplate() {
7785
return new RestTemplate();
7886
}
87+
88+
@Bean
89+
public RegistryDataCache registryDataCache() {
90+
if (environment.getProperty(SofaDashboardConstants.KEY).contains(
91+
SofaDashboardConstants.SOFA_PREFIX)) {
92+
return new SofaRegistryDataCacheImpl();
93+
} else {
94+
return new ZookeeperRegistryDataCacheImpl();
95+
}
96+
}
7997
}

sofa-dashboard-backend/sofa-dashboard-governance/src/main/java/com/alipay/sofa/dashboard/listener/ApplicationStartedListener.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.springframework.core.env.Environment;
3232
import org.springframework.core.env.MapPropertySource;
3333
import org.springframework.core.env.PropertySource;
34-
3534
import java.util.HashMap;
3635
import java.util.Map;
3736

@@ -40,9 +39,6 @@
4039
* @version $Id: ApplicationStartedListener.java, v 0.1 2018年12月11日 17:15 bystander Exp $
4140
*/
4241
public class ApplicationStartedListener implements ApplicationListener {
43-
private static final String KEY = "com.alipay.sofa.dashboard.registry";
44-
private static final String ZOOKEEPER_PREFIX = "zookeeper://";
45-
private static final String SOFA_PREFIX = "sofa://";
4642

4743
@Autowired
4844
private RegistryDataSyncManager registryDataSyncManager;
@@ -53,14 +49,15 @@ public class ApplicationStartedListener implements ApplicationListener {
5349
@Override
5450
public void onApplicationEvent(ApplicationEvent event) {
5551
if (event instanceof ContextRefreshedEvent) {
56-
String address = environment.getProperty(KEY);
52+
String address = environment.getProperty(SofaDashboardConstants.KEY);
5753
if (StringUtils.isNotBlank(address)) {
5854
RegistryConfig registryConfig = new RegistryConfig();
59-
if (address.startsWith(ZOOKEEPER_PREFIX)) {
55+
if (address.startsWith(SofaDashboardConstants.ZOOKEEPER_PREFIX)) {
6056
RegistryConfigureProcessor processor = new ZookeeperConfigurator();
6157
registryConfig = processor.buildFromAddress(address);
62-
} else if (address.startsWith(SOFA_PREFIX)) {
63-
registryConfig.setAddress(address.substring(SOFA_PREFIX.length()));
58+
} else if (address.startsWith(SofaDashboardConstants.SOFA_PREFIX)) {
59+
registryConfig.setAddress(address.substring(SofaDashboardConstants.SOFA_PREFIX
60+
.length()));
6461
registryConfig.setProtocol(SofaBootRpcConfigConstants.DEFAULT_REGISTRY);
6562
// config registry type
6663
Map<String, Object> props = new HashMap<>();

0 commit comments

Comments
 (0)