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

linghengqian 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 a5f3363227f Fix dead lock in multi DB when using batchUpdate (#31118)
a5f3363227f is described below

commit a5f3363227f14f9ee078193791d271a3a8a5e938
Author: H-Jason <[email protected]>
AuthorDate: Thu Jun 6 01:52:43 2024 +0800

    Fix dead lock in multi DB when using batchUpdate (#31118)
---
 .../sql/prepare/AbstractExecutionPrepareEngine.java      |  4 ++--
 .../test/natived/jdbc/commons/TestShardingService.java   | 16 ++++++++--------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
index eea1fec1043..7519f521863 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
@@ -30,11 +30,11 @@ import 
org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.TreeMap;
 
 /**
  * Abstract execution prepare engine.
@@ -80,7 +80,7 @@ public abstract class AbstractExecutionPrepareEngine<T> 
implements ExecutionPrep
     protected abstract List<ExecutionGroup<T>> group(String dataSourceName, 
int connectionOffset, List<List<ExecutionUnit>> executionUnitGroups, 
ConnectionMode connectionMode) throws SQLException;
     
     private Map<String, List<ExecutionUnit>> 
aggregateExecutionUnitGroups(final Collection<ExecutionUnit> executionUnits) {
-        Map<String, List<ExecutionUnit>> result = new 
LinkedHashMap<>(executionUnits.size(), 1F);
+        Map<String, List<ExecutionUnit>> result = new TreeMap<>();
         for (ExecutionUnit each : executionUnits) {
             result.computeIfAbsent(each.getDataSourceName(), unused -> new 
LinkedList<>()).add(each);
         }
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java
index 8e577b480b3..02f6906ce88 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/commons/TestShardingService.java
@@ -63,16 +63,16 @@ public final class TestShardingService {
         final Collection<Long> orderIds = insertData();
         Collection<Order> orders = orderRepository.selectAll();
         
assertThat(orders.stream().map(Order::getOrderType).collect(Collectors.toList()),
-                equalTo(Arrays.asList(1, 1, 1, 1, 1, 0, 0, 0, 0, 0)));
+                equalTo(Arrays.asList(0, 0, 0, 0, 0, 1, 1, 1, 1, 1)));
         
assertThat(orders.stream().map(Order::getUserId).collect(Collectors.toList()),
-                equalTo(new ArrayList<>(Arrays.asList(1, 3, 5, 7, 9, 2, 4, 6, 
8, 10))));
+                equalTo(new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 1, 3, 5, 
7, 9))));
         
assertThat(orders.stream().map(Order::getAddressId).collect(Collectors.toList()),
-                equalTo(new ArrayList<>(Arrays.asList(1L, 3L, 5L, 7L, 9L, 2L, 
4L, 6L, 8L, 10L))));
+                equalTo(new ArrayList<>(Arrays.asList(2L, 4L, 6L, 8L, 10L, 1L, 
3L, 5L, 7L, 9L))));
         
assertThat(orders.stream().map(Order::getStatus).collect(Collectors.toList()),
                 equalTo(IntStream.range(1, 11).mapToObj(i -> 
"INSERT_TEST").collect(Collectors.toList())));
         Collection<OrderItem> orderItems = orderItemRepository.selectAll();
         
assertThat(orderItems.stream().map(OrderItem::getUserId).collect(Collectors.toList()),
-                equalTo(new ArrayList<>(Arrays.asList(1, 3, 5, 7, 9, 2, 4, 6, 
8, 10))));
+                equalTo(new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 1, 3, 5, 
7, 9))));
         
assertThat(orderItems.stream().map(OrderItem::getPhone).collect(Collectors.toList()),
                 equalTo(IntStream.range(1, 11).mapToObj(i -> 
"13800000001").collect(Collectors.toList())));
         
assertThat(orderItems.stream().map(OrderItem::getStatus).collect(Collectors.toList()),
@@ -98,16 +98,16 @@ public final class TestShardingService {
         assertThat(orderIds, notNullValue());
         Collection<Order> orders = orderRepository.selectAll();
         
assertThat(orders.stream().map(Order::getOrderType).collect(Collectors.toList()),
-                equalTo(Arrays.asList(1, 1, 1, 1, 1, 0, 0, 0, 0, 0)));
+                equalTo(Arrays.asList(0, 0, 0, 0, 0, 1, 1, 1, 1, 1)));
         
assertThat(orders.stream().map(Order::getUserId).collect(Collectors.toList()),
-                equalTo(new ArrayList<>(Arrays.asList(1, 3, 5, 7, 9, 2, 4, 6, 
8, 10))));
+                equalTo(new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 1, 3, 5, 
7, 9))));
         
assertThat(orders.stream().map(Order::getAddressId).collect(Collectors.toList()),
-                equalTo(new ArrayList<>(Arrays.asList(1L, 3L, 5L, 7L, 9L, 2L, 
4L, 6L, 8L, 10L))));
+                equalTo(new ArrayList<>(Arrays.asList(2L, 4L, 6L, 8L, 10L, 1L, 
3L, 5L, 7L, 9L))));
         
assertThat(orders.stream().map(Order::getStatus).collect(Collectors.toList()),
                 equalTo(IntStream.range(1, 11).mapToObj(i -> 
"INSERT_TEST").collect(Collectors.toList())));
         Collection<OrderItem> orderItems = orderItemRepository.selectAll();
         
assertThat(orderItems.stream().map(OrderItem::getUserId).collect(Collectors.toList()),
-                equalTo(new ArrayList<>(Arrays.asList(1, 3, 5, 7, 9, 2, 4, 6, 
8, 10))));
+                equalTo(new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 1, 3, 5, 
7, 9))));
         
assertThat(orderItems.stream().map(OrderItem::getPhone).collect(Collectors.toList()),
                 equalTo(IntStream.range(1, 11).mapToObj(i -> 
"13800000001").collect(Collectors.toList())));
         
assertThat(orderItems.stream().map(OrderItem::getStatus).collect(Collectors.toList()),

Reply via email to