You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by xi...@apache.org on 2023/07/10 06:56:14 UTC

[shenyu] branch master updated: [ISSUE #4797] update other rpc_ext for the same service (#4821)

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 fa306f493 [ISSUE #4797] update other rpc_ext for the same service (#4821)
fa306f493 is described below

commit fa306f4933f027e8dad995f6ad017b2ce2cc1725
Author: dragon-zhang <zh...@apache.org>
AuthorDate: Mon Jul 10 14:56:08 2023 +0800

    [ISSUE #4797] update other rpc_ext for the same service (#4821)
---
 .../org/apache/shenyu/admin/mapper/MetaDataMapper.java |  2 +-
 .../shenyu/admin/service/impl/MetaDataServiceImpl.java | 18 ++++++++++++++++--
 .../src/main/resources/mappers/meta-data-sqlmap.xml    |  4 +++-
 .../apache/shenyu/admin/mapper/MetaDataMapperTest.java |  2 +-
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
index ac21e4463..6320e0619 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
@@ -79,7 +79,7 @@ public interface MetaDataMapper extends ExistProvider {
      * @param methodName  the methodName
      * @return the meta data do
      */
-    MetaDataDO findByServiceNameAndMethod(@Param("serviceName") String serviceName, @Param("methodName") String methodName);
+    List<MetaDataDO> findByServiceNameAndMethod(@Param("serviceName") String serviceName, @Param("methodName") String methodName);
     
     /**
      * Select by query list.
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
index 062744a8f..9511b9ad5 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.admin.service.impl;
 
+import java.util.LinkedList;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shenyu.admin.aspect.annotation.Pageable;
@@ -40,6 +41,7 @@ import org.apache.shenyu.common.enums.ConfigGroupEnum;
 import org.apache.shenyu.common.enums.DataEventTypeEnum;
 import org.apache.shenyu.common.utils.UUIDUtils;
 import org.apache.shenyu.register.common.dto.MetaDataRegisterDTO;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
@@ -169,7 +171,8 @@ public class MetaDataServiceImpl implements MetaDataService {
     
     @Override
     public MetaDataDO findByServiceNameAndMethodName(final String serviceName, final String methodName) {
-        return metaDataMapper.findByServiceNameAndMethod(serviceName, methodName);
+        final List<MetaDataDO> metadataList = metaDataMapper.findByServiceNameAndMethod(serviceName, methodName);
+        return CollectionUtils.isEmpty(metadataList) ? null : metadataList.get(0);
     }
     
     @Override
@@ -200,10 +203,21 @@ public class MetaDataServiceImpl implements MetaDataService {
         MetaDataDO metaDataDO = MetaDataTransfer.INSTANCE.mapToEntity(metaDataDTO);
         Optional.ofNullable(metaDataMapper.selectById(metaDataDTO.getId()))
                 .ifPresent(e -> metaDataDTO.setEnabled(e.getEnabled()));
-        metaDataDO.setPathDesc(Objects.isNull(metaDataDO.getPathDesc()) ? "" : metaDataDO.getPathDesc());
+        metaDataDO.setPathDesc(Optional.ofNullable(metaDataDO.getPathDesc()).orElse(""));
         final MetaDataDO before = metaDataMapper.selectById(metaDataDO.getId());
         if (metaDataMapper.update(metaDataDO) > 0) {
             publisher.onUpdated(metaDataDO, before);
+            // update other rpc_ext for the same service
+            final List<MetaDataDO> befores = Optional.ofNullable(metaDataMapper.findByServiceNameAndMethod(
+                    metaDataDO.getServiceName(), null)).orElseGet(LinkedList::new);
+            for (MetaDataDO b : befores) {
+                MetaDataDO update = new MetaDataDO();
+                BeanUtils.copyProperties(b, update);
+                update.setRpcExt(metaDataDTO.getRpcExt());
+                if (metaDataMapper.update(update) > 0) {
+                    publisher.onUpdated(update, b);
+                }
+            }
         }
         
         // publish AppAuthData's update event
diff --git a/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml b/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
index 4a62335da..3dc70c3fe 100644
--- a/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
@@ -77,7 +77,9 @@
                 <include refid="Base_Column_List"/>
           FROM meta_data
          WHERE service_name = #{serviceName,jdbcType=VARCHAR}
-           AND method_name = #{methodName,jdbcType=VARCHAR}
+           <if test="methodName != null">
+             AND method_name = #{methodName,jdbcType=VARCHAR}
+           </if>
     </select>
 
 
diff --git a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/MetaDataMapperTest.java b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/MetaDataMapperTest.java
index b3d4c55fe..9c6a1e3ac 100644
--- a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/MetaDataMapperTest.java
+++ b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/MetaDataMapperTest.java
@@ -109,7 +109,7 @@ public final class MetaDataMapperTest extends AbstractSpringIntegrationTest {
         int count = metaDataMapper.insert(metaDataDO);
         assertThat(count, comparesEqualTo(1));
 
-        MetaDataDO result = metaDataMapper.findByServiceNameAndMethod(metaDataDO.getServiceName(), metaDataDO.getMethodName());
+        MetaDataDO result = metaDataMapper.findByServiceNameAndMethod(metaDataDO.getServiceName(), metaDataDO.getMethodName()).get(0);
         assertThat(result.getId(), comparesEqualTo(metaDataDO.getId()));
     }