This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new a5a0779f3 [discovery] Fix bug about discovery (#4792)
a5a0779f3 is described below
commit a5a0779f311a821f03dab5560d0c6440e089ff83
Author: 杨文杰 <[email protected]>
AuthorDate: Tue Jul 4 11:49:08 2023 +0800
[discovery] Fix bug about discovery (#4792)
* Integration module
* Integration module
* fix some bugs
* fix some bug
* fix some bugs
* fix some bugs
* fix some bugs
* fix some bugs
* fix some bugs
* fix some bugs
* fix some bugs
* fix some bugs
* fix some bug
* fix some bug
* fix some bugs
* fix some bug
* fix some bug
---
.../admin/config/DiscoveryConfiguration.java | 15 ++-
.../admin/controller/ProxySelectorController.java | 17 +++-
.../admin/discovery/DefaultDiscoveryProcessor.java | 111 ++++++++++++++++++---
.../DiscoveryDataChangedEventSyncListener.java | 91 ++++++++---------
.../DiscoveryDataInitializationRunner.java | 73 --------------
.../shenyu/admin/discovery/DiscoveryProcessor.java | 15 ++-
.../admin/discovery/LocalDiscoveryProcessor.java | 29 +++++-
.../parse/CustomDiscoveryUpstreamParser.java | 1 +
.../listener/AbstractDataChangedListener.java | 73 ++++++++++----
.../admin/mapper/DiscoveryHandlerMapper.java | 15 ++-
.../shenyu/admin/mapper/DiscoveryRelMapper.java | 12 +++
.../admin/mapper/DiscoveryUpstreamMapper.java | 22 +++-
.../shenyu/admin/mapper/ProxySelectorMapper.java | 7 ++
.../shenyu/admin/service/DiscoveryService.java | 7 +-
.../admin/service/DiscoveryUpstreamService.java | 8 ++
.../shenyu/admin/service/ProxySelectorService.java | 17 ++++
.../admin/service/impl/DiscoveryServiceImpl.java | 38 ++++++-
.../service/impl/DiscoveryUpstreamServiceImpl.java | 41 +++++++-
.../service/impl/ProxySelectorServiceImpl.java | 31 +++++-
.../admin/service/impl/SyncDataServiceImpl.java | 9 +-
.../shenyu/admin/transfer/DiscoveryTransfer.java | 53 +++++++++-
.../resources/mappers/discovery-handler-sqlmap.xml | 17 +++-
.../resources/mappers/discovery-rel-sqlmap.xml | 20 ++--
.../mappers/discovery-upstream-sqlmap.xml | 37 +++++--
.../resources/mappers/proxy-selector-sqlmap.xml | 17 +++-
.../admin/config/DataSyncConfigurationTest.java | 6 +-
.../listener/AbstractDataChangedListenerTest.java | 20 ++++
.../service/DiscoveryUpstreamServiceTest.java | 11 +-
.../shenyu/admin/service/SyncDataServiceTest.java | 9 ++
.../discovery/api/ShenyuDiscoveryService.java | 12 ++-
.../zookeeper/ZookeeperDiscoveryService.java | 45 ++++++---
31 files changed, 652 insertions(+), 227 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DiscoveryConfiguration.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DiscoveryConfiguration.java
index 378d82887..3c3041f99 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DiscoveryConfiguration.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/DiscoveryConfiguration.java
@@ -21,7 +21,9 @@ import
org.apache.shenyu.admin.discovery.DefaultDiscoveryProcessor;
import org.apache.shenyu.admin.discovery.DiscoveryProcessor;
import org.apache.shenyu.admin.discovery.DiscoveryProcessorHolder;
import org.apache.shenyu.admin.discovery.LocalDiscoveryProcessor;
+import org.apache.shenyu.admin.mapper.DiscoveryHandlerMapper;
import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
+import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -36,22 +38,27 @@ public class DiscoveryConfiguration {
* discoveryProcessor.
*
* @param discoveryUpstreamMapper discoveryUpstreamMapper
+ * @param discoveryHandlerMapper discoveryHandlerMapper
+ * @param proxySelectorMapper proxySelectorMapper
* @return DiscoveryProcessor
*/
@Bean("DefaultDiscoveryProcessor")
- public DiscoveryProcessor discoveryDefaultProcessor(final
DiscoveryUpstreamMapper discoveryUpstreamMapper) {
- return new DefaultDiscoveryProcessor(discoveryUpstreamMapper);
+ public DiscoveryProcessor discoveryDefaultProcessor(final
DiscoveryUpstreamMapper discoveryUpstreamMapper,
+ final
DiscoveryHandlerMapper discoveryHandlerMapper,
+ final
ProxySelectorMapper proxySelectorMapper) {
+ return new DefaultDiscoveryProcessor(discoveryUpstreamMapper,
discoveryHandlerMapper, proxySelectorMapper);
}
/**
* discoveryLocalProcessor.
*
* @param discoveryUpstreamMapper discoveryUpstreamMapper
+ * @param proxySelectorMapper proxySelectorMapper
* @return LocalDiscoveryProcessor
*/
@Bean("LocalDiscoveryProcessor")
- public DiscoveryProcessor discoveryLocalProcessor(final
DiscoveryUpstreamMapper discoveryUpstreamMapper) {
- return new LocalDiscoveryProcessor();
+ public DiscoveryProcessor discoveryLocalProcessor(final
DiscoveryUpstreamMapper discoveryUpstreamMapper, final ProxySelectorMapper
proxySelectorMapper) {
+ return new LocalDiscoveryProcessor(discoveryUpstreamMapper,
proxySelectorMapper);
}
/**
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
index 8b8042a15..0c07f098a 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ProxySelectorController.java
@@ -73,7 +73,7 @@ public class ProxySelectorController {
/**
* proxy selector add api.
*
- * @param id the id
+ * @param id the id
* @param proxySelectorAddDTO {@link ProxySelectorAddDTO}
* @return {@linkplain ShenyuAdminResult}
*/
@@ -108,4 +108,19 @@ public class ProxySelectorController {
return
ShenyuAdminResult.success(proxySelectorService.create(proxySelectorAddDTO),
null);
}
+
+
+ /**
+ * fetch data.
+ *
+ * @param discoveryHandlerId discoveryHandlerId
+ * @return {@linkplain ShenyuAdminResult}
+ */
+ @PutMapping("fetch/{discoveryHandlerId}")
+ public ShenyuAdminResult fetchData(@PathVariable("discoveryHandlerId")
final String discoveryHandlerId) {
+
+ proxySelectorService.fetchData(discoveryHandlerId);
+ return ShenyuAdminResult.success();
+ }
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DefaultDiscoveryProcessor.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DefaultDiscoveryProcessor.java
index 362e133ed..9bbeb4f92 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DefaultDiscoveryProcessor.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DefaultDiscoveryProcessor.java
@@ -21,15 +21,23 @@ import org.apache.commons.lang3.NotImplementedException;
import org.apache.commons.lang3.StringUtils;
import org.apache.shenyu.admin.discovery.parse.CustomDiscoveryUpstreamParser;
import org.apache.shenyu.admin.listener.DataChangedEvent;
+import org.apache.shenyu.admin.mapper.DiscoveryHandlerMapper;
import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
+import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
import org.apache.shenyu.admin.model.dto.DiscoveryHandlerDTO;
import org.apache.shenyu.admin.model.dto.DiscoveryUpstreamDTO;
import org.apache.shenyu.admin.model.dto.ProxySelectorDTO;
import org.apache.shenyu.admin.model.entity.DiscoveryDO;
+import org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO;
+import org.apache.shenyu.admin.model.entity.DiscoveryUpstreamDO;
+import org.apache.shenyu.admin.model.entity.ProxySelectorDO;
import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
+import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
+import org.apache.shenyu.common.dto.DiscoverySyncData;
import org.apache.shenyu.common.enums.ConfigGroupEnum;
import org.apache.shenyu.common.enums.DataEventTypeEnum;
import org.apache.shenyu.common.utils.GsonUtils;
+import org.apache.shenyu.common.utils.UUIDUtils;
import org.apache.shenyu.discovery.api.ShenyuDiscoveryService;
import org.apache.shenyu.discovery.api.config.DiscoveryConfig;
import org.apache.shenyu.discovery.api.listener.DataChangedEventListener;
@@ -39,11 +47,16 @@ import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
+import java.sql.Timestamp;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
/**
* DefaultDiscoveryProcessor.
@@ -56,19 +69,29 @@ public class DefaultDiscoveryProcessor implements
DiscoveryProcessor, Applicatio
private final Map<String, ShenyuDiscoveryService> discoveryServiceCache;
+ private final Map<String, Set<String>> dataChangedEventListenerCache;
+
private ApplicationEventPublisher eventPublisher;
private final DiscoveryUpstreamMapper discoveryUpstreamMapper;
+ private final DiscoveryHandlerMapper discoveryHandlerMapper;
+
+ private final ProxySelectorMapper proxySelectorMapper;
/**
* DefaultDiscoveryProcessor.
*
* @param discoveryUpstreamMapper discoveryUpstreamMapper
*/
- public DefaultDiscoveryProcessor(final DiscoveryUpstreamMapper
discoveryUpstreamMapper) {
+ public DefaultDiscoveryProcessor(final DiscoveryUpstreamMapper
discoveryUpstreamMapper,
+ final DiscoveryHandlerMapper
discoveryHandlerMapper,
+ final ProxySelectorMapper
proxySelectorMapper) {
this.discoveryUpstreamMapper = discoveryUpstreamMapper;
this.discoveryServiceCache = new ConcurrentHashMap<>();
+ this.discoveryHandlerMapper = discoveryHandlerMapper;
+ this.dataChangedEventListenerCache = new ConcurrentHashMap<>();
+ this.proxySelectorMapper = proxySelectorMapper;
}
@Override
@@ -84,21 +107,28 @@ public class DefaultDiscoveryProcessor implements
DiscoveryProcessor, Applicatio
discoveryConfig.setServerList(discoveryDO.getServerList());
discoveryService.init(discoveryConfig);
discoveryServiceCache.put(discoveryDO.getId(), discoveryService);
+ dataChangedEventListenerCache.put(discoveryDO.getId(), new
HashSet<>());
}
@Override
public void createProxySelector(final DiscoveryHandlerDTO
discoveryHandlerDTO, final ProxySelectorDTO proxySelectorDTO) {
ShenyuDiscoveryService shenyuDiscoveryService =
discoveryServiceCache.get(discoveryHandlerDTO.getDiscoveryId());
+ String key =
buildProxySelectorKey(discoveryHandlerDTO.getListenerNode());
if (Objects.isNull(shenyuDiscoveryService)) {
LOG.warn("before start ProxySelector you need init
DiscoveryId={}", discoveryHandlerDTO.getDiscoveryId());
return;
}
- String key = buildProxySelectorKey(discoveryHandlerDTO);
- if (StringUtils.isEmpty(shenyuDiscoveryService.getData(key))) {
- LOG.info("shenyu discovery {} is empty need register it ", key);
- shenyuDiscoveryService.register(key,
GsonUtils.getInstance().toJson(discoveryHandlerDTO) + "|" +
GsonUtils.getInstance().toJson(proxySelectorDTO));
+ if (!shenyuDiscoveryService.exits(key)) {
+ LOG.warn("shenyu discovery start watcher need you has this key {}
in Discovery", key);
+ return;
}
- shenyuDiscoveryService.watcher(key,
getDiscoveryDataChangedEventListener(proxySelectorDTO.getType(),
discoveryHandlerDTO.getProps()));
+ Set<String> cacheKey =
dataChangedEventListenerCache.get(discoveryHandlerDTO.getDiscoveryId());
+ if (Objects.nonNull(cacheKey) && cacheKey.contains(key)) {
+ LOG.warn("shenyu discovery has watcher key {} ", key);
+ return;
+ }
+ shenyuDiscoveryService.watcher(key,
getDiscoveryDataChangedEventListener(discoveryHandlerDTO, proxySelectorDTO));
+ cacheKey.add(key);
DataChangedEvent dataChangedEvent = new
DataChangedEvent(ConfigGroupEnum.PROXY_SELECTOR, DataEventTypeEnum.CREATE,
Collections.singletonList(DiscoveryTransfer.INSTANCE.mapToData(proxySelectorDTO)));
eventPublisher.publishEvent(dataChangedEvent);
@@ -123,7 +153,7 @@ public class DefaultDiscoveryProcessor implements
DiscoveryProcessor, Applicatio
@Override
public void removeProxySelector(final DiscoveryHandlerDTO
discoveryHandlerDTO, final ProxySelectorDTO proxySelectorDTO) {
ShenyuDiscoveryService shenyuDiscoveryService =
discoveryServiceCache.get(discoveryHandlerDTO.getDiscoveryId());
- String key = buildProxySelectorKey(discoveryHandlerDTO);
+ String key =
buildProxySelectorKey(discoveryHandlerDTO.getListenerNode());
shenyuDiscoveryService.unWatcher(key);
DataChangedEvent dataChangedEvent = new
DataChangedEvent(ConfigGroupEnum.PROXY_SELECTOR, DataEventTypeEnum.DELETE,
Collections.singletonList(DiscoveryTransfer.INSTANCE.mapToData(proxySelectorDTO)));
@@ -131,35 +161,84 @@ public class DefaultDiscoveryProcessor implements
DiscoveryProcessor, Applicatio
}
@Override
- public void changeUpstream(final DiscoveryHandlerDTO discoveryHandlerDTO,
final ProxySelectorDTO proxySelectorDTO, final List<DiscoveryUpstreamDTO>
upstreamDTOS) {
+ public void changeUpstream(final ProxySelectorDTO proxySelectorDTO, final
List<DiscoveryUpstreamDTO> upstreamDTOS) {
throw new NotImplementedException("shenyu discovery local mode do
nothing in changeUpstream");
}
+ @Override
+ public void fetchAll(final String discoveryHandlerId) {
+ DiscoveryHandlerDO discoveryHandlerDO =
discoveryHandlerMapper.selectById(discoveryHandlerId);
+ String discoveryId = discoveryHandlerDO.getDiscoveryId();
+ if (discoveryServiceCache.containsKey(discoveryId)) {
+ ShenyuDiscoveryService shenyuDiscoveryService =
discoveryServiceCache.get(discoveryId);
+ List<String> childData =
shenyuDiscoveryService.getRegisterData(buildProxySelectorKey(discoveryHandlerDO.getListenerNode()));
+ List<DiscoveryUpstreamData> discoveryUpstreamDataList =
childData.stream().map(s -> GsonUtils.getGson().fromJson(s,
DiscoveryUpstreamData.class))
+ .collect(Collectors.toList());
+ Set<String> urlList =
discoveryUpstreamDataList.stream().map(DiscoveryUpstreamData::getUrl).collect(Collectors.toSet());
+ List<DiscoveryUpstreamDO> discoveryUpstreamDOS =
discoveryUpstreamMapper.selectByDiscoveryHandlerId(discoveryHandlerId);
+ Set<String> dbUrlList =
discoveryUpstreamDOS.stream().map(DiscoveryUpstreamDO::getUrl).collect(Collectors.toSet());
+ List<String> deleteIds = new ArrayList<>();
+ for (DiscoveryUpstreamDO discoveryUpstreamDO :
discoveryUpstreamDOS) {
+ if (!urlList.contains(discoveryUpstreamDO.getUrl())) {
+ deleteIds.add(discoveryUpstreamDO.getId());
+ }
+ }
+ if (!deleteIds.isEmpty()) {
+ discoveryUpstreamMapper.deleteByIds(deleteIds);
+ }
+ for (DiscoveryUpstreamData currDiscoveryUpstreamDate :
discoveryUpstreamDataList) {
+ if (!dbUrlList.contains(currDiscoveryUpstreamDate.getUrl())) {
+ DiscoveryUpstreamDO discoveryUpstreamDO =
DiscoveryTransfer.INSTANCE.mapToDo(currDiscoveryUpstreamDate);
+
discoveryUpstreamDO.setId(UUIDUtils.getInstance().generateShortUuid());
+
discoveryUpstreamDO.setDiscoveryHandlerId(discoveryHandlerId);
+ discoveryUpstreamDO.setDateCreated(new
Timestamp(System.currentTimeMillis()));
+ discoveryUpstreamDO.setDateUpdated(new
Timestamp(System.currentTimeMillis()));
+ discoveryUpstreamMapper.insert(discoveryUpstreamDO);
+ }
+ }
+
+ ProxySelectorDO proxySelectorDO =
proxySelectorMapper.selectByHandlerId(discoveryHandlerId);
+ DiscoverySyncData discoverySyncData = new DiscoverySyncData();
+ discoverySyncData.setSelectorId(proxySelectorDO.getId());
+ discoverySyncData.setSelectorName(proxySelectorDO.getName());
+ discoverySyncData.setPluginName(proxySelectorDO.getPluginName());
+ discoverySyncData.setUpstreamDataList(discoveryUpstreamDataList);
+ DataChangedEvent dataChangedEvent = new
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE,
Collections.singletonList(discoverySyncData));
+ eventPublisher.publishEvent(dataChangedEvent);
+ }
+ }
+
/**
* buildProxySelectorKey.
*
- * @param discoveryHandlerDTO discoveryHandlerDTO
+ * @param listenerNode listenerNode
* @return key
*/
- private String buildProxySelectorKey(final DiscoveryHandlerDTO
discoveryHandlerDTO) {
- return StringUtils.isNotBlank(discoveryHandlerDTO.getListenerNode()) ?
discoveryHandlerDTO.getListenerNode() : DEFAULT_LISTENER_NODE;
+ private String buildProxySelectorKey(final String listenerNode) {
+ return StringUtils.isNotBlank(listenerNode) ? listenerNode :
DEFAULT_LISTENER_NODE;
}
+
/**
* getDiscoveryDataChangedEventListener.
*
- * @param discoveryType discoveryType
- * @param customProps customProps
+ * @param discoveryHandlerDTO discoveryHandlerDTO
+ * @param proxySelectorDTO proxySelectorDTO
* @return DataChangedEventListener
*/
- private DataChangedEventListener
getDiscoveryDataChangedEventListener(final String discoveryType, final String
customProps) {
- Map<String, String> customMap =
GsonUtils.getInstance().toObjectMap(customProps, String.class);
+ private DataChangedEventListener
getDiscoveryDataChangedEventListener(final DiscoveryHandlerDTO
discoveryHandlerDTO, final ProxySelectorDTO proxySelectorDTO) {
+ final Map<String, String> customMap =
GsonUtils.getInstance().toObjectMap(discoveryHandlerDTO.getHandler(),
String.class);
+ DiscoverySyncData discoverySyncData = new DiscoverySyncData();
+ discoverySyncData.setPluginName(proxySelectorDTO.getPluginName());
+ discoverySyncData.setSelectorName(proxySelectorDTO.getName());
+ discoverySyncData.setSelectorId(proxySelectorDTO.getId());
return new DiscoveryDataChangedEventSyncListener(eventPublisher,
discoveryUpstreamMapper,
- new CustomDiscoveryUpstreamParser(customMap),
!DiscoveryMode.LOCAL.name().equalsIgnoreCase(discoveryType));
+ new CustomDiscoveryUpstreamParser(customMap),
discoveryHandlerDTO.getId(), discoverySyncData);
}
@Override
public void setApplicationEventPublisher(final ApplicationEventPublisher
eventPublisher) {
this.eventPublisher = eventPublisher;
}
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
index c4095544f..970507fdf 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java
@@ -21,15 +21,12 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.shenyu.admin.discovery.parse.KeyValueParser;
import org.apache.shenyu.admin.listener.DataChangedEvent;
import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
-import org.apache.shenyu.admin.model.dto.DiscoveryHandlerDTO;
import org.apache.shenyu.admin.model.entity.DiscoveryUpstreamDO;
-import org.apache.shenyu.admin.model.entity.ProxySelectorDO;
import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
import org.apache.shenyu.common.dto.DiscoverySyncData;
import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
import org.apache.shenyu.common.enums.ConfigGroupEnum;
import org.apache.shenyu.common.enums.DataEventTypeEnum;
-import org.apache.shenyu.common.utils.GsonUtils;
import org.apache.shenyu.common.utils.UUIDUtils;
import org.apache.shenyu.discovery.api.listener.DiscoveryDataChangedEvent;
import org.apache.shenyu.discovery.api.listener.DataChangedEventListener;
@@ -56,16 +53,20 @@ public class DiscoveryDataChangedEventSyncListener
implements DataChangedEventLi
private final DiscoveryUpstreamMapper discoveryUpstreamMapper;
- private final Boolean needPersistence;
+ private final String discoveryHandlerId;
+
+ private final DiscoverySyncData contextInfo;
public DiscoveryDataChangedEventSyncListener(final
ApplicationEventPublisher eventPublisher,
final DiscoveryUpstreamMapper
discoveryUpstreamMapper,
final KeyValueParser
keyValueParser,
- final Boolean
needPersistence) {
+ final String
discoveryHandlerId,
+ final DiscoverySyncData
contextInfo) {
this.eventPublisher = eventPublisher;
this.keyValueParser = keyValueParser;
this.discoveryUpstreamMapper = discoveryUpstreamMapper;
- this.needPersistence = needPersistence;
+ this.discoveryHandlerId = discoveryHandlerId;
+ this.contextInfo = contextInfo;
}
@Override
@@ -75,47 +76,44 @@ public class DiscoveryDataChangedEventSyncListener
implements DataChangedEventLi
return;
}
DiscoverySyncData discoverySyncData =
buildProxySelectorData(event.getValue());
- DataChangedEvent dataChangedEvent = null;
- List<DiscoveryUpstreamData> upstreamDataList =
discoverySyncData.getUpstreamDataList();
- if (needPersistence) {
- if (CollectionUtils.isEmpty(upstreamDataList)) {
- LOGGER.warn("shenyu proxySelectorData#discoveryUpstreamList is
empty");
- return;
- }
- switch (currentEvent) {
- case ADDED:
- upstreamDataList.forEach(d -> {
+ final List<DiscoveryUpstreamData> upstreamDataList =
discoverySyncData.getUpstreamDataList();
+ if (CollectionUtils.isEmpty(upstreamDataList)) {
+ LOGGER.warn("shenyu proxySelectorData#discoveryUpstreamList is
empty");
+ return;
+ }
+ switch (currentEvent) {
+ case ADDED:
+ upstreamDataList.forEach(d -> {
+ if
(Objects.isNull(discoveryUpstreamMapper.selectByDiscoveryHandlerIdAndUrl(discoveryHandlerId,
d.getUrl()))) {
d.setId(UUIDUtils.getInstance().generateShortUuid());
d.setDateCreated(new
Timestamp(System.currentTimeMillis()));
d.setDateUpdated(new
Timestamp(System.currentTimeMillis()));
discoveryUpstreamMapper.insert(DiscoveryTransfer.INSTANCE.mapToDo(d));
LOGGER.info("shenyu
[DiscoveryDataChangedEventSyncListener] ADDED Upstream {}", d.getUrl());
- });
- break;
- case UPDATED:
- upstreamDataList.forEach(d -> {
- DiscoveryUpstreamDO discoveryUpstreamDO =
DiscoveryTransfer.INSTANCE.mapToDo(d);
- discoveryUpstreamMapper.update(discoveryUpstreamDO);
- LOGGER.info("shenyu
[DiscoveryDataChangedEventSyncListener] UPDATE Upstream {}",
discoveryUpstreamDO.getUrl());
- });
- break;
- case DELETED:
- if (CollectionUtils.isNotEmpty(upstreamDataList)) {
- upstreamDataList.forEach(up -> {
- discoveryUpstreamMapper.deleteByUrl(up.getUrl());
- LOGGER.info("shenyu
[DiscoveryDataChangedEventSyncListener] DELETE Upstream {}", up.getUrl());
- });
}
- break;
- default:
- throw new IllegalStateException("shenyu
DiscoveryDataChangedEventSyncListener find IllegalState");
- }
- fillFullyDiscoverySyncData(discoverySyncData);
- dataChangedEvent = new
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE,
Collections.singletonList(discoverySyncData));
- }
- if (Objects.nonNull(dataChangedEvent)) {
- eventPublisher.publishEvent(dataChangedEvent);
+ });
+ break;
+ case UPDATED:
+
upstreamDataList.stream().map(DiscoveryTransfer.INSTANCE::mapToDo).forEach(discoveryUpstreamDO
-> {
+
discoveryUpstreamDO.setDiscoveryHandlerId(discoveryHandlerId);
+ int effect =
discoveryUpstreamMapper.updateDiscoveryHandlerIdAndUrl(discoveryUpstreamDO);
+ LOGGER.info("shenyu
[DiscoveryDataChangedEventSyncListener] UPDATE Upstream {}, effect = {} ",
discoveryUpstreamDO.getUrl(), effect);
+ });
+ break;
+ case DELETED:
+ if (CollectionUtils.isNotEmpty(upstreamDataList)) {
+ upstreamDataList.forEach(up -> {
+
discoveryUpstreamMapper.deleteByUrl(discoveryHandlerId, up.getUrl());
+ LOGGER.info("shenyu
[DiscoveryDataChangedEventSyncListener] DELETE Upstream {}", up.getUrl());
+ });
+ }
+ break;
+ default:
+ throw new IllegalStateException("shenyu
DiscoveryDataChangedEventSyncListener find IllegalState");
}
+ fillFullyDiscoverySyncData(discoverySyncData);
+ DataChangedEvent dataChangedEvent = new
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE,
Collections.singletonList(discoverySyncData));
+ eventPublisher.publishEvent(dataChangedEvent);
}
private void fillFullyDiscoverySyncData(final DiscoverySyncData
discoverySyncData) {
@@ -125,16 +123,13 @@ public class DiscoveryDataChangedEventSyncListener
implements DataChangedEventLi
}
private DiscoverySyncData buildProxySelectorData(final String value) {
- String[] splitArr = value.split("[|]");
- DiscoveryHandlerDTO discoveryHandlerDTO =
GsonUtils.getInstance().fromJson(splitArr[0], DiscoveryHandlerDTO.class);
- ProxySelectorDO proxySelectorDO =
GsonUtils.getInstance().fromJson(splitArr[1], ProxySelectorDO.class);
- List<DiscoveryUpstreamData> discoveryUpstreamDTOS =
keyValueParser.parseValue(splitArr[2]);
- discoveryUpstreamDTOS.forEach(s ->
s.setDiscoveryHandlerId(discoveryHandlerDTO.getId()));
+ List<DiscoveryUpstreamData> discoveryUpstreamDTOS =
keyValueParser.parseValue(value);
+ discoveryUpstreamDTOS.forEach(s ->
s.setDiscoveryHandlerId(discoveryHandlerId));
DiscoverySyncData data = new DiscoverySyncData();
data.setUpstreamDataList(discoveryUpstreamDTOS);
- data.setSelectorId(proxySelectorDO.getId());
- data.setSelectorName(proxySelectorDO.getName());
- data.setPluginName(proxySelectorDO.getPluginName());
+ data.setSelectorId(contextInfo.getSelectorId());
+ data.setSelectorName(contextInfo.getSelectorName());
+ data.setPluginName(contextInfo.getPluginName());
return data;
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataInitializationRunner.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataInitializationRunner.java
deleted file mode 100644
index 42de17415..000000000
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataInitializationRunner.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shenyu.admin.discovery;
-
-import org.apache.shenyu.admin.mapper.DiscoveryHandlerMapper;
-import org.apache.shenyu.admin.mapper.DiscoveryMapper;
-import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
-import org.apache.shenyu.admin.model.entity.DiscoveryDO;
-import org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO;
-import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * to load database discovery data.
- */
-@Component
-public class DiscoveryDataInitializationRunner implements CommandLineRunner {
-
- private static final Logger LOG =
LoggerFactory.getLogger(DiscoveryDataInitializationRunner.class);
-
- private final DiscoveryMapper discoveryMapper;
-
- private final ProxySelectorMapper proxySelectorMapper;
-
- private final DiscoveryHandlerMapper discoveryHandlerMapper;
-
- private final DiscoveryProcessorHolder discoveryProcessorHolder;
-
- public DiscoveryDataInitializationRunner(final DiscoveryMapper
discoveryMapper,
- final ProxySelectorMapper
proxySelectorMapper,
- final DiscoveryHandlerMapper
discoveryHandlerMapper,
- final DiscoveryProcessorHolder
discoveryProcessorHolder) {
- this.discoveryMapper = discoveryMapper;
- this.proxySelectorMapper = proxySelectorMapper;
- this.discoveryHandlerMapper = discoveryHandlerMapper;
- this.discoveryProcessorHolder = discoveryProcessorHolder;
- }
-
- @Override
- public void run(final String... args) throws Exception {
- LOG.info("shenyu DiscoveryDataInitializationRunner fetch db ");
- List<DiscoveryDO> discoveryDOS = discoveryMapper.selectAll();
- discoveryDOS.stream().filter(d ->
!DiscoveryMode.LOCAL.name().equalsIgnoreCase(d.getType())).forEach(d -> {
- DiscoveryProcessor discoveryProcessor =
discoveryProcessorHolder.chooseProcessor(d.getType());
- discoveryProcessor.createDiscovery(d);
-
proxySelectorMapper.selectByDiscoveryId(d.getId()).stream().map(DiscoveryTransfer.INSTANCE::mapToDTO).forEach(ps
-> {
- DiscoveryHandlerDO discoveryHandlerDO =
discoveryHandlerMapper.selectByDiscoveryId(d.getId());
-
discoveryProcessor.createProxySelector(DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO),
ps);
- });
- });
- }
-
-}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessor.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessor.java
index 50b3338a1..324083f2c 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessor.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryProcessor.java
@@ -62,10 +62,17 @@ public interface DiscoveryProcessor {
/**
* only use in local mode to sync upstreamDTOS.
*
- * @param discoveryHandlerDTO discoveryHandlerDTO
- * @param proxySelectorDTO proxySelectorDTO
- * @param upstreamDTOS upstreamDTOS
+ * @param proxySelectorDTO proxySelectorDTO
+ * @param upstreamDTOS upstreamDTOS
+ */
+ void changeUpstream(ProxySelectorDTO proxySelectorDTO,
List<DiscoveryUpstreamDTO> upstreamDTOS);
+
+
+ /**
+ * sync all upstream list to gateway and db.
+ *
+ * @param discoveryHandlerId discoveryHandlerId
*/
- void changeUpstream(DiscoveryHandlerDTO discoveryHandlerDTO,
ProxySelectorDTO proxySelectorDTO, List<DiscoveryUpstreamDTO> upstreamDTOS);
+ void fetchAll(String discoveryHandlerId);
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/LocalDiscoveryProcessor.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/LocalDiscoveryProcessor.java
index 755c70f92..16747e544 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/LocalDiscoveryProcessor.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/LocalDiscoveryProcessor.java
@@ -18,10 +18,14 @@
package org.apache.shenyu.admin.discovery;
import org.apache.shenyu.admin.listener.DataChangedEvent;
+import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
+import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
import org.apache.shenyu.admin.model.dto.DiscoveryHandlerDTO;
import org.apache.shenyu.admin.model.dto.DiscoveryUpstreamDTO;
import org.apache.shenyu.admin.model.dto.ProxySelectorDTO;
import org.apache.shenyu.admin.model.entity.DiscoveryDO;
+import org.apache.shenyu.admin.model.entity.DiscoveryUpstreamDO;
+import org.apache.shenyu.admin.model.entity.ProxySelectorDO;
import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
import org.apache.shenyu.common.dto.DiscoverySyncData;
import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
@@ -45,6 +49,15 @@ public class LocalDiscoveryProcessor implements
DiscoveryProcessor, ApplicationE
private ApplicationEventPublisher eventPublisher;
+ private final DiscoveryUpstreamMapper discoveryUpstreamMapper;
+
+ private final ProxySelectorMapper proxySelectorMapper;
+
+ public LocalDiscoveryProcessor(final DiscoveryUpstreamMapper
discoveryUpstreamMapper, final ProxySelectorMapper proxySelectorMapper) {
+ this.discoveryUpstreamMapper = discoveryUpstreamMapper;
+ this.proxySelectorMapper = proxySelectorMapper;
+ }
+
@Override
public void createDiscovery(final DiscoveryDO discoveryDO) {
LOG.info("shenyu discovery local mode do nothing in createDiscovery");
@@ -70,7 +83,7 @@ public class LocalDiscoveryProcessor implements
DiscoveryProcessor, ApplicationE
}
@Override
- public void changeUpstream(final DiscoveryHandlerDTO discoveryHandlerDTO,
final ProxySelectorDTO proxySelectorDTO, final List<DiscoveryUpstreamDTO>
upstreamDTOS) {
+ public void changeUpstream(final ProxySelectorDTO proxySelectorDTO, final
List<DiscoveryUpstreamDTO> upstreamDTOS) {
DiscoverySyncData discoverySyncData = new DiscoverySyncData();
discoverySyncData.setPluginName(proxySelectorDTO.getPluginName());
discoverySyncData.setSelectorId(proxySelectorDTO.getId());
@@ -86,4 +99,18 @@ public class LocalDiscoveryProcessor implements
DiscoveryProcessor, ApplicationE
this.eventPublisher = applicationEventPublisher;
}
+ @Override
+ public void fetchAll(final String discoveryHandlerId) {
+ List<DiscoveryUpstreamDO> discoveryUpstreamDOS =
discoveryUpstreamMapper.selectByDiscoveryHandlerId(discoveryHandlerId);
+ ProxySelectorDO proxySelectorDO =
proxySelectorMapper.selectByHandlerId(discoveryHandlerId);
+ DiscoverySyncData discoverySyncData = new DiscoverySyncData();
+ discoverySyncData.setPluginName(proxySelectorDO.getPluginName());
+ discoverySyncData.setSelectorId(proxySelectorDO.getId());
+ discoverySyncData.setSelectorName(proxySelectorDO.getName());
+ List<DiscoveryUpstreamData> upstreamDataList =
discoveryUpstreamDOS.stream().map(DiscoveryTransfer.INSTANCE::mapToData).collect(Collectors.toList());
+ discoverySyncData.setUpstreamDataList(upstreamDataList);
+ DataChangedEvent dataChangedEvent = new
DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE,
Collections.singletonList(discoverySyncData));
+ eventPublisher.publishEvent(dataChangedEvent);
+ }
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/CustomDiscoveryUpstreamParser.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/CustomDiscoveryUpstreamParser.java
index ec19b8a4f..4a0fb438e 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/CustomDiscoveryUpstreamParser.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/parse/CustomDiscoveryUpstreamParser.java
@@ -40,6 +40,7 @@ import java.util.Map;
*
* <p>
* You can define a custom map mapper if your custom upstream doesn't fit
+ * like is {"${yourUserName}" : "url"}
* </p>
*/
public class CustomDiscoveryUpstreamParser implements
JsonDeserializer<DiscoveryUpstreamData>, KeyValueParser {
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
index 7c01a682c..7c28a5cc0 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractDataChangedListener.java
@@ -24,12 +24,16 @@ import org.apache.shenyu.admin.service.MetaDataService;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.RuleService;
import org.apache.shenyu.admin.service.SelectorService;
+import org.apache.shenyu.admin.service.ProxySelectorService;
+import org.apache.shenyu.admin.service.DiscoveryUpstreamService;
import org.apache.shenyu.common.dto.AppAuthData;
import org.apache.shenyu.common.dto.ConfigData;
import org.apache.shenyu.common.dto.MetaData;
import org.apache.shenyu.common.dto.PluginData;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
+import org.apache.shenyu.common.dto.DiscoverySyncData;
+import org.apache.shenyu.common.dto.ProxySelectorData;
import org.apache.shenyu.common.enums.ConfigGroupEnum;
import org.apache.shenyu.common.enums.DataEventTypeEnum;
import org.apache.shenyu.common.utils.GsonUtils;
@@ -81,9 +85,18 @@ public abstract class AbstractDataChangedListener implements
DataChangedListener
@Resource
private SelectorService selectorService;
+ /**
+ * The MetaData service.
+ */
@Resource
private MetaDataService metaDataService;
+ @Resource
+ private ProxySelectorService proxySelectorService;
+
+ @Resource
+ private DiscoveryUpstreamService discoveryUpstreamService;
+
/**
* fetch configuration from cache.
*
@@ -103,11 +116,15 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
return buildConfigData(config, SelectorData.class);
case META_DATA:
return buildConfigData(config, MetaData.class);
+ case PROXY_SELECTOR:
+ return buildConfigData(config, ProxySelectorData.class);
+ case DISCOVER_UPSTREAM:
+ return buildConfigData(config, DiscoverySyncData.class);
default:
throw new IllegalStateException("Unexpected groupKey: " +
groupKey);
}
}
-
+
@Override
public void onAppAuthChanged(final List<AppAuthData> changed, final
DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -116,7 +133,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
this.updateAppAuthCache();
this.afterAppAuthChanged(changed, eventType);
}
-
+
/**
* After app auth changed.
*
@@ -125,7 +142,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
*/
protected void afterAppAuthChanged(final List<AppAuthData> changed, final
DataEventTypeEnum eventType) {
}
-
+
@Override
public void onMetaDataChanged(final List<MetaData> changed, final
DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -134,7 +151,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
this.updateMetaDataCache();
this.afterMetaDataChanged(changed, eventType);
}
-
+
/**
* After meta data changed.
*
@@ -143,7 +160,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
*/
protected void afterMetaDataChanged(final List<MetaData> changed, final
DataEventTypeEnum eventType) {
}
-
+
@Override
public void onPluginChanged(final List<PluginData> changed, final
DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -152,7 +169,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
this.updatePluginCache();
this.afterPluginChanged(changed, eventType);
}
-
+
/**
* After plugin changed.
*
@@ -161,7 +178,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
*/
protected void afterPluginChanged(final List<PluginData> changed, final
DataEventTypeEnum eventType) {
}
-
+
@Override
public void onRuleChanged(final List<RuleData> changed, final
DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -170,7 +187,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
this.updateRuleCache();
this.afterRuleChanged(changed, eventType);
}
-
+
/**
* After rule changed.
*
@@ -179,7 +196,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
*/
protected void afterRuleChanged(final List<RuleData> changed, final
DataEventTypeEnum eventType) {
}
-
+
@Override
public void onSelectorChanged(final List<SelectorData> changed, final
DataEventTypeEnum eventType) {
if (CollectionUtils.isEmpty(changed)) {
@@ -188,7 +205,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
this.updateSelectorCache();
this.afterSelectorChanged(changed, eventType);
}
-
+
/**
* After selector changed.
*
@@ -197,20 +214,21 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
*/
protected void afterSelectorChanged(final List<SelectorData> changed,
final DataEventTypeEnum eventType) {
}
-
+
@Override
public final void afterPropertiesSet() {
this.refreshLocalCache();
this.afterInitialize();
}
-
+
protected abstract void afterInitialize();
-
+
/**
* if md5 is not the same as the original, then update lcoal cache.
+ *
* @param group ConfigGroupEnum
- * @param <T> the type of class
- * @param data the new config data
+ * @param <T> the type of class
+ * @param data the new config data
*/
protected <T> void updateCache(final ConfigGroupEnum group, final List<T>
data) {
String json = GsonUtils.getInstance().toJson(data);
@@ -218,7 +236,7 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
ConfigDataCache oldVal = CACHE.put(newVal.getGroup(), newVal);
LOG.info("update config cache[{}], old: {}, updated: {}", group,
oldVal, newVal);
}
-
+
/**
* refresh local cache.
*/
@@ -228,44 +246,55 @@ public abstract class AbstractDataChangedListener
implements DataChangedListener
this.updateRuleCache();
this.updateSelectorCache();
this.updateMetaDataCache();
+ this.updateProxySelectorDataCache();
+ this.updateDiscoveryUpstreamDataCache();
}
-
+
/**
* Update selector cache.
*/
protected void updateSelectorCache() {
this.updateCache(ConfigGroupEnum.SELECTOR, selectorService.listAll());
}
-
+
/**
* Update rule cache.
*/
protected void updateRuleCache() {
this.updateCache(ConfigGroupEnum.RULE, ruleService.listAll());
}
-
+
/**
* Update plugin cache.
*/
protected void updatePluginCache() {
this.updateCache(ConfigGroupEnum.PLUGIN, pluginService.listAll());
}
-
+
/**
* Update app auth cache.
*/
protected void updateAppAuthCache() {
this.updateCache(ConfigGroupEnum.APP_AUTH, appAuthService.listAll());
}
-
+
/**
* Update meta data cache.
*/
protected void updateMetaDataCache() {
this.updateCache(ConfigGroupEnum.META_DATA, metaDataService.listAll());
}
-
+
+ protected void updateProxySelectorDataCache() {
+ this.updateCache(ConfigGroupEnum.PROXY_SELECTOR,
proxySelectorService.listAll());
+ }
+
+ protected void updateDiscoveryUpstreamDataCache() {
+ this.updateCache(ConfigGroupEnum.DISCOVER_UPSTREAM,
discoveryUpstreamService.listAll());
+ }
+
private <T> ConfigData<T> buildConfigData(final ConfigDataCache config,
final Class<T> dataType) {
return new ConfigData<>(config.getMd5(), config.getLastModifyTime(),
GsonUtils.getInstance().fromList(config.getJson(), dataType));
}
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryHandlerMapper.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryHandlerMapper.java
index 81cd53bdd..333b8b2ea 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryHandlerMapper.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryHandlerMapper.java
@@ -23,6 +23,7 @@ import
org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO;
import org.apache.shenyu.admin.validation.ExistProvider;
import java.io.Serializable;
+import java.util.List;
/**
* DiscoveryHandlerMapper.
@@ -88,10 +89,18 @@ public interface DiscoveryHandlerMapper extends
ExistProvider {
int delete(String id);
/**
- * selectByDiscoveryId.
+ * selectByProxySelectorId.
*
- * @param discoveryId discoveryId
+ * @param proxySelectorId proxySelectorId
* @return DiscoveryHandlerDO
*/
- DiscoveryHandlerDO selectByDiscoveryId(@Param("discoveryId") String
discoveryId);
+ DiscoveryHandlerDO selectByProxySelectorId(@Param("proxySelectorId")
String proxySelectorId);
+
+ /**
+ * DiscoveryHandlerDOList.
+ *
+ * @return DiscoveryHandlerDOListx
+ */
+ List<DiscoveryHandlerDO> selectAll();
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryRelMapper.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryRelMapper.java
index 53a9c09e1..ec9db7249 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryRelMapper.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryRelMapper.java
@@ -18,6 +18,7 @@
package org.apache.shenyu.admin.mapper;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import org.apache.shenyu.admin.model.entity.DiscoveryRelDO;
/**
@@ -44,6 +45,7 @@ public interface DiscoveryRelMapper {
/**
* insert discoveryRelDO.
+ *
* @param discoveryRelDO discoveryRelDO.
* @return rows
*/
@@ -75,8 +77,18 @@ public interface DiscoveryRelMapper {
/**
* delete discoveryRel by id.
+ *
* @param id primary key.
* @return rows.
*/
int delete(String id);
+
+ /**
+ * selectByDiscoveryHandlerId.
+ *
+ * @param discoveryHandlerId discoveryHandlerId
+ * @return DiscoveryRelDO
+ */
+ DiscoveryRelDO selectByDiscoveryHandlerId(@Param("discoveryHandlerId")
String discoveryHandlerId);
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapper.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapper.java
index 63d8976bd..eef7a708c 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapper.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/DiscoveryUpstreamMapper.java
@@ -113,8 +113,26 @@ public interface DiscoveryUpstreamMapper extends
ExistProvider {
/**
* deleteByUrl.
*
- * @param url url
+ * @param discoveryHandlerId discoveryHandlerId
+ * @param url url
* @return rows int
*/
- int deleteByUrl(@Param("url") String url);
+ int deleteByUrl(@Param("discoveryHandlerId") String discoveryHandlerId,
@Param("url") String url);
+
+ /**
+ * selectByDiscoveryHandlerIdAndUrl.
+ *
+ * @param discoveryHandlerId discoveryHandlerId
+ * @param url url
+ * @return DiscoveryUpstreamDO
+ */
+ DiscoveryUpstreamDO
selectByDiscoveryHandlerIdAndUrl(@Param("discoveryHandlerId") String
discoveryHandlerId, @Param("url") String url);
+
+ /**
+ * updateDiscoveryHandlerIdAndUrl.
+ *
+ * @param discoveryUpstreamDO discoveryUpstreamDO
+ * @return rows
+ */
+ int updateDiscoveryHandlerIdAndUrl(DiscoveryUpstreamDO
discoveryUpstreamDO);
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java
index 8a31985f1..71e30cae8 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java
@@ -112,4 +112,11 @@ public interface ProxySelectorMapper extends ExistProvider
{
*/
List<ProxySelectorDO> selectByDiscoveryId(@Param("discoveryId") String
discoveryId);
+ /**
+ * selectAll.
+ *
+ * @return ProxySelectorDOList
+ */
+ List<ProxySelectorDO> selectAll();
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
index 8bd3c150d..55dbee553 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryService.java
@@ -35,7 +35,7 @@ public interface DiscoveryService {
* get the discovery by plugin and name.
*
* @param pluginName plugin name
- * @param level level
+ * @param level level
* @return the discovery
*/
DiscoveryVO discovery(String pluginName, String level);
@@ -47,4 +47,9 @@ public interface DiscoveryService {
* @return the string
*/
DiscoveryVO createOrUpdate(DiscoveryDTO discoveryDTO);
+
+ /**
+ * syncData.
+ */
+ void syncData();
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryUpstreamService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryUpstreamService.java
index 5106f3763..6cadc4bcb 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryUpstreamService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/DiscoveryUpstreamService.java
@@ -18,6 +18,7 @@
package org.apache.shenyu.admin.service;
import org.apache.shenyu.admin.model.dto.DiscoveryUpstreamDTO;
+import org.apache.shenyu.common.dto.DiscoverySyncData;
import java.util.List;
@@ -38,4 +39,11 @@ public interface DiscoveryUpstreamService {
* @return the string
*/
String delete(List<String> ids);
+
+ /**
+ * listAll.
+ *
+ * @return DiscoverySyncDataList
+ */
+ List<DiscoverySyncData> listAll();
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/ProxySelectorService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/ProxySelectorService.java
index 6d256f975..735df7553 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/ProxySelectorService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/ProxySelectorService.java
@@ -21,6 +21,7 @@ import org.apache.shenyu.admin.model.dto.ProxySelectorAddDTO;
import org.apache.shenyu.admin.model.page.CommonPager;
import org.apache.shenyu.admin.model.query.ProxySelectorQuery;
import org.apache.shenyu.admin.model.vo.ProxySelectorVO;
+import org.apache.shenyu.common.dto.ProxySelectorData;
import java.util.List;
@@ -57,4 +58,20 @@ public interface ProxySelectorService {
* @return the result
*/
String create(ProxySelectorAddDTO proxySelectorAddDTO);
+
+
+ /**
+ * fetchData.
+ *
+ * @param discoveryHandlerId discoveryHandlerId
+ */
+ void fetchData(String discoveryHandlerId);
+
+ /**
+ * listAll.
+ *
+ * @return ProxySelectorDTOList
+ */
+ List<ProxySelectorData> listAll();
+
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
index 933672635..0d728b078 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryServiceImpl.java
@@ -18,17 +18,25 @@
package org.apache.shenyu.admin.service.impl;
import org.apache.commons.lang3.StringUtils;
+import org.apache.shenyu.admin.discovery.DiscoveryMode;
import org.apache.shenyu.admin.discovery.DiscoveryProcessor;
import org.apache.shenyu.admin.discovery.DiscoveryProcessorHolder;
+import org.apache.shenyu.admin.mapper.DiscoveryHandlerMapper;
import org.apache.shenyu.admin.mapper.DiscoveryMapper;
+import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
import org.apache.shenyu.admin.model.dto.DiscoveryDTO;
import org.apache.shenyu.admin.model.entity.DiscoveryDO;
+import org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO;
import org.apache.shenyu.admin.model.enums.DiscoveryTypeEnum;
import org.apache.shenyu.admin.model.vo.DiscoveryVO;
import org.apache.shenyu.admin.service.DiscoveryService;
+import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
import org.apache.shenyu.common.utils.UUIDUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp;
import java.util.List;
@@ -36,13 +44,24 @@ import java.util.List;
@Service
public class DiscoveryServiceImpl implements DiscoveryService {
+ private static final Logger LOG =
LoggerFactory.getLogger(DiscoveryServiceImpl.class);
+
private final DiscoveryMapper discoveryMapper;
+ private final ProxySelectorMapper proxySelectorMapper;
+
+ private final DiscoveryHandlerMapper discoveryHandlerMapper;
+
private final DiscoveryProcessorHolder discoveryProcessorHolder;
- public DiscoveryServiceImpl(final DiscoveryMapper discoveryMapper, final
DiscoveryProcessorHolder discoveryProcessorHolder) {
+ public DiscoveryServiceImpl(final DiscoveryMapper discoveryMapper,
+ final ProxySelectorMapper proxySelectorMapper,
+ final DiscoveryHandlerMapper
discoveryHandlerMapper,
+ final DiscoveryProcessorHolder
discoveryProcessorHolder) {
this.discoveryMapper = discoveryMapper;
this.discoveryProcessorHolder = discoveryProcessorHolder;
+ this.proxySelectorMapper = proxySelectorMapper;
+ this.discoveryHandlerMapper = discoveryHandlerMapper;
}
@Override
@@ -51,11 +70,13 @@ public class DiscoveryServiceImpl implements
DiscoveryService {
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public DiscoveryVO discovery(final String pluginName, final String level) {
return
discoveryVO(discoveryMapper.selectByPluginNameAndLevel(pluginName, level));
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public DiscoveryVO createOrUpdate(final DiscoveryDTO discoveryDTO) {
return StringUtils.isBlank(discoveryDTO.getId()) ?
this.create(discoveryDTO) : this.update(discoveryDTO);
}
@@ -116,4 +137,19 @@ public class DiscoveryServiceImpl implements
DiscoveryService {
return discoveryVO;
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void syncData() {
+ LOG.info("shenyu DiscoveryService sync db ");
+ List<DiscoveryDO> discoveryDOS = discoveryMapper.selectAll();
+ discoveryDOS.stream().filter(d ->
!DiscoveryMode.LOCAL.name().equalsIgnoreCase(d.getType())).forEach(d -> {
+ DiscoveryProcessor discoveryProcessor =
discoveryProcessorHolder.chooseProcessor(d.getType());
+ discoveryProcessor.createDiscovery(d);
+
proxySelectorMapper.selectByDiscoveryId(d.getId()).stream().map(DiscoveryTransfer.INSTANCE::mapToDTO).forEach(ps
-> {
+ DiscoveryHandlerDO discoveryHandlerDO =
discoveryHandlerMapper.selectByProxySelectorId(ps.getId());
+
discoveryProcessor.createProxySelector(DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO),
ps);
+ discoveryProcessor.fetchAll(discoveryHandlerDO.getId());
+ });
+ });
+ }
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
index 6e0078865..a9359274b 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
@@ -23,14 +23,20 @@ import
org.apache.shenyu.admin.mapper.DiscoveryHandlerMapper;
import org.apache.shenyu.admin.mapper.DiscoveryMapper;
import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
+import org.apache.shenyu.admin.mapper.DiscoveryRelMapper;
+import org.apache.shenyu.admin.mapper.SelectorMapper;
import org.apache.shenyu.admin.model.dto.DiscoveryUpstreamDTO;
import org.apache.shenyu.admin.model.entity.DiscoveryDO;
import org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO;
import org.apache.shenyu.admin.model.entity.DiscoveryUpstreamDO;
import org.apache.shenyu.admin.model.entity.ProxySelectorDO;
+import org.apache.shenyu.admin.model.entity.DiscoveryRelDO;
+import org.apache.shenyu.admin.model.entity.SelectorDO;
import org.apache.shenyu.admin.service.DiscoveryUpstreamService;
import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
import org.apache.shenyu.admin.utils.ShenyuResultMessage;
+import org.apache.shenyu.common.dto.DiscoverySyncData;
+import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -44,21 +50,29 @@ public class DiscoveryUpstreamServiceImpl implements
DiscoveryUpstreamService {
private final DiscoveryHandlerMapper discoveryHandlerMapper;
+ private final DiscoveryRelMapper discoveryRelMapper;
+
private final ProxySelectorMapper proxySelectorMapper;
private final DiscoveryMapper discoveryMapper;
+ private final SelectorMapper selectorMapper;
+
private final DiscoveryProcessorHolder discoveryProcessorHolder;
public DiscoveryUpstreamServiceImpl(final DiscoveryUpstreamMapper
discoveryUpstreamMapper,
final DiscoveryHandlerMapper
discoveryHandlerMapper,
final ProxySelectorMapper
proxySelectorMapper,
final DiscoveryMapper discoveryMapper,
+ final DiscoveryRelMapper
discoveryRelMapper,
+ final SelectorMapper selectorMapper,
final DiscoveryProcessorHolder
discoveryProcessorHolder) {
this.discoveryUpstreamMapper = discoveryUpstreamMapper;
this.discoveryProcessorHolder = discoveryProcessorHolder;
this.discoveryHandlerMapper = discoveryHandlerMapper;
this.discoveryMapper = discoveryMapper;
+ this.discoveryRelMapper = discoveryRelMapper;
+ this.selectorMapper = selectorMapper;
this.proxySelectorMapper = proxySelectorMapper;
}
@@ -89,6 +103,31 @@ public class DiscoveryUpstreamServiceImpl implements
DiscoveryUpstreamService {
return ShenyuResultMessage.DELETE_SUCCESS;
}
+ @Override
+ public List<DiscoverySyncData> listAll() {
+ List<DiscoveryHandlerDO> discoveryHandlerDOS =
discoveryHandlerMapper.selectAll();
+ return discoveryHandlerDOS.stream().map(d -> {
+ DiscoveryRelDO discoveryRelDO =
discoveryRelMapper.selectByDiscoveryHandlerId(d.getId());
+ DiscoverySyncData discoverySyncData = new DiscoverySyncData();
+ discoverySyncData.setPluginName(discoveryRelDO.getPluginName());
+ if (StringUtils.hasLength(discoveryRelDO.getSelectorId())) {
+ String selectorId = discoveryRelDO.getSelectorId();
+ discoverySyncData.setSelectorId(selectorId);
+ SelectorDO selectorDO = selectorMapper.selectById(selectorId);
+ discoverySyncData.setSelectorName(selectorDO.getName());
+ } else {
+ String proxySelectorId = discoveryRelDO.getProxySelectorId();
+ discoverySyncData.setSelectorId(proxySelectorId);
+ ProxySelectorDO proxySelectorDO =
proxySelectorMapper.selectById(proxySelectorId);
+ discoverySyncData.setSelectorName(proxySelectorDO.getName());
+ }
+ List<DiscoveryUpstreamData> discoveryUpstreamDataList =
discoveryUpstreamMapper.selectByDiscoveryHandlerId(d.getId()).stream()
+
.map(DiscoveryTransfer.INSTANCE::mapToData).collect(Collectors.toList());
+ discoverySyncData.setUpstreamDataList(discoveryUpstreamDataList);
+ return discoverySyncData;
+ }).collect(Collectors.toList());
+ }
+
/**
* create.
*
@@ -122,7 +161,7 @@ public class DiscoveryUpstreamServiceImpl implements
DiscoveryUpstreamService {
DiscoveryDO discoveryDO =
discoveryMapper.selectById(discoveryHandlerDO.getDiscoveryId());
List<DiscoveryUpstreamDTO> collect =
discoveryUpstreamDOS.stream().map(DiscoveryTransfer.INSTANCE::mapToDTO).collect(Collectors.toList());
DiscoveryProcessor discoveryProcessor =
discoveryProcessorHolder.chooseProcessor(discoveryDO.getType());
-
discoveryProcessor.changeUpstream(DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO),
DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO), collect);
+
discoveryProcessor.changeUpstream(DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO),
collect);
}
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
index 1c6ad8d46..8727507fa 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java
@@ -43,6 +43,7 @@ import org.apache.shenyu.admin.model.vo.ProxySelectorVO;
import org.apache.shenyu.admin.service.ProxySelectorService;
import org.apache.shenyu.admin.transfer.DiscoveryTransfer;
import org.apache.shenyu.admin.utils.ShenyuResultMessage;
+import org.apache.shenyu.common.dto.ProxySelectorData;
import org.apache.shenyu.common.utils.UUIDUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -158,8 +159,17 @@ public class ProxySelectorServiceImpl implements
ProxySelectorService {
* @return the string
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public String delete(final List<String> ids) {
-
+ for (String proxySelectorId : ids) {
+ DiscoveryHandlerDO discoveryHandlerDO =
discoveryHandlerMapper.selectByProxySelectorId(proxySelectorId);
+ if (Objects.nonNull(discoveryHandlerDO)) {
+ ProxySelectorDO proxySelectorDO =
proxySelectorMapper.selectById(proxySelectorId);
+ DiscoveryDO discoveryDO =
discoveryMapper.selectById(discoveryHandlerDO.getDiscoveryId());
+ discoveryProcessorHolder.chooseProcessor(discoveryDO.getType())
+
.removeProxySelector(DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO),
DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO));
+ }
+ }
proxySelectorMapper.deleteByIds(ids);
return ShenyuResultMessage.DELETE_SUCCESS;
}
@@ -171,6 +181,7 @@ public class ProxySelectorServiceImpl implements
ProxySelectorService {
* @return insert data count
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public String create(final ProxySelectorAddDTO proxySelectorAddDTO) {
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
ProxySelectorDO proxySelectorDO =
ProxySelectorDO.buildProxySelectorDO(proxySelectorAddDTO);
@@ -245,7 +256,7 @@ public class ProxySelectorServiceImpl implements
ProxySelectorService {
});
discoveryUpstreamMapper.saveBatch(upstreamDOList);
List<DiscoveryUpstreamDTO> collect =
upstreamDOList.stream().map(DiscoveryTransfer.INSTANCE::mapToDTO).collect(Collectors.toList());
- discoveryProcessor.changeUpstream(discoveryHandlerDTO,
proxySelectorDTO, collect);
+ discoveryProcessor.changeUpstream(proxySelectorDTO,
collect);
}
}
}
@@ -258,6 +269,7 @@ public class ProxySelectorServiceImpl implements
ProxySelectorService {
* @param proxySelectorAddDTO proxySelectorAddDTO
* @return the string
*/
+ @Transactional(rollbackFor = Exception.class)
public String update(final ProxySelectorAddDTO proxySelectorAddDTO) {
// update proxy selector
ProxySelectorDO proxySelectorDO =
ProxySelectorDO.buildProxySelectorDO(proxySelectorAddDTO);
@@ -300,8 +312,21 @@ public class ProxySelectorServiceImpl implements
ProxySelectorService {
List<DiscoveryUpstreamDTO> fetchAll =
discoveryUpstreamMapper.selectByDiscoveryHandlerId(discoveryHandlerDO.getId()).stream()
.map(DiscoveryTransfer.INSTANCE::mapToDTO).collect(Collectors.toList());
DiscoveryProcessor discoveryProcessor =
discoveryProcessorHolder.chooseProcessor(discoveryDO.getType());
-
discoveryProcessor.changeUpstream(DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO),
DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO), fetchAll);
+
discoveryProcessor.changeUpstream(DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO),
fetchAll);
LOG.info("insert discovery upstreams, count is: {}",
proxySelectorAddDTO.getDiscoveryUpstreams().size());
return ShenyuResultMessage.UPDATE_SUCCESS;
}
+
+ @Override
+ public void fetchData(final String discoveryHandlerId) {
+ DiscoveryHandlerDO discoveryHandlerDO =
discoveryHandlerMapper.selectById(discoveryHandlerId);
+ DiscoveryDO discoveryDO =
discoveryMapper.selectById(discoveryHandlerDO.getDiscoveryId());
+
discoveryProcessorHolder.chooseProcessor(discoveryDO.getType()).fetchAll(discoveryHandlerId);
+ }
+
+ @Override
+ public List<ProxySelectorData> listAll() {
+ return proxySelectorMapper.selectAll().stream()
+
.map(DiscoveryTransfer.INSTANCE::mapToData).collect(Collectors.toList());
+ }
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
index bd2f9621c..30a485e50 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java
@@ -21,6 +21,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.shenyu.admin.listener.DataChangedEvent;
import org.apache.shenyu.admin.model.vo.PluginVO;
import org.apache.shenyu.admin.service.AppAuthService;
+import org.apache.shenyu.admin.service.DiscoveryService;
import org.apache.shenyu.admin.service.MetaDataService;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.RuleService;
@@ -66,18 +67,22 @@ public class SyncDataServiceImpl implements SyncDataService
{
private final MetaDataService metaDataService;
+ private final DiscoveryService discoveryService;
+
public SyncDataServiceImpl(final AppAuthService appAuthService,
final PluginService pluginService,
final SelectorService selectorService,
final RuleService ruleService,
final ApplicationEventPublisher eventPublisher,
- final MetaDataService metaDataService) {
+ final MetaDataService metaDataService,
+ final DiscoveryService discoveryService) {
this.appAuthService = appAuthService;
this.pluginService = pluginService;
this.selectorService = selectorService;
this.ruleService = ruleService;
this.eventPublisher = eventPublisher;
this.metaDataService = metaDataService;
+ this.discoveryService = discoveryService;
}
@Override
@@ -94,7 +99,7 @@ public class SyncDataServiceImpl implements SyncDataService {
eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.RULE,
type, ruleDataList));
metaDataService.syncData();
-
+ discoveryService.syncData();
return true;
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
index 9fca9797f..1e66799fd 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/transfer/DiscoveryTransfer.java
@@ -25,6 +25,7 @@ import
org.apache.shenyu.admin.model.entity.DiscoveryUpstreamDO;
import org.apache.shenyu.admin.model.entity.ProxySelectorDO;
import org.apache.shenyu.common.dto.DiscoveryUpstreamData;
import org.apache.shenyu.common.dto.ProxySelectorData;
+import org.apache.shenyu.common.utils.GsonUtils;
import java.util.Properties;
@@ -76,7 +77,6 @@ public enum DiscoveryTransfer {
return discoveryUpstreamData;
}
-
/**
* mapToData.
*
@@ -95,19 +95,53 @@ public enum DiscoveryTransfer {
return discoveryUpstreamData;
}
-
- public ProxySelectorData mapToData(ProxySelectorDTO proxySelectorDTO){
+ /**
+ * mapToData.
+ *
+ * @param proxySelectorDTO proxySelectorDTO
+ * @return ProxySelectorData
+ */
+ public ProxySelectorData mapToData(ProxySelectorDTO proxySelectorDTO) {
ProxySelectorData proxySelectorData = new ProxySelectorData();
proxySelectorData.setId(proxySelectorDTO.getId());
proxySelectorData.setName(proxySelectorDTO.getName());
proxySelectorData.setPluginName(proxySelectorDTO.getPluginName());
proxySelectorData.setType(proxySelectorDTO.getType());
proxySelectorData.setForwardPort(proxySelectorDTO.getForwardPort());
+ String props = proxySelectorDTO.getProps();
+ Properties properties = GsonUtils.getInstance().fromJson(props,
Properties.class);
+ proxySelectorData.setProps(properties);
return proxySelectorData;
}
+ /**
+ * mapToData.
+ *
+ * @param proxySelectorDO proxySelectorDO
+ * @return ProxySelectorData
+ */
+ public ProxySelectorData mapToData(ProxySelectorDO proxySelectorDO) {
+ ProxySelectorData proxySelectorData = new ProxySelectorData();
+ proxySelectorData.setId(proxySelectorDO.getId());
+ proxySelectorData.setName(proxySelectorDO.getName());
+ proxySelectorData.setPluginName(proxySelectorDO.getPluginName());
+ proxySelectorData.setType(proxySelectorDO.getType());
+ proxySelectorData.setForwardPort(proxySelectorDO.getForwardPort());
+ String props = proxySelectorDO.getProps();
+ Properties properties = GsonUtils.getInstance().fromJson(props,
Properties.class);
+ proxySelectorData.setProps(properties);
+ return proxySelectorData;
+ }
+
+ /**
+ * mapToDTO.
+ *
+ * @param proxySelectorDO proxySelectorDO
+ * @return ProxySelectorDTO
+ */
public ProxySelectorDTO mapToDTO(ProxySelectorDO proxySelectorDO) {
ProxySelectorDTO proxySelectorDTO = new ProxySelectorDTO();
+ proxySelectorDTO.setId(proxySelectorDO.getId());
proxySelectorDTO.setName(proxySelectorDO.getName());
proxySelectorDTO.setType(proxySelectorDO.getType());
proxySelectorDTO.setProps(proxySelectorDO.getProps());
@@ -116,6 +150,12 @@ public enum DiscoveryTransfer {
return proxySelectorDTO;
}
+ /**
+ * mapToDTO.
+ *
+ * @param discoveryHandlerDO discoveryHandlerDO
+ * @return DiscoveryHandlerDTO
+ */
public DiscoveryHandlerDTO mapToDTO(DiscoveryHandlerDO discoveryHandlerDO)
{
DiscoveryHandlerDTO discoveryHandlerDTO = new DiscoveryHandlerDTO();
discoveryHandlerDTO.setDiscoveryId(discoveryHandlerDO.getDiscoveryId());
@@ -126,6 +166,12 @@ public enum DiscoveryTransfer {
return discoveryHandlerDTO;
}
+ /**
+ * mapToDTO.
+ *
+ * @param discoveryUpstreamDO discoveryUpstreamDO
+ * @return DiscoveryUpstreamDTO
+ */
public DiscoveryUpstreamDTO mapToDTO(DiscoveryUpstreamDO
discoveryUpstreamDO) {
DiscoveryUpstreamDTO discoveryUpstreamDTO = new DiscoveryUpstreamDTO();
discoveryUpstreamDTO.setProps(discoveryUpstreamDO.getProps());
@@ -137,4 +183,5 @@ public enum DiscoveryTransfer {
discoveryUpstreamDTO.setWeight(discoveryUpstreamDO.getWeight());
return discoveryUpstreamDTO;
}
+
}
diff --git
a/shenyu-admin/src/main/resources/mappers/discovery-handler-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/discovery-handler-sqlmap.xml
index 2597c0249..0769b7bb6 100644
--- a/shenyu-admin/src/main/resources/mappers/discovery-handler-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/discovery-handler-sqlmap.xml
@@ -51,11 +51,22 @@
WHERE id = #{id, jdbcType=VARCHAR}
</select>
- <select id="selectByDiscoveryId"
resultType="org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO">
+ <select id="selectByProxySelectorId"
resultType="org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO">
+ SELECT
+ dh.id,
+ dh.date_created,
+ dh.date_updated,
+ dh.discovery_id,
+ dh.handler,
+ dh.listener_node
+ FROM discovery_handler dh inner join discovery_rel dr on dh.id =
dr.discovery_handler_id
+ WHERE dr.proxy_selector_id = #{proxySelectorId, jdbcType=VARCHAR}
+ </select>
+
+ <select id="selectAll"
resultType="org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO">
SELECT
<include refid="Base_Column_List"/>
- FROM discovery_handler
- WHERE discovery_id = #{discovery_id, jdbcType=VARCHAR}
+ from discovery_handler
</select>
<insert id="insert" keyColumn="id" keyProperty="id" useGeneratedKeys="true"
diff --git a/shenyu-admin/src/main/resources/mappers/discovery-rel-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/discovery-rel-sqlmap.xml
index 55125babf..6eb7c6870 100644
--- a/shenyu-admin/src/main/resources/mappers/discovery-rel-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/discovery-rel-sqlmap.xml
@@ -27,7 +27,7 @@
<result column="selector_id" jdbcType="VARCHAR" property="selectorId"/>
<result column="proxy_selector_id" jdbcType="VARCHAR"
property="proxySelectorId"/>
</resultMap>
-
+
<sql id="Base_Column_List">
id,
date_created,
@@ -37,7 +37,7 @@
selector_id,
proxy_selector_id
</sql>
-
+
<select id="selectById" parameterType="java.lang.String"
resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
@@ -51,7 +51,13 @@
FROM discovery_rel
WHERE proxy_selector_id = #{proxySelectorId, jdbcType=VARCHAR}
</select>
-
+
+ <select id="selectByDiscoveryHandlerId"
resultType="org.apache.shenyu.admin.model.entity.DiscoveryRelDO">
+ select
+ <include refid="Base_Column_List"/>
+ from discovery_rel where discovery_handler_id = #{discoveryHandlerId}
+ </select>
+
<insert id="insert"
parameterType="org.apache.shenyu.admin.model.entity.DiscoveryRelDO">
INSERT INTO discovery_rel
(id,
@@ -70,7 +76,7 @@
#{selectorId, jdbcType=VARCHAR}),
#{proxySelectorId, jdbcType=VARCHAR})
</insert>
-
+
<insert id="insertSelective"
parameterType="org.apache.shenyu.admin.model.entity.DiscoveryRelDO">
INSERT INTO discovery_rel
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -116,7 +122,7 @@
</if>
</trim>
</insert>
-
+
<update id="update"
parameterType="org.apache.shenyu.admin.model.entity.DiscoveryRelDO">
UPDATE discovery_rel
SET date_created = #{dateCreated, jdbcType=TIMESTAMP},
@@ -127,7 +133,7 @@
proxy_selector_id = #{proxySelectorId, jdbcType=VARCHAR}
WHERE id = #{id, jdbcType=VARCHAR}
</update>
-
+
<update id="updateSelective"
parameterType="org.apache.shenyu.admin.model.entity.DiscoveryRelDO">
UPDATE discovery_rel
<set>
@@ -152,7 +158,7 @@
</set>
WHERE id = #{id, jdbcType=VARCHAR}
</update>
-
+
<delete id="delete" parameterType="java.lang.String">
DELETE
FROM discovery_rel
diff --git
a/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
index d89699b6b..933b5262a 100644
--- a/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/discovery-upstream-sqlmap.xml
@@ -111,6 +111,17 @@
WHERE id=#{id, jdbcType=VARCHAR}
</update>
+ <update id="updateDiscoveryHandlerIdAndUrl">
+ UPDATE discovery_upstream
+ SET
+ protocol=#{protocol,jdbcType=VARCHAR},
+ status=#{status,jdbcType=INTEGER},
+ weight=#{weight,jdbcType=INTEGER},
+ props=#{props,jdbcType=VARCHAR},
+ date_updated=#{dateUpdated, jdbcType=TIMESTAMP}
+ WHERE discovery_handler_id=#{id, jdbcType=VARCHAR} and url =#{url}
+ </update>
+
<select id="selectByIds" parameterType="java.util.List"
resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
@@ -130,15 +141,15 @@
<select id="selectByProxySelectorId" resultMap="BaseResultMap">
SELECT
- du.id,
- du.date_created,
- du.date_updated,
- du.discovery_handler_id,
- du.protocol,
- du.url,
- du.status,
- du.weight,
- du.props
+ du.id,
+ du.date_created,
+ du.date_updated,
+ du.discovery_handler_id,
+ du.protocol,
+ du.url,
+ du.status,
+ du.weight,
+ du.props
FROM discovery_upstream du
INNER JOIN discovery_rel dr ON du.discovery_handler_id =
dr.discovery_handler_id
<where>
@@ -146,6 +157,12 @@
</where>
</select>
+ <select id="selectByDiscoveryHandlerIdAndUrl"
+
resultType="org.apache.shenyu.admin.model.entity.DiscoveryUpstreamDO">
+ SELECT <include refid="Base_Column_List"/> from discovery_upstream
where discovery_handler_id = #{discoveryHandlerId} and url = #{url}
+
+ </select>
+
<delete id="deleteByIds" parameterType="java.util.List">
DELETE FROM discovery_upstream WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
@@ -184,6 +201,6 @@
</delete>
<delete id="deleteByUrl">
- DELETE FROM discovery_upstream WHERE url = #{url}
+ DELETE FROM discovery_upstream WHERE discovery_handler_id =
#{discoveryHandlerId} and url = #{url}
</delete>
</mapper>
diff --git a/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
index e7f25b157..d27f1b700 100644
--- a/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml
@@ -123,10 +123,21 @@
</select>
<select id="selectByDiscoveryId"
resultType="org.apache.shenyu.admin.model.entity.ProxySelectorDO">
- SELECT ps.id , ps.name, ps.plugin_name , ps.type, ps.forward_port ,
ps.props
- FROM proxy_selector ps inner join discovery_rel dr on ps.id =
dr.proxy_selector_id
+ SELECT
+ ps.id ,
+ ps.name,
+ ps.plugin_name ,
+ ps.type,
+ ps.forward_port ,
+ ps.props
+ FROM proxy_selector ps
+ inner join discovery_rel dr on ps.id = dr.proxy_selector_id
inner join discovery_handler dh on dh.id = dr.discovery_handler_id
- where dh.discovery__id = #{discoveryId}
+ where dh.discovery_id = #{discoveryId, jdbcType=VARCHAR}
+ </select>
+
+ <select id="selectAll" resultMap="BaseResultMap">
+ SELECT <include refid="Base_Column_List"/> FROM proxy_selector
</select>
<delete id="deleteByIds" parameterType="java.util.List">
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/config/DataSyncConfigurationTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/config/DataSyncConfigurationTest.java
index cca2b122b..35692e0e1 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/config/DataSyncConfigurationTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/config/DataSyncConfigurationTest.java
@@ -28,6 +28,7 @@ import
org.apache.shenyu.admin.config.properties.HttpSyncProperties;
import org.apache.shenyu.admin.config.properties.NacosProperties;
import org.apache.shenyu.admin.config.properties.ZookeeperProperties;
import org.apache.shenyu.admin.listener.etcd.EtcdClient;
+import org.apache.shenyu.admin.service.DiscoveryService;
import org.apache.shenyu.admin.service.MetaDataService;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.RuleService;
@@ -89,6 +90,9 @@ public final class DataSyncConfigurationTest extends
AbstractConfigurationTest {
@Mock
private MetaDataService metaDataService;
+ @Mock
+ private DiscoveryService discoveryService;
+
@BeforeAll
public static void setUpBeforeClass() throws Exception {
zkServer = new TestingServer();
@@ -130,7 +134,7 @@ public final class DataSyncConfigurationTest extends
AbstractConfigurationTest {
@Test
public void testZookeeperDataInit() {
final SyncDataService syncDataService = new
SyncDataServiceImpl(appAuthService, pluginService, selectorService,
- ruleService, eventPublisher, metaDataService);
+ ruleService, eventPublisher, metaDataService,
discoveryService);
DataSyncConfiguration.ZookeeperListener zookeeperListener = new
DataSyncConfiguration.ZookeeperListener();
assertNotNull(zookeeperListener.zookeeperDataChangedInit(zkClient));
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/listener/AbstractDataChangedListenerTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/listener/AbstractDataChangedListenerTest.java
index be94859f8..36fed9d25 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/listener/AbstractDataChangedListenerTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/listener/AbstractDataChangedListenerTest.java
@@ -22,12 +22,16 @@ import org.apache.shenyu.admin.service.MetaDataService;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.RuleService;
import org.apache.shenyu.admin.service.SelectorService;
+import org.apache.shenyu.admin.service.ProxySelectorService;
+import org.apache.shenyu.admin.service.DiscoveryUpstreamService;
import org.apache.shenyu.common.dto.AppAuthData;
import org.apache.shenyu.common.dto.ConfigData;
import org.apache.shenyu.common.dto.MetaData;
import org.apache.shenyu.common.dto.PluginData;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
+import org.apache.shenyu.common.dto.ProxySelectorData;
+import org.apache.shenyu.common.dto.DiscoverySyncData;
import org.apache.shenyu.common.enums.ConfigGroupEnum;
import org.apache.shenyu.common.enums.DataEventTypeEnum;
import org.assertj.core.util.Lists;
@@ -62,6 +66,10 @@ public final class AbstractDataChangedListenerTest {
private MetaDataService metaDataService;
+ private ProxySelectorService proxySelectorService;
+
+ private DiscoveryUpstreamService discoveryUpstreamService;
+
@BeforeEach
public void setUp() throws Exception {
listener = new MockAbstractDataChangedListener();
@@ -70,6 +78,8 @@ public final class AbstractDataChangedListenerTest {
ruleService = mock(RuleService.class);
selectorService = mock(SelectorService.class);
metaDataService = mock(MetaDataService.class);
+ proxySelectorService = mock(ProxySelectorService.class);
+ discoveryUpstreamService = mock(DiscoveryUpstreamService.class);
Class clazz = MockAbstractDataChangedListener.class.getSuperclass();
Field appAuthServiceField = clazz.getDeclaredField("appAuthService");
@@ -87,6 +97,12 @@ public final class AbstractDataChangedListenerTest {
Field metaDataServiceField = clazz.getDeclaredField("metaDataService");
metaDataServiceField.setAccessible(true);
metaDataServiceField.set(listener, metaDataService);
+ Field proxySelectorServiceField =
clazz.getDeclaredField("proxySelectorService");
+ proxySelectorServiceField.setAccessible(true);
+ proxySelectorServiceField.set(listener, proxySelectorService);
+ Field discoveryUpstreamServiceField =
clazz.getDeclaredField("discoveryUpstreamService");
+ discoveryUpstreamServiceField.setAccessible(true);
+ discoveryUpstreamServiceField.set(listener, discoveryUpstreamService);
List<AppAuthData> appAuthDatas =
Lists.newArrayList(mock(AppAuthData.class));
when(appAuthService.listAll()).thenReturn(appAuthDatas);
@@ -98,6 +114,10 @@ public final class AbstractDataChangedListenerTest {
when(selectorService.listAll()).thenReturn(selectorDatas);
List<MetaData> metaDatas = Lists.newArrayList(mock(MetaData.class));
when(metaDataService.listAll()).thenReturn(metaDatas);
+ List<ProxySelectorData> proxySelectorDatas =
Lists.newArrayList(mock(ProxySelectorData.class));
+ when(proxySelectorService.listAll()).thenReturn(proxySelectorDatas);
+ List<DiscoverySyncData> discoverySyncDatas =
Lists.newArrayList(mock(DiscoverySyncData.class));
+
when(discoveryUpstreamService.listAll()).thenReturn(discoverySyncDatas);
}
@AfterEach
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
index f0b9acb4a..c20589401 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
@@ -23,6 +23,8 @@ import org.apache.shenyu.admin.mapper.DiscoveryHandlerMapper;
import org.apache.shenyu.admin.mapper.DiscoveryMapper;
import org.apache.shenyu.admin.mapper.DiscoveryUpstreamMapper;
import org.apache.shenyu.admin.mapper.ProxySelectorMapper;
+import org.apache.shenyu.admin.mapper.DiscoveryRelMapper;
+import org.apache.shenyu.admin.mapper.SelectorMapper;
import org.apache.shenyu.admin.model.dto.DiscoveryUpstreamDTO;
import org.apache.shenyu.admin.model.entity.DiscoveryDO;
import org.apache.shenyu.admin.model.entity.DiscoveryHandlerDO;
@@ -71,6 +73,12 @@ class DiscoveryUpstreamServiceTest {
@Mock
private DiscoveryProcessor discoveryProcessor;
+ @Mock
+ private DiscoveryRelMapper discoveryRelMapper;
+
+ @Mock
+ private SelectorMapper selectorMapper;
+
@BeforeEach
void setUp() {
DiscoveryHandlerDO discoveryHandlerDO = new DiscoveryHandlerDO();
@@ -81,7 +89,8 @@ class DiscoveryUpstreamServiceTest {
when(discoveryMapper.selectById(anyString())).thenReturn(discoveryDO);
when(discoveryProcessorHolder.chooseProcessor(anyString())).thenReturn(discoveryProcessor);
when(proxySelectorMapper.selectByHandlerId(anyString())).thenReturn(new
ProxySelectorDO());
- discoveryUpstreamService = new
DiscoveryUpstreamServiceImpl(discoveryUpstreamMapper, discoveryHandlerMapper,
proxySelectorMapper, discoveryMapper, discoveryProcessorHolder);
+ discoveryUpstreamService = new
DiscoveryUpstreamServiceImpl(discoveryUpstreamMapper, discoveryHandlerMapper,
proxySelectorMapper, discoveryMapper,
+ discoveryRelMapper, selectorMapper, discoveryProcessorHolder);
}
@Test
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/SyncDataServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/SyncDataServiceTest.java
index 4fecf8318..039f2a0e5 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/SyncDataServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/SyncDataServiceTest.java
@@ -80,6 +80,15 @@ public final class SyncDataServiceTest {
@Mock
private MetaDataService metaDataService;
+ @Mock
+ private ProxySelectorService proxySelectorService;
+
+ @Mock
+ private DiscoveryService discoveryService;
+
+ @Mock
+ private DiscoveryUpstreamService discoveryUpstreamService;
+
@Test
public void syncAllTest() {
PluginData pluginData = buildPluginData();
diff --git
a/shenyu-discovery/shenyu-discovery-api/src/main/java/org/apache/shenyu/discovery/api/ShenyuDiscoveryService.java
b/shenyu-discovery/shenyu-discovery-api/src/main/java/org/apache/shenyu/discovery/api/ShenyuDiscoveryService.java
index dece0d7d2..f60f054ab 100644
---
a/shenyu-discovery/shenyu-discovery-api/src/main/java/org/apache/shenyu/discovery/api/ShenyuDiscoveryService.java
+++
b/shenyu-discovery/shenyu-discovery-api/src/main/java/org/apache/shenyu/discovery/api/ShenyuDiscoveryService.java
@@ -21,6 +21,8 @@ import org.apache.shenyu.discovery.api.config.DiscoveryConfig;
import org.apache.shenyu.discovery.api.listener.DataChangedEventListener;
import org.apache.shenyu.spi.SPI;
+import java.util.List;
+
/**
* The interface for shenyu discovery service.
*/
@@ -63,7 +65,15 @@ public interface ShenyuDiscoveryService {
* @param key key
* @return value
*/
- String getData(String key);
+ List<String> getRegisterData(String key);
+
+ /**
+ * exits.
+ *
+ * @param key key
+ * @return Boolean
+ */
+ Boolean exits(String key);
/**
* shutdown.
diff --git
a/shenyu-discovery/shenyu-discovery-zookeeper/src/main/java/org/apache/shenyu/discovery/zookeeper/ZookeeperDiscoveryService.java
b/shenyu-discovery/shenyu-discovery-zookeeper/src/main/java/org/apache/shenyu/discovery/zookeeper/ZookeeperDiscoveryService.java
index 51eb09785..f826a1961 100644
---
a/shenyu-discovery/shenyu-discovery-zookeeper/src/main/java/org/apache/shenyu/discovery/zookeeper/ZookeeperDiscoveryService.java
+++
b/shenyu-discovery/shenyu-discovery-zookeeper/src/main/java/org/apache/shenyu/discovery/zookeeper/ZookeeperDiscoveryService.java
@@ -40,6 +40,9 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
/**
* The type Zookeeper for shenyu discovery service.
@@ -90,7 +93,9 @@ public class ZookeeperDiscoveryService implements
ShenyuDiscoveryService {
});
this.client.start();
try {
- this.client.blockUntilConnected();
+ if (!this.client.blockUntilConnected(30, TimeUnit.SECONDS)) {
+ throw new ShenyuException("shenyu start
ZookeeperDiscoveryService failure 30 seconds timeout");
+ }
} catch (InterruptedException e) {
throw new ShenyuException(e);
}
@@ -122,11 +127,8 @@ public class ZookeeperDiscoveryService implements
ShenyuDiscoveryService {
DiscoveryDataChangedEvent dataChangedEvent;
if (Objects.nonNull(data) && Objects.nonNull(data.getData())) {
String currentPath = data.getPath();
- String parentPath = currentPath.substring(0,
currentPath.lastIndexOf("/"));
- String parentData = this.getData(parentPath);
String currentData = new String(data.getData(),
StandardCharsets.UTF_8);
- String resultData = parentData + "|" + currentData;
- LOGGER.info("shenyu find resultData ={}", resultData);
+ LOGGER.info("shenyu find resultData ={}", currentData);
Stat stat = data.getStat();
boolean isEphemeral = Objects.nonNull(stat) &&
stat.getEphemeralOwner() > 0;
if (!isEphemeral) {
@@ -135,16 +137,16 @@ public class ZookeeperDiscoveryService implements
ShenyuDiscoveryService {
}
switch (event.getType()) {
case NODE_ADDED:
- dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, resultData,
DiscoveryDataChangedEvent.Event.ADDED);
+ dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, currentData,
DiscoveryDataChangedEvent.Event.ADDED);
break;
case NODE_UPDATED:
- dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, resultData,
DiscoveryDataChangedEvent.Event.UPDATED);
+ dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, currentData,
DiscoveryDataChangedEvent.Event.UPDATED);
break;
case NODE_REMOVED:
- dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, resultData,
DiscoveryDataChangedEvent.Event.DELETED);
+ dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, currentData,
DiscoveryDataChangedEvent.Event.DELETED);
break;
default:
- dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, resultData,
DiscoveryDataChangedEvent.Event.IGNORED);
+ dataChangedEvent = new
DiscoveryDataChangedEvent(currentPath, currentData,
DiscoveryDataChangedEvent.Event.IGNORED);
break;
}
listener.onChange(dataChangedEvent);
@@ -171,15 +173,26 @@ public class ZookeeperDiscoveryService implements
ShenyuDiscoveryService {
}
@Override
- public String getData(final String key) {
+ public List<String> getRegisterData(final String key) {
try {
- TreeCache treeCache = cacheMap.get(key);
- if (Objects.isNull(treeCache)) {
- return null;
+ List<String> children = client.getChildren().forPath(key);
+ List<String> datas = new ArrayList<>();
+ for (String child : children) {
+ String nodePath = key + "/" + child;
+ byte[] data = client.getData().forPath(nodePath);
+ datas.add(new String(data, StandardCharsets.UTF_8));
}
- ChildData currentData = treeCache.getCurrentData(key);
- byte[] ret = currentData.getData();
- return Objects.isNull(ret) ? null : new String(ret,
StandardCharsets.UTF_8);
+ return datas;
+ } catch (Exception e) {
+ throw new ShenyuException(e);
+ }
+ }
+
+ @Override
+ public Boolean exits(final String key) {
+ try {
+ Stat stat = this.client.checkExists().forPath(key);
+ return stat != null;
} catch (Exception e) {
throw new ShenyuException(e);
}