in shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/DiscoveryDataChangedEventSyncListener.java [94:139]
private void syncData0(final DiscoveryDataChangedEvent event, final DiscoverySyncData discoverySyncData, final DiscoveryDataChangedEvent.Event currentEvent) {
final DiscoverySyncData syncData = buildProxySelectorData(discoverySyncData, event.getValue());
final List<DiscoveryUpstreamData> upstreamDataList = syncData.getUpstreamDataList();
if (CollectionUtils.isEmpty(upstreamDataList)) {
LOG.warn("Discover EventSync proxySelectorData discoveryUpstreamList is empty syncData {}", syncData);
return;
}
final String discoveryHandlerId = discoverySyncData.getDiscoveryHandlerId();
switch (currentEvent) {
case ADDED:
upstreamDataList.forEach(d -> {
try {
DiscoveryUpstreamDO discoveryUpstreamDO = discoveryUpstreamMapper.selectByDiscoveryHandlerIdAndUrl(discoveryHandlerId, d.getUrl());
if (Objects.isNull(discoveryUpstreamDO)) {
d.setId(UUIDUtils.getInstance().generateShortUuid());
d.setDateCreated(new Timestamp(System.currentTimeMillis()));
d.setDateUpdated(new Timestamp(System.currentTimeMillis()));
discoveryUpstreamMapper.insert(DiscoveryTransfer.INSTANCE.mapToDo(d));
LOG.info("[DiscoveryDataChangedEventSyncListener] ADDED Upstream {}", d.getUrl());
}
} catch (DuplicateKeyException ex) {
LOG.info("[DiscoveryDataChangedEventSyncListener] Upstream {} exist", d.getUrl());
}
});
break;
case UPDATED:
upstreamDataList.stream().map(DiscoveryTransfer.INSTANCE::mapToDo).forEach(discoveryUpstreamDO -> {
discoveryUpstreamDO.setDiscoveryHandlerId(discoveryHandlerId);
int effect = discoveryUpstreamMapper.updateDiscoveryHandlerIdAndUrl(discoveryUpstreamDO);
LOG.info("[DiscoveryDataChangedEventSyncListener] UPDATE Upstream {}, effect = {} ", discoveryUpstreamDO.getUrl(), effect);
});
break;
case DELETED:
if (CollectionUtils.isNotEmpty(upstreamDataList)) {
upstreamDataList.forEach(up -> {
discoveryUpstreamMapper.deleteByUrl(discoveryHandlerId, up.getUrl());
LOG.info("[DiscoveryDataChangedEventSyncListener] DELETE Upstream {}", up.getUrl());
});
}
break;
default:
throw new IllegalStateException("DiscoveryDataChangedEventSyncListener find IllegalState");
}
DataChangedEvent dataChangedEvent = new DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, Collections.singletonList(syncData));
eventPublisher.publishEvent(dataChangedEvent);
}