This is an automated email from the ASF dual-hosted git repository.

terrymanu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 3c3106913f6 Refine MCP architecture boundary and sharding request 
merge (#39035)
3c3106913f6 is described below

commit 3c3106913f61e9d43a94bc5e4d9f2516b05a3041
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jul 7 19:09:52 2026 +0800

    Refine MCP architecture boundary and sharding request merge (#39035)
    
    - cover all MCP feature packages in the generic module boundary test
    - preserve generic workflow request fields when merging sharding requests
    - reuse descriptor resource swap construction for fixed and template 
resources
---
 .../mcp/bootstrap/MCPArchitectureBoundaryTest.java     | 10 +++++++---
 .../sharding/tool/model/ShardingWorkflowRequest.java   |  9 +++++----
 .../tool/model/ShardingWorkflowRequestTest.java        | 17 ++++++++++++++---
 .../descriptor/MCPDescriptorCatalogYamlSwapper.java    | 18 ++++++++++--------
 4 files changed, 36 insertions(+), 18 deletions(-)

diff --git 
a/mcp/bootstrap/src/test/java/org/apache/shardingsphere/mcp/bootstrap/MCPArchitectureBoundaryTest.java
 
b/mcp/bootstrap/src/test/java/org/apache/shardingsphere/mcp/bootstrap/MCPArchitectureBoundaryTest.java
index c53e0533ab8..3cbe2ce4524 100644
--- 
a/mcp/bootstrap/src/test/java/org/apache/shardingsphere/mcp/bootstrap/MCPArchitectureBoundaryTest.java
+++ 
b/mcp/bootstrap/src/test/java/org/apache/shardingsphere/mcp/bootstrap/MCPArchitectureBoundaryTest.java
@@ -37,11 +37,15 @@ class MCPArchitectureBoundaryTest {
             "mcp/bootstrap/src/main/java");
     
     private static final List<String> FEATURE_PACKAGE_IMPORTS = List.of(
+            "org.apache.shardingsphere.mcp.feature.broadcast",
             "org.apache.shardingsphere.mcp.feature.encrypt",
-            "org.apache.shardingsphere.mcp.feature.mask");
+            "org.apache.shardingsphere.mcp.feature.mask",
+            "org.apache.shardingsphere.mcp.feature.readwritesplitting",
+            "org.apache.shardingsphere.mcp.feature.shadow",
+            "org.apache.shardingsphere.mcp.feature.sharding");
     
     @Test
-    void assertGenericModulesDoNotImportEncryptOrMaskFeatures() throws 
IOException {
+    void assertGenericModulesDoNotImportFeatures() throws IOException {
         Path projectRoot = findProjectRoot();
         for (String each : GENERIC_MODULE_SOURCE_DIRECTORIES) {
             assertNoFeatureImport(projectRoot.resolve(each));
@@ -52,7 +56,7 @@ class MCPArchitectureBoundaryTest {
         try (Stream<Path> paths = Files.walk(sourceDirectory)) {
             List<Path> actualViolations = 
paths.filter(Files::isRegularFile).filter(each -> 
each.toString().endsWith(".java"))
                     .filter(this::containsFeaturePackageImport).toList();
-            assertTrue(actualViolations.isEmpty(), () -> "Generic MCP modules 
must not import encrypt/mask feature packages: " + actualViolations);
+            assertTrue(actualViolations.isEmpty(), () -> "Generic MCP modules 
must not import feature packages: " + actualViolations);
         }
     }
     
diff --git 
a/mcp/features/sharding/src/main/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequest.java
 
b/mcp/features/sharding/src/main/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequest.java
index 0855bd2b93f..683d8e0ab6e 100644
--- 
a/mcp/features/sharding/src/main/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequest.java
+++ 
b/mcp/features/sharding/src/main/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequest.java
@@ -73,14 +73,15 @@ public final class ShardingWorkflowRequest extends 
WorkflowRequest {
      * @return merged request
      */
     public static ShardingWorkflowRequest merge(final WorkflowRequest 
previous, final ShardingWorkflowRequest current) {
-        if (!(previous instanceof ShardingWorkflowRequest)) {
-            return current.copy();
-        }
-        ShardingWorkflowRequest result = ((ShardingWorkflowRequest) 
previous).copy();
+        ShardingWorkflowRequest result = copyPreviousRequest(previous);
         current.overlayTo(result);
         return result;
     }
     
+    private static ShardingWorkflowRequest copyPreviousRequest(final 
WorkflowRequest previous) {
+        return previous instanceof ShardingWorkflowRequest ? 
((ShardingWorkflowRequest) previous).copy() : copyFieldsTo(previous, new 
ShardingWorkflowRequest());
+    }
+    
     @Override
     public ShardingWorkflowRequest copy() {
         ShardingWorkflowRequest result = copyFieldsTo(this, new 
ShardingWorkflowRequest());
diff --git 
a/mcp/features/sharding/src/test/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequestTest.java
 
b/mcp/features/sharding/src/test/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequestTest.java
index 6c3eb9affb3..f710518be31 100644
--- 
a/mcp/features/sharding/src/test/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequestTest.java
+++ 
b/mcp/features/sharding/src/test/java/org/apache/shardingsphere/mcp/feature/sharding/tool/model/ShardingWorkflowRequestTest.java
@@ -60,11 +60,22 @@ class ShardingWorkflowRequestTest {
     }
     
     @Test
-    void assertMergeUsesCurrentWhenPreviousIsGeneric() {
-        ShardingWorkflowRequest current = createRequest();
-        ShardingWorkflowRequest actual = ShardingWorkflowRequest.merge(new 
WorkflowRequest(), current);
+    void assertMergeWithGenericPrevious() {
+        WorkflowRequest previous = new WorkflowRequest();
+        previous.setPlanId("plan-1");
+        previous.setDatabase("logic_db");
+        previous.setTable("t_order");
+        previous.setOperationType("create");
+        ShardingWorkflowRequest current = new ShardingWorkflowRequest();
+        current.setRuleName("ref_rule");
+        current.setShardingColumns("order_id");
+        ShardingWorkflowRequest actual = 
ShardingWorkflowRequest.merge(previous, current);
+        assertThat(actual.getPlanId(), is("plan-1"));
         assertThat(actual.getDatabase(), is("logic_db"));
+        assertThat(actual.getTable(), is("t_order"));
+        assertThat(actual.getOperationType(), is("create"));
         assertThat(actual.getRuleName(), is("ref_rule"));
+        assertThat(actual.getShardingColumns(), is("order_id"));
     }
     
     private ShardingWorkflowRequest createRequest() {
diff --git 
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/descriptor/MCPDescriptorCatalogYamlSwapper.java
 
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/descriptor/MCPDescriptorCatalogYamlSwapper.java
index 668dd3f634b..9a0e867454f 100644
--- 
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/descriptor/MCPDescriptorCatalogYamlSwapper.java
+++ 
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/descriptor/MCPDescriptorCatalogYamlSwapper.java
@@ -76,23 +76,25 @@ final class MCPDescriptorCatalogYamlSwapper {
     private static void swapFixedResourceDescriptors(final 
Collection<YamlMCPResourceDescriptor> yamlDescriptors, final 
Collection<MCPResourceDescriptor> resources,
                                                      final 
Collection<ShardingSphereMCPResourceMetadata> resourceMetadata) {
         for (YamlMCPResourceDescriptor each : emptyIfNull(yamlDescriptors)) {
-            ShardingSphereMCPResourceMetadata metadata = 
swapShardingSphereResourceMetadata(each.getUri(), 
each.getShardingSphereMetadata());
-            resources.add(new MCPResourceDescriptor(each.getUri(), 
each.getName(), each.getTitle(), each.getDescription(), each.getMimeType(),
-                    swapResourceAnnotations(each.getAnnotations()), 
createResourceMeta(each.getUri(), emptyMapIfNull(each.getMeta()), metadata)));
-            resourceMetadata.add(metadata);
+            swapResourceDescriptor(each.getUri(), each, resources, 
resourceMetadata);
         }
     }
     
     private static void swapResourceTemplateDescriptors(final 
Collection<YamlMCPResourceDescriptor> yamlDescriptors, final 
Collection<MCPResourceDescriptor> resourceTemplates,
                                                         final 
Collection<ShardingSphereMCPResourceMetadata> resourceMetadata) {
         for (YamlMCPResourceDescriptor each : emptyIfNull(yamlDescriptors)) {
-            ShardingSphereMCPResourceMetadata metadata = 
swapShardingSphereResourceMetadata(each.getUriTemplate(), 
each.getShardingSphereMetadata());
-            resourceTemplates.add(new 
MCPResourceDescriptor(each.getUriTemplate(), each.getName(), each.getTitle(), 
each.getDescription(), each.getMimeType(),
-                    swapResourceAnnotations(each.getAnnotations()), 
createResourceMeta(each.getUriTemplate(), emptyMapIfNull(each.getMeta()), 
metadata)));
-            resourceMetadata.add(metadata);
+            swapResourceDescriptor(each.getUriTemplate(), each, 
resourceTemplates, resourceMetadata);
         }
     }
     
+    private static void swapResourceDescriptor(final String uriTemplate, final 
YamlMCPResourceDescriptor yamlDescriptor, final 
Collection<MCPResourceDescriptor> resources,
+                                               final 
Collection<ShardingSphereMCPResourceMetadata> resourceMetadata) {
+        ShardingSphereMCPResourceMetadata metadata = 
swapShardingSphereResourceMetadata(uriTemplate, 
yamlDescriptor.getShardingSphereMetadata());
+        resources.add(new MCPResourceDescriptor(uriTemplate, 
yamlDescriptor.getName(), yamlDescriptor.getTitle(), 
yamlDescriptor.getDescription(), yamlDescriptor.getMimeType(),
+                swapResourceAnnotations(yamlDescriptor.getAnnotations()), 
createResourceMeta(uriTemplate, emptyMapIfNull(yamlDescriptor.getMeta()), 
metadata)));
+        resourceMetadata.add(metadata);
+    }
+    
     private static ShardingSphereMCPResourceMetadata 
swapShardingSphereResourceMetadata(final String uriTemplate, final 
YamlShardingSphereMCPResourceMetadata yamlMetadata) {
         if (null == yamlMetadata) {
             return new ShardingSphereMCPResourceMetadata(uriTemplate, 
List.of(), null, null, null, List.of(), List.of(), List.of());

Reply via email to