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()),